1、JDBC是什么?
JDBC是Java DataBase Connectivity(Java语言链接数据库)
2、JDBC的本质
JDBC是一套接口,有调用者(java工程师)和实现者(SUN公司)(实现类被称为驱动)之分,跟面向接口调用、面向接口写实现类,都属于面向接口编程
- 为什么面向接口?
- 解耦合:降低程序的耦合度,提高程序的扩展力;
3、关系
4、JDBC编程6步
- 第一步:注册驱动(作用:告诉Java程序,即将要链接的是哪个品牌的数据库)(DriverManager接口)- 第二步:获取连接(表示JVM的进程与数据库的进程打开了,这属于进程之间的通信,使用完后一定要关闭)(Connection接口)- 第三步:获取数据库操作对象 (专门执行sql语句的对象)(Statement接口、PreparedStatement接口)- 第四步:执行SQL语句(主要是DML DQL)- DML(数据操作语言): insert、delete、update,对表中的数据进行增删改- 第五步:处理查询 结果集(只有第四部执行的是select语句时,这一步才会执行)(ResultSet接口)- 第六步: 释放资源(使用完之后一定要关闭资源,Java和数据库属于进程间的通信,开启之后一定要关闭)(close)
5、JDBC事务
- 什么是事务
- 事务是数据库提供的一个特性
- 事务:组成各个数据的(最小)执行单元,要么都成功,要么都失败
- 我们使用一个例子来说明:以转账为例
-
* 转账的功能,冠希给美美转1000元钱。 * 使用事务 * 先给冠希扣除掉1000元 * 再给美美加上1000元 * 事务结束了
- 在MYSQL中操作
-
create table t_account( id int primary key auto_increment, username varchar(20), money double );--两种方式,第一种:使用命令的方式 start transaction; --开启事务 update t_account set money = money ‐ 1000 where username = '冠希'; update t_account set money = money + 1000 where username = '美美'; commit; --提供事务(事务已经结束了,数据永久的保存到数据库中了) rollback; --回滚事务(事务已经结束了,数据回滚到最初始化的状态)--第二种方式:设置MySQL事务不默认提交的方式 --MySQL数据库的事务是默认提交的。 update t_account set money = money ‐ 1000 where username = '冠希'; --默认使用了一个事务 --设置让MySQL的数据库的事务不默认提交 set autocommit = off或者0 --编写SQL语句(执行完,都没有提交) sql1 sql2 --手动提交和回滚 commit; rollback;
-
-
- 事务的特性
- 原子性
- 表示事务中所有操作是不可再分割的原子单位
- 一致性
- 事务执行前后数据需要保证一致
- 隔离性
- 多个事务同时操作一条记录,事务之间不能互相干扰
- 持久性
- 事务一旦结束了,数据将永久的保存到数据库中
- 原子性
- 事务的隔离
- 不考虑隔离性所引发的问题
-
1、脏读:一个事务读取到了另一个事务未提交的数据 2、不可重复读:一个事务读取到了另一个事务提交的数据,导致了多次查询的结果不一致。强调的是update,修改记录的数据。 3、虚度(幻读):一个事务读取到了另一个事务提交的数据,导致了多次查询的结果不一致。强调是insert,向表中添加一条数据。
-
- 设置隔离级别
- 事务的隔离级别
-
Read uncommitted --读未提交,什么都解决不了 Read committed --读已提交,避免脏读,但是不可重复读和虚读有可能产生 Repeatable read --可重复度,避免脏读和不可重复读,虚度有可能产生的(mysql默认) Serializable --串行,避免各种读(当有一个事务的级别达到此时就会上锁,另一个就不再允许 执行任何修改操作,以此达到避免各种问题的目的)
-
- 4中隔离的安全性和效率
-
安全 Serializable > Repeatable read > Read committed > Read uncommitted 效率 Serializable < Repeatable read < Read committed < Read uncommitted
-
- 事务的隔离级别
- 不考虑隔离性所引发的问题