Java 跨多个DAO spring mvc将自动提交设置为False
我是实现JDBC的新手。我正在构建一个注册页面,需要在其中向多个表中插入行 对于每个表,我都使用DAO,并且在其中一个服务类中调用所有DAO的insert方法。在每个DAO插入方法中,我都使用数据源创建新连接并执行 现在,如果插入时发生任何错误,我希望回滚所有insert语句 我知道有Java 跨多个DAO spring mvc将自动提交设置为False,java,spring-mvc,jdbc,rollback,Java,Spring Mvc,Jdbc,Rollback,我是实现JDBC的新手。我正在构建一个注册页面,需要在其中向多个表中插入行 对于每个表,我都使用DAO,并且在其中一个服务类中调用所有DAO的insert方法。在每个DAO插入方法中,我都使用数据源创建新连接并执行 现在,如果插入时发生任何错误,我希望回滚所有insert语句 我知道有 connection.setAutoCommit(false) 现在,我如何创建一次连接并在其他DAO中恢复相同的连接。因此,我可以使用保存点和回滚机制 除了作为参数发送连接,还有其他方法吗 我怎样才能做
connection.setAutoCommit(false)
现在,我如何创建一次连接并在其他DAO中恢复相同的连接。因此,我可以使用保存点和回滚机制
除了作为参数发送连接,还有其他方法吗
我怎样才能做到这一点
以下是“服务”页面中的示例代码:
Sucessfull = firstDAO.save(firstDAOObj);
if(Sucessfull){
Sucessfull = secondDAO.save(secondDAOObj);
}
if(Sucessfull){
Sucessfull = thirdDAO.save(thirdDAOObj);
}
我想这对你有帮助
try{
//Assume a valid connection object conn
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
String SQL = "INSERT INTO Employees " +
"VALUES (106, 20, 'Rita', 'Tez')";
stmt.executeUpdate(SQL);
//Submit a malformed SQL statement that breaks
String SQL = "INSERTED IN Employees " +
"VALUES (107, 22, 'Sita', 'Singh')";
stmt.executeUpdate(SQL);
// If there is no error.
conn.commit();
}catch(SQLException se){
// If there is any error.
conn.rollback();
}
我不确定为什么每个表都使用DAO(我假设所有表都在同一个数据库中)。我可能会用一把刀。我也不会为每个呼叫使用单独的连接。下面是我用于这类事情的通用模板: 我把这个放在刀的顶端:
private DataSource myDs= new JndiDataSourceLookup().getDataSource("<string name of your datasource>");
private DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(myDs);
private SimpleJdbcTemplate sjt = new SimpleJdbcTemplate(myDs);
使用Spring还有其他处理事务的方法,其中一种包括注释,但这可能有点复杂。我建议您在将来的应用程序中考虑这一点。我已经编辑了这个问题,我想创建一次连接,并希望在所有其他DAO中恢复相同的连接,以便使用保存点和自动提交功能……请您检查一下,我已经编辑了答案。可以相应地使用commit()和rollback()。在上面的示例中,两个sql语句都在一个方法中,但我们在不同的类中有不同的语句,我们希望使用相同的连接…然后创建类的对象并调用包含sql查询的方法。将连接作为参数传递。获取执行状态并在出现错误时引发异常。请记住调用try块中的所有方法。我希望将所有与表相关的语句分组到一个类中,因此我为每个表实现了单独的DAO。在我的数据库中将有许多表,是否有其他方法来实现above@SpringUser-我真的不认为每个桌子有一个单独的刀是一个好的设计。如果数据库中有50个表,那么最终会有50个DAO。话虽如此,您以前使用过Spring注释吗?您想在google上搜索您正在使用的Spring版本的Spring数据库事务注释。他们解释得很好。这将允许您在要跨多个DAO类参与事务的DAO方法上添加适当的注释。感谢@Troy,我将搜索Spring数据库事务注释,如果有任何问题,我将返回给您。您在这里得到一些奇怪的答案。我想查看一些用spring编写的示例应用程序。@NathanHughes,请指导我,如果您找到任何示例应用程序,您可以参考spring的。
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(def);
try {
// put all of your inserts in here using the SimpleJdbcTemplate
// that was declared above
transactionManager.commit(status);
} catch(Throwable t) {
try {
transactionManager.rollback(status);
} catch (Throwable t2) {
log.error("Error rolling back transaction", t2);
}
throw new DataAccessException(t);
}