**需求:**从数据库中读取数据连接,往连接中的某个表中插入一些数据,如果其中某一条插入失败,那么所有的数据都回滚。 **思路:**因为是动态配置数据源,@Transactional只适用当前的数据库连接,且只支持spring自带的数据库连接,所以@Transactional容易失效且麻烦。 解决: java.sql.DriverManager提供了getConnection()方法,通过getConnection()创建连接Connection,将Connection的自动提交设置为false,再使用Connection的CreateStatement()方法生成Statement,运行SQL语句,调用connection的commit()方法提交,使用try catch包围,catch到异常的时候调用connection的rollback()方法回滚,finally中关闭connection和Statement,完成。 编码
Connection connection = null;
Statement statement = null;
try {
connection = DriverManager.getConnection(url,username,password);
connection .setAutoCommit=false;
statement = connection.createStatement();
for () {
String sql = "";
statement.executeUpdate(sql);
}
connection.commit();
} catch (Exception e) {
connection.rollback();
e.printStackTrace();
return false;
} finally {
statement.close();
connection.close();
}
|