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
中抛出并捕获
我需要在 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
中抛出并捕获