Java Jdbc事务
我需要在jdbc中执行select、update和insert查询序列 这是我的密码: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);
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
,使您的方法具有事务性。这简化了代码、获取日志和自动事务行为……包装和重新抛出(第二个示例)比重新抛出(第一个示例)异常要好