Jdbc和Jdbctemplate

大家好,我是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。

你可能感兴趣的:(Jdbc和Jdbctemplate)