java - 向 Servlet 中抛出异常

标签 java exception servlets jdbc

我有一个名为 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/

相关文章:

sql-server - SQL Server 相当于 Oracle 的 “when no data found” 异常

servlets - ManagedBean 类中的 Java Faces ServletContext 对象

java - 使用自行生成的证书识别用户

java - 将三个 ByteArray 合并在一起,然后拆分生成的 ByteArray

java - 根据其他排放量订阅

Java arraylist 找不到构造函数,使用 arrays.aslist

java - 为什么在线程 "main"java.util.NoSuchElementException 中出现异常?

java - 将多行文本添加到 JTextArea

java - 模式语法异常,索引 0 附近的悬挂元字符 '+'

通过 ajax 从 Servlet 检索值时,JavaScript 比较失败