gpt4 book ai didi

java - 向 Servlet 中抛出异常

转载 作者:行者123 更新时间:2023-12-01 17:00:09 25 4
gpt4 key购买 nike

我有一个名为 ProblemServlet 的 Servlet。我有一个名为 ProblemTable 的数据库类。现在,下面是该 ProblemTable 类中的一个方法。

package DB;

import Controller.Common;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ProblemsTable extends DBMaster
{
public void deleteProblem(int idProblem)
{
checkConnection();
PreparedStatement ps = null;
String result="";

try
{
con.setAutoCommit(false);
String sql = "DELETE FROM Problem WHERE idProblem=?";
ps = con.prepareStatement(sql);

ps.setInt(1,idProblem);

int i = ps.executeUpdate();
con.commit();

if(i>0)
{
result="Deleted Succesfully";
}
else
{
result="Delete Failed";
}
}
catch(SQLException e)
{
e.printStackTrace();
result = "Delete Failed. Rolled back";

try {
con.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
result = "Delete failed. Rollback failed";
}
}
}
}

如您所见,我正在捕获此类中的异常。不过,我想在 ProblemServlet 中捕获这些异常,因为我可以将错误显示为 alert()

现在我的问题是这样的。

如果我抛出异常,那么我将无法调用 con.rollback()ps.close,因为 servlet 无法访问 pscon 并且也无法授予访问权限。

如何抛出异常并处理这些问题?

最佳答案

这很简单,您可以在完成回滚后重新抛出异常,或者使用 new 抛出另一个异常:

//1

catch(SQLException e)
{
e.printStackTrace();
result = "Delete Failed. Rolled back";

try {
con.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
result = "Delete failed. Rollback failed";
}
throw e;
}

//2

catch(SQLException e)
{
e.printStackTrace();
result = "Delete Failed. Rolled back";

try {
con.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
result = "Delete failed. Rollback failed";
}
throw new Exception(...);
}

关于java - 向 Servlet 中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28209950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com