这里是修真院后端小课堂,每篇分享文从
八个方面深度解析后端知识/技能,本篇分享的是:
【jdbc和jdbctemplate】
【修真院java小课堂】jdbc和jdbctemplate
大家好,我是IT修真院武汉分院第17期的学员王志雄,一枚正直纯洁善良的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
- 对结果集进行操作
6)关闭数据库连接。在使用完数据库之后,或者不需要再使用数据库的时候,可以通过Connection的close方法,关闭数据库的连接。
jdbctemplate的流程是什么样的
1).加载spring配置文件
2).获取jdbctemplate实例
3)执行SQL语句
4)操作结果集,.(查询方法)
常见问题
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语句直接一次性提交多少条数据.
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~