我需要在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注意:由于它是一个单独的transaction.So,如果在方法中得到任何异常,那么它正在执行一些statements.it调用commit()方法。
但是这些方法都是reusable.Could --任何一种方法--如何在editRequest方法catch块中捕获异常,以便我可以在发生错误时回滚事务?
发布于 2015-05-13 13:16:24
简单的回答:重新抛出异常。
示例:
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;
}发布于 2015-05-13 13:21:56
如果您想在SQLException中捕获editRequest,则需要通过向每个方法添加一个want子句并移除editRequest块来让它传播。
或者,您可以捕获该异常并将其包装到另一个在editRequest中引发和捕获的异常中。
https://stackoverflow.com/questions/30215875
复制相似问题