Java学习日记_异常与执行语句

本文介绍了一个使用Spring框架进行事务管理的具体实例,通过DataSourceTransactionManager和TransactionTemplate实现对数据库操作的事务控制,确保了数据更新的一致性和完整性。
package cn.xdl.dao;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;


public class PersonDao extends JdbcDaoSupport {


public void update() {


// 事务管理器
DataSourceTransactionManager manager = new DataSourceTransactionManager(getDataSource());
// 创建事务托管
// 参数1,事务管理器对象
TransactionTemplate template = new TransactionTemplate(manager);
template.execute(new TransactionCallback<Boolean>() {


@Override
public Boolean doInTransaction(TransactionStatus status) {

/*如果这里不使用TransactionTemplate的话,就不能将异常前后的两个语句视为一个整体,会产生正常的执行顺序,即执行语句一,抛出异常,程序停止,语句二不会被执行。如果使用,则认为两者是一个整体,如果抛出异常则会一起回滚。如果将其放入try块中,则又会产生执行1不执行2的结果。

*/


/*try {
getJdbcTemplate().update("update person_08 set id = ? where name = ?", "10008", "dawei");
if (1 == 1) {
throw new RuntimeException("停电了");
}
getJdbcTemplate().update("update person_08 set id = ? where name = ?", "10000", "jianwa");

} catch (Exception e) {


}
*/
try {
getJdbcTemplate().update("update person_08 set id = ? where name = ?", "10008", "dawei");
if (1 == 1) {
throw new RuntimeException("停电了");
}
getJdbcTemplate().update("update person_08 set id = ? where name = ?", "10000", "jianwa");
} catch (Exception e) {
status.setRollbackOnly();
}


return true;
}


});


}


public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
context.getBean("personDao", PersonDao.class).update();


}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值