您的位置:首页 > 编程语言 > Java开发

Java学习笔记3-JDBC事务管理

2016-04-06 01:21 585 查看
数据库中的事务就是一组数据库操作,具有几个特点:

1. 原子性,完整操作不可分割。

2. 一致性,数据保持一致。

3. 隔离性,并发事务彼此隔离,意思就是我做的时候,别人不能做,我做完了,别人才能做。

4. 永久性,对数据库的修改是永久保持的。

其中的原子性,就是把一组数据库操作当作一个完整不可分割的操作,举个例子,银行账户A向银行账户B转账,A中的金额减少,B中的金额增加,这两个操作必须当作一个完整不可分割的操作执行。

JDBC对事务管理的支持:

commit()提交操作

rollback()回滚操作

setAutoCommit(false)禁止自动提交

事务默认是自动提交的,在进行事务管理时,调用setAutoCommit()禁止自动提交,当事务操作失败或者出现异常时,调用rollback()回滚。

下面是慕课网上面的一个例子,我直接拿过来用了:

public String transaction(Account from, Account to, double amount) throws Exception{
Connection conn = DBUtil.getConnection();
//禁止自动提交
conn.setAutoCommit(false);
try{
AccountDao accountDao = new AccountDao();
TransDao transDao = new TransDao();

from.setAmount(from.getAmount() - amount);
accountDao.update(from);
//如果在期间出现由于其他程序引起的异常,导致下面的语句没有执行
String error = null;
error.split(" ");

to.setAmount(to.getAmount() + amount);
accountDao.update(to);

TransInfo info = new TransInfo();
info.setSourceAccount(from.getAccount());
info.setSource_id(from.getId());
info.setDestinationAccount(to.getAccount());
info.setDestinationId(to.getId());
info.setAmount(amount);
transDao.insert(info);

//手动提交操作
conn.commit();

return "success";

}catch(Exception e){
//回滚操作
conn.rollback();
e.printStackTrace();
return "false";
}
}


在执行上面的程序时,我们会发现,由于字符串error为null, 导致的空指针异常,这时候数据库执行回滚操作,保证了数据的正确。

以上就是JDBC事务管理的一个简单例子。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JDBC-事务管理