Java Jdbc 交易

Java Jdbc Transaction

我需要在 jdbc 中执行 select、更新、插入查询序列。

这是我的代码:

 public String editRequest(){
connection = DatabaseUtil.getServiceConnection();
            try {
                connection.setAutoCommit(false);
                executeUpdateCategory(category, ticketid);
                executeUpdateSubCategory(subcategory,
                        ticketid);
                executeUpdateItem(item, ticketid));
                executeUpdateImpact(impact),ticketid));
                  connection.commit();
                 response = "Success";
            } catch (SQLException e) {
                rollback();
            }
    return response;
    }

方法定义:

    public void executeCategory(category,ticketid){
        try{
        //select query using connection and prepared statement

        }
        catch(SQLException e){
        e.printstacktrace();
        }

etc... methods

注意:由于它是单个 transaction.So 如果我们在它正在执行的方法中遇到任何异常,一些 statements.it 正在调用 commit() 方法。

但是这些方法是 reusable.Could 如何在 editRequest 方法 catch 块中捕获异常,以便我可以在出现任何错误时回滚事务?

简单回答:重新抛出异常。

示例:

public void executeCategory(category, ticketid) throws SQLException {
    try {
        //select query using connection and prepared statement
    }
    catch(SQLException e){
        e.printStackTrace();
        throw e;
    }
}

所以可以在异常发生的地方记录异常,然后再抛给rollback()

另一种选择也许更好)是创建自定义异常并回滚此自定义异常:

public void executeCategory(category, ticketid) throws CustomException {
    try {
        //select query using connection and prepared statement
    }
    catch(SQLException e){
        e.printStackTrace();
        throw new CustomException(e);
    }
}

并在您的调用代码中:

public String editRequest() {
connection = DatabaseUtil.getServiceConnection();
    try {
        connection.setAutoCommit(false);
        executeUpdateCategory(category, ticketid);
        // Further calls
        connection.commit();
        response = "Success";
    } catch (CustomException e) {
        rollback();
    }
    return response;
}

如果您想在 editRequest 中捕获 SQLException,您需要通过向每个方法添加 throws 子句并移除 try catch 块来让它传播。

或者,您可以捕获异常并将其包装在另一个异常中,该异常在 editRequest

中抛出并捕获