大家好,我是IT修真院郑州分院第11期的JAVA学员何爽,一枚正直纯洁善良的java程序员。
今天给大家分享一下,修真院官网Java任务1,深度思考中的知识点————Jdbc和Jdbctemplate。
1.背景介绍
Java程序员最基本的也是最重要的技能之一就是去和数据库打交道,但代码和数据库是互不相干的,那么我们怎样去让我们写的代码去操作数据库呢?这个时候我们就需要去用到jdbc去连接数据库和我们的代码。
2.知识剖析
(一)什么是jdbc,jdbctemplate
JDBC(Java Data Base
Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
JDBCTemplate就是Spring对JDBC的封装,通俗点说就是Spring对jdbc的封装的模板,那么JDBCTemplate怎么做到的,这就和spring有关系了。
SpringIOC容器将管理数据库连接的数据源当作普通Java
Bean一样管理,然后将数据源注入封装类JdbcTemplate中,JdbcTemplate的dataSource属性就是注入配置的数据源。
JDBCTemplate是涉及到spring框架的一种方法,JDBCTemplate就是通过.xml配置文件极大的简化了我们代码量,并且提高了安全性,通过配置文件实现代码简化。
(二)jdbc操作数据库的使用
(1)初始化驱动:
通过Driver接口,装载MySql驱动:
Class.forName("com.mysql.jdbc.Driver")
(2)创建数据库连接:
connection = DriverManager.getConnection(url,name,密码);
(3)创建sql语句
(4)获得向数据库发送sql语句的parperstasement对象
preparedStatement =
connection.prepareStatement(sql);
(5)执行SQL语句:
preparedStatement.executeUpdate();如果使用的select查询,则需使用preparedStatement.executeQuery()方法。
(5)对结果集做相应的处理(增,删,改,查)
(6)关闭资源:
Close(resultSet,preparedStatement,connection);
(三)jdbctemplate操作数据库的使用
1.要使用JDBCTemplate对象来完成JDBC操作。通常情况下,有三种种方式得到JDBCTemplate对象。
(1)我们可以在自己定义的DAO 实现类中注入一个DataSource 引用来完成JdbcTemplate 的实例化。也就是它是从外部“注入” DataSource 到DAO 中,然后自己实例化JdbcTemplate,然后将DataSource 设置到JdbcTemplate 对象中。
(2)在 Spring 的 IoC 容器中配置一个 JdbcTemplate 的 bean,将 DataSource 注入进来,然后再把JdbcTemplate 注入到自定义DAO 中。
(3)Spring 提供了 org.springframework.jdbc.core.support.JdbcDaoSupport 类,这个类中定义了 JdbcTemplate 属性,也定义了DataSource属性,当设置DataSource 属性的时候,会创建jdbcTemplate 的实例,所以我们自己编写的DAO 只需要继承JdbcDaoSupport 类,然后注入DataSource 即可
2. JdbcTemplate类主要提供以下几类方法:
(1)execute方法:用于执行任何SQL语句,一般用于执行DDL语句;
(2)update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句,batchUpdate方法用于执行批处理相关语句;
(3)query方法及queryForXXX方法:用于执行查询相关语句;
3.常见问题
数据库连接资源被占用
PreparedStatement和Statement有什么区别?
JDBCTemplate和JDBC的优缺点
4.解决方案
(1)如果真的发生数据库连接资源被占用,有什么解决方法::
修改 MySQL 安装目录下 my.ini 或者 my.cnf 文件内的 max_user_connections 参数的数值,重启 MySQL 服务器。
(2)PreparedStatement和Statement有什么区别?
Statement每次执行SQL语句,相关数据库都要进行SQL语句编译,PreparedStatement是预编译,对批量处理大大提高效率,可以防止SQL注入攻击,防止数据库缓冲池溢出,代码的可读性,可维护性都更好(运行代码)
(3)JDBCTemplate和JDBC的优缺点
JDBC
优点:运行期:快捷、高效
缺点:编辑器:代码量大、繁琐异常处理、不支持数据库跨平台
JDBCTemplate
优点:运行期:高效、内嵌Spring框架中、支持基于AOP的声明式事务
缺点:必须于Spring框架结合在一起使用、不支持数据库跨平台、默认没有缓存
5.编码实战
6.扩展思考
使用连接池的好处
1).当有多个线程,每个线程都需要连接数据库执行SQL语句的话,那么每个线程都会创建一个连接,并且在使用完毕后,关闭连接。创建连接和关闭连接的过程也是比较消耗时间的,当多线程并发的时候,系统就会变得很卡顿。同时,一个数据库同时支持的连接总数也是有限的,如果多线程并发量很大,那么数据库连接的总数就会被消耗光,后续线程发起的数据库连接就会失败。
2.).连接池在使用之前,就会创建好一定数量的连接。如果有任何线程需要使用连接,那么就从连接池里面借用,而不是自己重新创建. 使用完毕后,又把这个连接归还给连接池供下一次或者其他线程使用。倘若发生多线程并发情况,连接池里的连接被借用光了,那么其他线程就会临时等待,直到有连接被归还回来,再继续使用。整个过程,这些连接都不会被关闭,而是不断的被循环使用,从而节约了启动和关闭连接的时间。
7. 参考文献
https://blog.csdn.net/qq_40127655/article/details/80147358
https://www.yiibai.com/jdbc/jdbc-select-records.html
http://alex4java.iteye.com/blog/2294833
https://www.jianshu.com/p/bf7fde798851
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
技能树.IT修真院“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~我的邀请码:26435812,或者你可以直接点击此链接:http://www.jnshu.com/login/1/26435812。