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操作,

相关推荐
百结2141 天前
Mysql数据库操作
数据库·mysql·oracle
keep one's resolveY1 天前
时区问题解决
数据库
Leinwin1 天前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
qq_417695051 天前
机器学习与人工智能
jvm·数据库·python
漫随流水1 天前
旅游推荐系统(view.py)
前端·数据库·python·旅游
薛定谔的悦1 天前
MQTT通信协议业务层实现的完整开发流程
java·后端·mqtt·struts
ego.iblacat1 天前
MySQL 服务基础
数据库·mysql
enjoy嚣士1 天前
springboot之Exel工具类
java·spring boot·后端·easyexcel·excel工具类
罗超驿1 天前
独立实现双向链表_LinkedList
java·数据结构·链表·linkedlist
盐水冰1 天前
【烘焙坊项目】后端搭建(12) - 订单状态定时处理,来单提醒和顾客催单
java·后端·学习