jdbc和jdbctemplate

跟風遠走 提交于 2019-12-10 20:15:43

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能。

大家好,我是IT修真院武汉分院的王志雄,一枚正直纯洁善良的java程序员,

今天给大家分享一下,修真院官网java任务一,深度思考中的知识点:jdbc和jdbctemplate

背景介绍

jdbc是什么?

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,

可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了

一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,

同时,JDBC也是个商标名。

它可以做什么

1,与数据库建立连接

2.发送造作数据库语句

3处理结果

jdbctemplate是什么

jdbc已经能够满足大部分用户最基本的对数据库的需求,但是在使用jdbc时,应用必须自己来管理数

据库资源.spring对数据库操作需求提供了,很好的支持,并在原始jdbc的基础上,构建了一个抽象层,

提供了许多shiyongjdbc的模板和驱动模块,为spring应用操作关系型数据库提供了更大的便利

知识剖析

一、

 

JDBC常用接口

  Driver接口

    - Driver接口由数据库厂家提供,对于Java开发者而言,只需要使用Driver接口就可以了。

    - 在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序。不同的数据库有不同的装载方法。

    - 驱动:就是各个厂商实现Sun公司提出的JDBC接口。即对Connection等接口的实现类的jar文件。

    - 装载mysql驱动:Class.forName("com.mysql.jdbc.Driver");

    - 装载oracle驱动:Class.forName("com.jdbc.driver.OracleDriver");

  DriverManager接口

    - DriverManager接口是JDBC的管理层,作用于用户和驱动程序之间。

    - DriverManager跟踪可用的驱动程序,并在数据库和相应的驱动之间建立连接。

  Connection接口

    - Connection与特定数据库的连接(会话),在连接上下文中执行SQL语句并返回结果。

    - DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上

      -Mysql

        Connection con = DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password");

      -Oracle

        Connection con = DriverManager.getConnection("jdbc:oracle:thin@host:port/database", "user", "password");

   Statement接口

    - 用于执行静态SQL语句并返回它所生成结果的对象。

    - 三种Statement类:

      - Statement:

        由createStatement创建,用于发送简单的SQL语句(不带参数)

      - PreparedStatement:

        - 继承自Statement接口,有preparedStatement创建,用于发送含有一个或者多个输入参数的SQL语句。PreparedStatement对象

         比Statement对象效率更高,并且是防止SQL注入。我们一般都使用PreparedStatement。

      - CallableStatement:

        - 继承自preparedStatement。由方法prePareCall创建,用于调用存储过程。

    - 常用的Statement方法

        - execute():运行语句,返回是否有结果集。

        - executeQuery():运行select语句,返回ResultSet结果节

        - executeUpdate():运行insert/update/delete操作,返回更新的行数


二、

下面以连接操作mysql数据库为例,简单说明不使用框架的情况下,操作的数据库的一般流程,相

信大家也都敲过千百遍了,我就简单描述下流程吧

1)java程序中加载驱动程序。一般使用Class.forName这种反射的方法加载数据库的驱动。

2)创建数据连接对象。通过DriverManager的getConnection方法,输入数据库连接的URL,用户名,

密码等信息,连接数据库,获取连接对象Connection 的实例

3)创建Statement(PreparedStatement)。通过数据库的连接对象可以创建

Statement(PreparedStatement)对象实例,Statement(PreparedStatement)

对象实例可以执行静态SQL并返回生成结果对象。

4)调用Statement(PreparedStatement)实例相关方法执行相应的SQL语句。

Statement(PreparedStatement)的实例有很多数据库的操作方法,如通过

executeQuery方法可以执行数据的查询,并可以得到返回的结果集ResultSet

5) 对结果集进行操作<br>

6)关闭数据库连接。在使用完数据库之后,或者不需要再使用数据库的时候,可以通过Connection的close方法,关闭数据库的连接。

jdbctemplate的流程是什么样的

1).加载spring配置文件<br>

2).获取jdbctemplate实例<br>

3)执行SQL语句<br>

4)操作结果集,.(查询方法)<br>

常见问题

JDBCTemplate和JDBC的优缺点?

解决方案

JDBC

优点:运行期:快捷、高效

缺点:编辑器:代码量大、繁琐异常处理

  • jdbc需要每次进行数据库连接, 然后处理SQL语句,传值,关闭数据库.对数据库进行频繁建立连接及关闭是极其耗费系统资源

  • 甚至有时还可能会出现数据库忘记关闭导致连接被占用.

  • 在以后的工作中,客户的需求肯定不是一成不变的,这就导致经常会改动数据库内容.

 

JDBCTemplate

优点:运行期:高效、内嵌Spring框架中、支持基于AOP的声明式事务

缺点:必须于Spring框架结合在一起使用、不支持数据库跨平台、默认没有缓存

编码实战

扩展思考

连接池的原理是什么

(1)建立数据库连接池对象(服务器启动)。

(2)按照事先指定的参数创建初始数量的数据库连接(即:空闲连接数)。

(3)对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大

(即:最大活跃连接数),创建一个新的数据库连接。

(4)存取数据库。

(5)关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正关闭,而是将其放入空闲队列中。如实际空闲连接数大于

初始空闲连接数则释放连接)。

(6)释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。

都有哪些常用的连接池

参考文献

 

 

参考一:https://blog.csdn.net/j_bean/article/details/78632469

参考二:https://www.cnblogs.com/mybatis/p/5896133.html

参考三:http://www.runoob.com/w3cnote/jdbc-use-guide.html

参考四:http://blog.csdn.net/xuchuangqi/article/details/53135592

 

 

更多讨论

Q1:使用 jdbc.properties 有什么好处?

A1:假如我们需要更改连接数据库的配置,我们直接在jdbc.properties里面更改一次就可以了.而JDBC的话需要增删改查里面每个连接数据库的配置都需要更改.

Q2:控制反转是什么意思?

A2:jdbc 和 jdbctemplate 相比  效率有差别么

Q3:单从效率方面来说,实际上jdbc比jdbctemplate的效率会高一点.jdbcTemplate则更方便我们进行更改内容,和理解当中的逻辑.

A3:jdbcTemplate 实现执行多条sql语句.

Q3:一种直接用mysql的批量处理语句.

另外一种拼接SQL语句直接一次性提交多少条数据.

PPT链接 视频链接

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

------------------------------------------------------------------------------------------------------------
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,学习的路上不再迷茫。

技能树.IT修真院

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!