Exception 从void方法到servlet的异常

Exception 从void方法到servlet的异常,exception,servlets,Exception,Servlets,在我的数据库访问对象中,我有一个由servlet执行的void方法: 我的刀: public void saveGL(glmaintenancebean glm) { username = glm.getUsername(); date = glm.getDate(); code = glm.getCode(); branch = glm.getBranch(); currency = glm.getCurrency

在我的数据库访问对象中,我有一个由servlet执行的void方法:

我的刀:

public void saveGL(glmaintenancebean glm) {
        username = glm.getUsername();
        date = glm.getDate();
        code = glm.getCode();
        branch = glm.getBranch();
        currency = glm.getCurrency();
        description = glm.getDescription();
        type = glm.getType();
        String bankid = getBankId();
        Connection conn;
        try{
          conn =  db.getDbConnection();
          String sql = "insert into gl_master (GL_CODE,GL_BRANCH,GL_CURRENCY,GL_DESC,GL_TYPE,BANK_ID,"
                  + "RCRE_USER,RCRE_DATE,LMOD_USER,LMOD_DATE) VALUES(?,?,?,?,?,?,?,"
                  + "to_date(?,'yyyy/mm/dd hh24:mi:ss'),?,to_date(?,'yyyy/mm/dd hh24:mi:ss'))";
          PreparedStatement ps = conn.prepareStatement(sql);
          ps.setString(1, code.toUpperCase());
          ps.setString(2, branch.toUpperCase());
          ps.setString(3, currency.toUpperCase());
          ps.setString(4, description.toUpperCase());
          ps.setString(5, type.toUpperCase());
          ps.setString(6, bankid.toUpperCase());
          ps.setString(7, username.toUpperCase());
          ps.setString(8, date);
          ps.setString(9, username.toUpperCase());
          ps.setString(10, date);
          ps.executeUpdate();
        }catch(Exception asd){
            System.out.println(asd.getMessage());
        }
    }
我的servlet

glmaintenancedao gld = new glmaintenancedao();//My Dao
            if (gld.glAlreadyExists(glm) == false) {
                if (gld.usersolandenteredsolMismatch(glm) == false) {
                    gld.saveGL(glm);//My void method called
                    request.setAttribute("succ", "General Ledger added Succesfully");
                    request.getRequestDispatcher("/WEB-INF/gl/glmaintenanance_succ.jsp").forward(request, response);
                } else {
                    request.setAttribute("succ", "User not Authorised to add Gl In another Branch!!");
                    request.getRequestDispatcher("/WEB-INF/gl/glmaintenanance_succ.jsp").forward(request, response);
                }
我需要向用户报告由voidDAO方法引起的任何错误,比如所有ORA错误,比如无效的列名、表或视图不存在

在我的代码中,如果遇到数据库或错误,系统仍会显示已成功添加的总账:

艾米的想法将被告知。

您正在捕获DAO中的所有异常,这就是为什么它们不会被报告回来

你可以:

  • 修改
    saveGL()
    以声明它抛出
    SQLException
  • 修改
    catch
    子句,将
    SQLException
    包装成特定于应用程序的异常(即您创建的异常类),并重新显示它;此异常可能会被选中,因此
    saveGL()
    必须声明它,或者取消选中(
    RuntimeException
  • 处理异常:

  • 在servlet中捕获它
  • 在web.xml中定义异常处理程序并显示错误页面

  • 我认为第8列是datetime数据类型,您正在使用setString方法。这可能会导致错误不,先生,这不是导致错误的原因,尽管我同意这可能会导致错误。我的问题是,如果您所说的错误发生在该方法中,我需要能够通过servlet向用户显示它。此错误当前显示在我的A应用程序服务器日志上。我不理解这一部分:
    您正在捕获DAO中的所有异常,这就是为什么它们没有被报告回来。
    这是否意味着我删除了方法中的try-catch语句?任何帐户中都没有!这意味着
    catch(Exception asd){/*print It*/}
    将捕获所有异常,并且函数将返回,就像异常没有发生一样(只有在控制台中发生的证据)。因此,您要么(伪代码)
    catch(…){throw SomethingElse}
    要么不捕获任何内容,在方法中声明异常:
    public void saveGL(…)throws…
    ,并在servlet中捕获它。Ok将尝试此操作,并让您知道我的进展情况,谢谢您的帮助。