Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jdbc事务_Java_Spring_Jakarta Ee_Jdbc - Fatal编程技术网

Java Jdbc事务

Java Jdbc事务,java,spring,jakarta-ee,jdbc,Java,Spring,Jakarta Ee,Jdbc,我需要在jdbc中执行select、update和insert查询序列 这是我的密码: public String editRequest(){ connection = DatabaseUtil.getServiceConnection(); try { connection.setAutoCommit(false); executeUpdateCategory(category, ticketid);

我需要在jdbc中执行select、update和insert查询序列

这是我的密码:

 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
注意:由于它是一个事务。因此,如果我们在方法内部得到任何异常,它将执行一些语句。它正在调用
commit()
method


但是这些方法是可重用的。有人知道如何在editRequest方法捕获块中捕获异常,以便在出现错误时回滚事务吗?

简单回答:重新抛出异常

例如:

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

简单回答:重新显示异常

例如:

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

简单回答:重新显示异常

例如:

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

简单回答:重新显示异常

例如:

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中抛出和捕获的异常中

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


或者,您可以捕获异常并将其包装到另一个在editRequest中抛出和捕获的异常中

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


或者,您可以捕获异常并将其包装到另一个在editRequest中抛出和捕获的异常中

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



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

如果您希望使用连接管理事务,则必须使用相同的连接对象,这反过来意味着您必须将connection对象传递给事务中的每个方法SQLException@ramp看起来
连接
是一个成员,然后它就工作了…@Uwe,你说得对。我没有注意到它是一个实例变量。你用[spring]标记了这个方法,为什么不使用它呢?使用
jdbc模板
和正确配置的
DatasourceTransactionManager
,使您的方法具有事务性。这简化了您的代码、获取日志和自动事务行为……如果您希望使用连接管理事务,则必须使用相同的连接对象,这反过来意味着您必须将连接对象传递给事务中的每个方法。不要捕获executeCategory()中的异常,只需申报投球SQLException@ramp看起来
连接
是一个成员,然后它就工作了…@Uwe,你说得对。我没有注意到它是一个实例变量。你用[spring]标记了这个方法,为什么不使用它呢?使用
jdbc模板
和正确配置的
DatasourceTransactionManager
,使您的方法具有事务性。这简化了您的代码、获取日志和自动事务行为……如果您希望使用连接管理事务,则必须使用相同的连接对象,这反过来意味着您必须将连接对象传递给事务中的每个方法。不要捕获executeCategory()中的异常,只需申报投球SQLException@ramp看起来
连接
是一个成员,然后它就工作了…@Uwe,你说得对。我没有注意到它是一个实例变量。你用[spring]标记了这个方法,为什么不使用它呢?使用
jdbc模板
和正确配置的
DatasourceTransactionManager
,使您的方法具有事务性。这简化了您的代码、获取日志和自动事务行为……如果您希望使用连接管理事务,则必须使用相同的连接对象,这反过来意味着您必须将连接对象传递给事务中的每个方法。不要捕获executeCategory()中的异常,只需申报投球SQLException@ramp看起来
连接
是一个成员,然后它就工作了…@Uwe,你说得对。我没有注意到它是一个实例变量。你用[spring]标记了这个方法,为什么不使用它呢?使用
jdbc模板
和正确配置的
DatasourceTransactionManager
,使您的方法具有事务性。这简化了代码、获取日志和自动事务行为……包装和重新抛出(第二个示例)比重新抛出(第一个示例)异常要好