Java 跨多个DAO spring mvc将自动提交设置为False

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中恢复相同的连接。因此,我可以使用保存点和回滚机制 除了作为参数发送连接,还有其他方法吗 我怎样才能做

我是实现JDBC的新手。我正在构建一个注册页面,需要在其中向多个表中插入行

对于每个表,我都使用DAO,并且在其中一个服务类中调用所有DAO的insert方法。在每个DAO插入方法中,我都使用数据源创建新连接并执行

现在,如果插入时发生任何错误,我希望回滚所有insert语句

我知道有

   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);
}