搜索
您的当前位置:首页正文

JDBC的复习

来源:意榕旅游网

一、JDBC的简介
1. 市场需求促进了技术的产生:要求应用程序和数据库交互这块有一个统一接口规范, 最开始是微软的ODBC
提出了 应用程序层->驱动管理器–>多个驱动程序(jar包)–>数据源–>数据库
2. sun公司为java语言连接各种数据库提供了一个统一标准规范接口JDBC,全程java database connectivity
具体实现由各个数据库厂商来完成,开发人员只需要拿来用即可,无需操心底层实现。
3. 核心组件:
- DriverManager: 驱动管理类型,用于通过数据源(url,username,password)来与数据库建立连接
调用getConnection(…)
- Connection:连接接口,与数据库的交互都是由其子类型的来完成的。
比如:createStatement()
PreparedStatement(String sql)
setAutoCommit(boolean flag)
commit();
rollback();
close();
- Statement:发送sql语句到数据库的一个接口,这个接口有安全隐患,可以被sql注入
比如:execute(String sql):通常用于执行DDL
executeUpdate(String sql):通常用于执行DML
executeQuery(String sql):通常用于执行DQL
其子类型PreparedStatement可以防止sql注入
- ResultSet:用来处理查询语句的返回值的一个接口,其子类型可以封装查询语句的返回值,可以理解为是一个二维表接口,
内部有类似于游标的方法,默认位置在第一行记录的上方。
boolean next(): 游标方法,当游标指向一行时,可以对这一行的字段值进行操作
getXXX(int columnIndex):指定这一行的某个字段的下标进行取值,下标是从1开始
getXXX(String columnLabel):指定这一行的某个字段的名称进行取值

二、JDBC的入门案例
- JDBC的工作原理:
1. 注册驱动
2. 获取连接
3. 获取sql执行对象,发送sql语句
4. 处理结果集
5. 关闭连接
- 通过工作原理写代码:完成某一个表的增删改查操作
三、JDBC的SQL注入/攻击
- 组件Statement发送的sql语句可以被通过参数来改变sql语句的结构,比如由原来的两个条件,变成三个条件,这就是sql攻击
- 为了防止这种情况发生,JDBC重写定义了一个子接口PreparedStatement
其原理:
1. 先sql模板发送到数据库中,进行校验,编译等。
2. 在sql模板中可以使用问号来给字段值占位。
3. 如果模板上有占位符号存在,则需要给占位符赋值,再次发送到数据库中。
4. 优点就是可以防止sql注入,因为编译后,结构不能再被改变,还可以提高执行效率,同一个模板只需要校验和编译一次。
可以通过批处理来理解这个效率。
5. 方法:
获取此对象的方式:connection.preparedStatement(String sql):此sql是模板
给问号赋值的方法:
ps.setXXX(int index,XXX xxx): index是问号的下标,从1开始
注意:与数据库交互的Date类型必须是java.sql.Date
- 批处理:
Statment的批处理方法:
addBatch(String sql): 每次添加一个新的sql语句,因此数据库每次都要解析和编译
executeBath():刷新缓存,一次性刷新,较少与数据库的交互次数
PreparedStatement的批处理方法:
addBatch(): 不带参数,也就是不需要再次发送sql语句,很明显不需要再次解析sql语句
execute():可以刷新缓存。
四、JDBC的事务
- 当一个业务逻辑中含有多个DML操作时,为了不影响数据的商业逻辑性,需要把这个业务逻辑看成一个整体,当成一个事务处理。
那么这个事务就要么成功执行,要么就回滚到最初的状态。
- JDBC提供了一下方法来维护一个事务
setAutoCommit(false): 表示开始事务,换句话说就是取消自动提交
commit(): 提交事务的方法
rollback():回滚事务到最后的状态
- mysql的事务:DML语句本身就是一个事务,会自动提交。
commit
rollback
- 事务的特点:ACID
原子性:
一致性:
隔离性:
序列化:
- 针对于多事务的并行情况:
有以下情况发生:脏读,不可重复读,幻读
隔离机制: 提交读,未提交读,重复读,序列化
五、数据库连接池
- 目的:为了减少应用程序与数据库连接的次数。因为每一次连接都会产生很大的连接开销。会降低性能。
- 原理:使用数据库连接池来管理多个连接对象。 也就是在数据库连接池对象初始化时,
先初始化N个连接(这N个连接已经连接数据库了,保持一直连着的状态)。当程序有连接请求发送过来时,从数据库连接池中获取
一个空闲连接对象,使用获取的连接对象进和数据库进行增删改查等交互,使用完后,立马归还给连接池,以备别的请求使用。
- 优势:大大减少了与数据库的连接次数,可以满足成千上万个连接请求。
- 常用的连接池:
dbcp
c3p0: 此数据库连接池的配置文件的名称必须是c3p0-config.xml,底层写死了。
druid
六、DAO设计模式
- 目的:为了将业务层的与数据库交互部分的代码单独抽出来,这样可以降低代码的耦合。抽出来的代码这一部分,我们使用一个
新的设计模式来进行封装和规范。这个模式就是DAO模式,也可以称之为持久层。
- 规范组件:
1. 实体类(采用orm来设计类与表的对应关系)
2. 接口: 提供了所有的与某个表的交互方法,增删改查等
3. 实现类: 对接口的实现
4. 工厂类型:获取接口的实现类对象
- 注意:每一个表对应一个DAO规范。
七、dbutils工具类
- 简单的封装的JDBC的代码逻辑。apache组织提供的一个工具类
- 核心组件:
QueryRunner: 主要目的就是获取连接,其提供了很多方法来完成增删改查的代码逻辑
ResultSetHandler: 将query到的表的数据进行各种类型的封装,比如Bean,数组,集合list,Map等等
八、xml和json的扩展

因篇幅问题不能全部显示,请点此查看更多更全内容

热门图文

Top