您的位置:首页 > 其它

jdbc事务处理

2015-08-20 15:19 260 查看
事务的定义

事务是指一个工作单元,它包含了一组添加,删除,修改等数据操作命令,这组命令作为一个整体向系统提交执行,要么都执行成功,要么全部恢复。

在jdbc中的事务

1.con.setAutoCommit(false)取消自动提交事务

2.对数据库执行一个或多个操作(一个或多个SQL语句)

3.con.commit(),提交事务(上面的第二步的多个操作就作为一个整体提交执行)

4.如果某个操作失败,通过con.rollback()回滚所有操作(撤销以上的操作,将数据恢复为执行前状态)

事务的语法

Connection con = DriverManger.getConnection(urlString);

con.setAutoCommit(false);

Statement stm = con.createStatement();

stm.executeUpdate(sqlString);

con.transactionEndMethod; //con.commit() or con.rollback();

数据库并发

数据库并发就是不同的事务对同一部分数据执行操作

数据库并发的问题

读脏数据:事务T1修改某一数据,并将其写回数据库,事务T2读取同一数据后,T1由于某种原因被撤消,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,我们称T2读到的数据就为”脏”数据,即不正确的数据。

不可重复读:不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。

幻读:事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。

并发控制的方法

在JDBC中,通过connection可以设置事务隔离级别来对并发进行控制。

事务隔离级别就是事务执行时受打扰的程度,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性越差,效率越低。

Connection中查看和设置隔离级别的方法

getTransactionIsolation():查看隔离级别

setTransactionIsolation(int level):设置隔离级别

TRANSACTION_NONE:此级别不支持事务

TRANSACTION_READ_UNCOMMITTED:此级别允许某一事务读其他事务还没有更改完的数据。允许发生脏读 、不可重复读和幻读。

TRANSACTION_READ_COMMITTED:此级别要求某一事务只能等别的事务全部更改完才能读。可以防止发生脏读,但不可重复读和幻读有可能发生。

TRANSACTION_REPEATABLE_READ:此级别要求某一事务只能等别的事务全部更改完才能读而且禁止不可重复读。也就是可以防止脏读和不可重复读,但幻读有可能发生。

TRANSACTION_SERIALIZABLE:此级别防止发生脏读、不可重复读和幻读,事务只能一个接着一个地执行,而不能并发执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jdbc事务-并发