一.JDBC中的事务管理
1.自动管理事务
JDBC会自动管理事务
每次调用executeUpdate()时,它会自动commit
一个业务只需执行一次DML时,采用自动管理事务
2.手动管理事务
取消自动提交:conn.setAutoCommit(false)
采用手动提交:conn.commit()
异常时要回滚:conn.rollback()
一个业务需要执行多次DML时,采用手动管理事务
3.什么是事务?
满足如下规则的数据库访问叫事务
1)原子性:事务是一个完整的过程,要么都成功,要么都失败.
2)一致性:事务前后的数据要保持一致,即收支平衡.
3)隔离性:事务访问过程中的数据,不能被别人访问.
4)持久性:事务一旦完成,就永久生效.
要整体的看待事务的概念,不要割裂来理解.
二.批量添加
1.使用场景
在企业软件上线时,导入原始数据,则需要进行批量添加.
2.如何实现
批量添加数据的前提是它们的SQL一样
三.获取自动生成的主键
1.使用场景
在增加主外键对应的2张表的数据时,需要获得主表自动生成的主键.
2.如何获取
反查
insert into uservalues(seq.nextval,?,?)
select * from user whereusername=?
记住序列的值
select seq.nextval fromdual
insert into uservalues(?,?,?)
通过ps获取该值
详见案例
四.分页查询
1.假分页(内存分页)
第1次查询就查出所有数据,然后将数据存入内存(List)
第N次查询则从内存(List)中获取某一页的数据
特点:第1次查询很慢,以后查询快,耗内存
只适合数据量很小的项目
2.真分页(物理分页)
每次查询都从数据库中直接查询出一页数据
特点:每次查询速度都较快,不耗内存
适合所有的项目
3.Oracle分页SQL
select * from ( select e.*,rownum r from ( select * from emps order by empno ) e ) where r between 1 and 10
4.分页条件的计算
五.DAO
1.说明
接口、工厂类后面再讨论
2.封装的思想
3.什么是JavaBean?
满足如下规范的类:
该类必须有包
该类必须有无参构造器
该类必须实现序列化接口
该类通常有get和set方法
代码示例:为DBUtil添加回滚方法
测试代码:
DAO实体类Emp:
DAO封装类EmpDao:
测试EmpDao: