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

相关推荐
清水白石0088 分钟前
解构异步编程的两种哲学:从 asyncio 到 Trio,理解 Nursery 的魔力
运维·服务器·数据库·python
资生算法程序员_畅想家_剑魔10 分钟前
Mysql常见报错解决分享-01-Invalid escape character in string.
数据库·mysql
一嘴一个橘子16 分钟前
spring-aop 的 基础使用 - 4 - 环绕通知 @Around
java
小毅&Nora32 分钟前
【Java线程安全实战】⑨ CompletableFuture的高级用法:从基础到高阶,结合虚拟线程
java·线程安全·虚拟线程
冰冰菜的扣jio33 分钟前
Redis缓存中三大问题——穿透、击穿、雪崩
java·redis·缓存
PyHaVolask36 分钟前
SQL注入漏洞原理
数据库·sql
小璐猪头1 小时前
专为 Spring Boot 设计的 Elasticsearch 日志收集 Starter
java
ptc学习者1 小时前
黑格尔时代后崩解的辩证法
数据库
代码游侠1 小时前
应用——智能配电箱监控系统
linux·服务器·数据库·笔记·算法·sqlite
ps酷教程1 小时前
HttpPostRequestDecoder源码浅析
java·http·netty