Java基础第20天-JDBC

JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题,程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作

  • ResultSet

表示数据库结果集的数据表,通常通过执行查询数据库的语句生成,ResultSet对象保持一个光标指向其当前的数据行,最初,光标位于第一行之前,next方法将光标移动到下一行,并且由于在ResultSet对象中没有更多行时返回false,因此可以在while循环中使用循环来遍历结果集

  • Statement

statement对象是用于执行静态SQL语句并返回其生成的结果的对象,在连接建立后,需要对数据库进行访问,执行命名或是SQL语句,可以通过Statement【存在SQL注入问题】,PreparedStatement【预处理】,CallableStatement【存储过程】

SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的SQL语句段或命令,恶意攻击数据库,要防范SQL注入,只要用PreparedStatement取代Statement就可以了

  • 批处理

当需要成批插入或者更新记录时,可以采用java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理,通常情况下比单独提交处理更有效率。

JDBC的批量处理语句包括下面方法:

  • addBatch():添加需要批量处理的SQL语句或参数
  • executeBatch():清空批处理包的语句
  • clearBatch():清空批处理包的语句

JDBC连接MySQL时,如果要使用批处理功能需在url中加参数**?rewriteBatchedStatements=true**

批处理往往和PreparedStatement一起搭配使用,可以既减少编译次数,又减少运行次数,效率大大提高

  • 数据库连接池

数据库连接池:

  1. 预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从"缓冲池"中取出一个,使用完毕之后再放回去。
  2. 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
  3. 当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中

通俗的讲:数据库连接池=数据库界的共享单车系统,让连接可以循环使用,省时省力又高效。

  • 数据库连接池种类
  1. JDBC的数据库连接池使用javax.sql.DataSource来表示,DataSource只是一个接口,该接口通常由第三方提供实现
  2. C3P0数据库连接池,速度相对较慢(比传统的JDBC肯定要快),稳定性不错(hibernate,spring)
  3. DBCP数据库连接池,速度相对c3p0较快,但不稳定
  4. Proxool数据库连接池,有监控连接池状态的功能,稳定性较c3p0差一点
  5. BoneCP数据库连接池,速度快
  6. **Druid(德鲁伊)**是阿里提供的数据库连接池,集DBCP、C3P0、Proxool优点于一身的数据库连接池
  • Apache-DBUtils

一个问题,当我们使用ResultSet返回结果集时,结果集和connection是关联的,如果我们关闭连接,就不能再使用结果集,但是我们的connection又不能不关闭,所以在这种情况下结果集不利于数据的管理,需要使用返回的信息时也不方便,为了解决这个情况引入了Apache-DBUtils

commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的封装,使用dbutils能极大简化jdbc编码的工作量

DbUtils类

  • BasicDao

虽然apache-dbutils+Druid简化了JDBC开发,但还有不足:sql语句是固定的,不能通过参数传入,通用性不好,需要进行改进,更方便执行增删改查;对于select操作,如果有返回值,返回类型不能固定,需要使用泛型,将来的表很多,业务需求复杂,不可能只靠一个java类完成,因此有了BasicDao

DAO(data access object 数据访问对象),这样的通用类,称为BasicDao。是专门和数据库交互的,即完成对数据库(表)的crud操作,

相关推荐
搞不懂语言的程序员20 分钟前
备忘录模式深度解析与实战案例
数据库·python·备忘录模式
angushine1 小时前
Gateway获取下游最终响应码
java·开发语言·gateway
爱的叹息1 小时前
关于 JDK 中的 jce.jar 的详解,以及与之功能类似的主流加解密工具的详细对比分析
java·python·jar
一一Null1 小时前
Token安全存储的几种方式
android·java·安全·android studio
AUGENSTERN_dc1 小时前
RaabitMQ 快速入门
java·后端·rabbitmq
晓纪同学1 小时前
C++ Primer (第五版)-第十三章 拷贝控制
java·开发语言·c++
小样vvv2 小时前
【源码】SpringMvc源码分析
java
nzwen6662 小时前
Redis学习笔记及总结
java·redis·学习笔记
燃星cro2 小时前
参照Spring Boot后端框架实现序列化工具类
java·spring boot·后端