1) JDBC底层开启事务
-
事务概念:一组SQL语句(指DML),要么同时生效,要么同时失效
-
作用域:仅仅对DML语句生效(insert,delete,update)
-
作用对象:必须是同一个Connection对象
-
jdbctemplate底层必须手动开启
-
使用 TransactionSynchronizationManager.initSynchronization();手动开启事务管理器
-
关闭自动递交业务:connection.setAutoCommit(false);改为手动递交
-
若成功:connection.commit();若失败:connection.rollback();
-
使用 TransactionSynchronizationManager.clearSynchronization();手动关闭事务管理器
-
Connection connection =null;
try {
//同时操作sql语句,需要使用事务
//获取数据源
DataSource source = JdbcUtils.getDataSource();
//实例jdbcTemplate
JdbcTemplate template = new JdbcTemplate(source);
// JdbcTemplate template = new JdbcTemplate();
//启动事务管理器(获取datasource操作数据库连接对象并绑定到当前线程中)
TransactionSynchronizationManager.initSynchronization();
//从数据源中获取jdbcTemplate操作的当前连接对象
// connection = JdbcUtils.getConnection();
// connection = source.getConnection();
connection = DataSourceUtils.getConnection(source);
// TransactionManagemen
connection.setAutoCommit(false);
template.update(sql,"ceshi1","男1113333");
System.out.println(1/0);// 模拟异常
template.update(sql,"ceshi2","男222333");
// connection.commit();
} catch (Exception e) {
e.printStackTrace();
connection.rollback();
}finally {
connection.commit();
TransactionSynchronizationManager.clearSynchronization();
}
执行效果:
异常产生时,数据没有出现一半成功一半失败!
266

被折叠的 条评论
为什么被折叠?



