【Java】JDBC
JDBC
JDBC概念
概念:Java Database Connectivity Java数据库连接 ,Java语言操作数据库
JDBC本质:是官方定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar
包。我们可以使用这套接口编程,真正执行的代码是驱动jar
包中的实现类。
使用步骤
导入jar包详细步骤
- 将需要导入的Jar包复制添加进Project下的libs文件夹中
- 选中jar包文件,添加为libs
- 选择Add As Libraries
对象详解
实际运用
判断是否有数据,看结果集下一行是否存在。
结果集ResultSet
写工具类获取路径URL和String值
工具类
工具类实现
练习
需求分析改进
练习实现代码
注意问题
SQL注入问题
在使用一些SQL语句的时候,会因为一些语句注入不符合开发者原意,绕过SQL验证的机制,产生安全隐患的问题。
需要使用到PreparedStatement,预编译的SQL语句。
步骤如下:
JDBC处理事务
简单逻辑的事务管理
但是这些代码在执行的时候,如果出现错误,可能导致事务并没有完全执行。体现在实际的场景中的时候,可能是张三的余额减掉了而李四的钱却没有加上,导致出现安全事故。
这个时候需要做出更加安全有效的措施。
执行的操作是需要加上【事务回滚】,在抓取异常的部分【catch】中,抓取所有可能发生的异常,用Exception e
接受异常,在异常抓取块中,进行事务回滚的判断【若执行对象不为null
,则进行事务回滚】,并同时抓取事务回滚可能产生的异常【SQLException e1
】,异常中简单处理,输出e1.printStackTrace();
改进之后的代码【部分】
- 出现异常,抓取事务
- 抓取异常,异常处理
事务管理
数据库连接池
为了简化代码,方便开发,我们需要引入数据库连接池和【Spring JDBC Template】。
根据之前的逻辑进行开发的话,申请的对象频繁使用后释放,会造成运算资源等的浪费,也会造成代码的繁冗(但是优点是不会造成内存的长期占用),导致开发难度加大。
在这种情况下,我们引进数据库连接池的概念。
数据库连接池就是相当于一个容器,将可能会用到的数据库连接对象存放在这个容器中,称之为数据库连接池。
使用完连接对象之后,将对象归还到数据库连接池中,不会被释放掉。同时申请使用对象的时候也简化了很多。使用数据库连接池的优点是:
- 访问速度变快
- 节约系统资源
- 连接利用率提高
查看标准开发文档中的数据,DataSource【位于javax.sql中】的详细介绍。
知识点
数据库连接池的实现
C3P0—数据库连接池的实现
注意事项
- 配置文件名字为指定的值时,会自动加载配置文件
- 不要忘记导入数据库驱动jar包
- 通过创建核心对象——数据库连接对象来使用(区别于后面的Druid数据库连接池)
Druid—数据库连接池的实现
使用步骤
注意事项
- 使用的时候不需要指定配置文件名,需要自己手动加载使用
- 配置文件是properties形式的文件
- 在src文件下new一个file,命名为XXX.properties
- 在source格式下添加名值对的方式注意事项:
- 名用大写比较规范
- 【=】符号两边别打空格
- 名值对写完后别加分号
- 使用时候需要创建数据库连接池对象,通过工厂【DruidDataSourceFactory】来获取
部分实现代码
其中,InputStream
是用来接收配置文件的输入字符。
创建Druid连接池的工具类
为了方便Druid的数据库连接池的使用,创建工具类对象。
实现代码
释放资源的时候需要进行重载,但是发现代码块中有重复的部分。可以在参数少的方法中直接返回多个参数的方法,并将没有的参数赋值为空,if判断不满足,跳过即可。
这样的编码大大精简了代码的长度。
具体的体现就是将这个方法中的rs传值null,返回给上面少参数的方法当成返回值。但要注意编码的顺序。
表现为这段代码,直接调用三参数的方法,将第一个参数赋值为空,结果作为返回值即可。
最后一个阶段,获取连接池方法。
Druid工具类调用
实现代码
Spring JdbcTemplate
概念 Spring JDBC
是Spring
框架对于JDBC
实现的一个封装。
使用步骤
使用前准备
导入jar包:
IOC需要的jar包:
commons-logging-1.1.3.jar
spring-aop-4.0.0.RELEASE.jar //注解会使用到的包
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
MySQL驱动包、c3p0jar包:
c3p0-0.9.1.2.jar
mysql-connector-java-5.1.37-bin.jar
JdbcTemplate需要的jar包:
spring-jdbc-4.0.0.RELEASE.jar
spring-orm-4.0.0.RELEASE.jar
spring-tx-4.0.0.RELEASE.jar
注:上面的可能因为版本差异,有所区别,教学视频中以下为准。
实际上应用时导入的jar包有:
实现代码
实际上使用JDBC temple时,只需要调用template之后就可以了,其余的操作(归还连接对象,释放对象,异常处理等)不需要我们再手动完成,封装的包会自己完成这些操作,大大简化了使用的步骤。
练习内容
实现步骤
用单元测试代码,实时测试是否执行成功这些语句。
实现代码
上面这段是正确的代码,如果
上面的代码,
如果要查询多条记录并返回,应该返回的是List集合,代码如下。
这次的返回时候,是将
下面的代码是原来的老方法,并没有直接调用Spring框架中提供的方法,代码冗余度高。
下面的代码调用了Spring框架中的封装的方法,代码比较简答,但是在进行传参的时候,需要将源码复制过来,修改其中的封装的方法中的
private 返回值类型
全部改成对应的实现类,如将 int 改成 Integer ,double 改成 Double;之后更改Getter和Setter方法,重新返回的toString方法。
最后一个阶段,返回查询总记录数。
Spring JdbcTemplate中使用的方法
根据B站视频学习总结过来,如有纰漏,敬请指出。