Java 无法理解SQL异常-Ora错误代码:Ora-01000:

Java 无法理解SQL异常-Ora错误代码:Ora-01000:,java,oracle,sqlexception,connection-leaks,ora-01000,Java,Oracle,Sqlexception,Connection Leaks,Ora 01000,我有一个Java类,它调用SQL过程来执行一些DB操作。 以下是我的Java方法: public static void buildContent(String id) throws Exception{ Connection conn = ExtractDB.getConnection(); CallableStatement cs = null; log.debug("arguments for the procedure is= "+id); tr

我有一个Java类,它调用SQL过程来执行一些DB操作。 以下是我的Java方法:

    public static void buildContent(String id) throws Exception{
    Connection conn = ExtractDB.getConnection();
    CallableStatement cs = null;
    log.debug("arguments for the procedure is=  "+id);
    try {
        cs = conn.prepareCall("{call CMS.relix.build_rp_data(?)}");
        cs.setString(1, id);
        cs.execute();
        if(cs!=null)
        {
            cs.close();
        }
    } catch (SQLException e) {
        log.error("Exception while executing the procedure", e);                
    }
    finally{
        if(cs!=null)
        {
            cs.close();
        }
    }
}   
经过几次处理后,它在日志中打印以下错误并挂起(我必须手动终止进程以停止执行):

我尝试了以下解决方案:

在catch块中添加“throw”后,进程现在不会挂起,并且在打印相同的SQL错误后继续执行

  catch (SQLException e) {
                log.error("Exception while executing the procedure", e);    
                throw e;
            }
我希望您能帮助我理解以下几点:

  • 如何在代码中添加“throw e”,让程序在出错后继续运行
  • 如果遇到这种情况,如何处理此错误/异常以停止处理并退出程序

  • 您没有关闭连接,请使用“资源块尝试”

    log.debug("arguments for the procedure is=  "+id);
    try (Connection conn = ExtractDB.getConnection();
    CallableStatement cs = conn.prepareCall("{call CMS.relix.build_rp_data(?)}")) {
    

    并删除
    最后

    如果未关闭连接,请使用try with resources块

    log.debug("arguments for the procedure is=  "+id);
    try (Connection conn = ExtractDB.getConnection();
    CallableStatement cs = conn.prepareCall("{call CMS.relix.build_rp_data(?)}")) {
    

    然后删除
    最后

    ,您的存储过程做什么?如果打开光标,是否也要将其关闭?第1700行的“CTOW.RELP”中有什么内容。您正在调用
    buildContent
    ,方法是捕获异常而不执行任何操作?您需要处理exceptionStored过程从数据库中获取一些数据,并执行必要的更新/删除。是的,在我的过程中有一个游标,其打开/关闭如下:过程构建\u rp\u数据(标识中的guid.LEXUS\u guid%TYPE)作为csRelatedCases引用\u游标;为…打开csRelatedCases。。。。密切相关案件;最终构建\u rp\u数据;抱歉,我无法在上面的注释@hotfix中格式化我的代码,您的存储过程做什么?如果打开光标,是否也要将其关闭?第1700行的“CTOW.RELP”中有什么内容。您正在调用
    buildContent
    ,方法是捕获异常而不执行任何操作?您需要处理exceptionStored过程从数据库中获取一些数据,并执行必要的更新/删除。是的,在我的过程中有一个游标,其打开/关闭如下:过程构建\u rp\u数据(标识中的guid.LEXUS\u guid%TYPE)作为csRelatedCases引用\u游标;为…打开csRelatedCases。。。。密切相关案件;最终构建\u rp\u数据;抱歉,我无法在上面的注释@hotfix中格式化我的代码。按照你的建议关闭连接后,我遇到了2个异常-超过了最大游标数+java.sql.SQLException:关闭连接。发生这种情况可能是因为有一个父方法正在调用my buildContent()方法和另外两个方法。另外两个方法也在调用SQL过程。因此,在关闭连接后执行过程时,我得到了关闭的连接。@RichaSharma
    ExtractDB.getConnection()
    应该返回一个新连接。我错过了这行代码-ExtractDB.getConnection();由于我的代码是在Java1.6中构建的,我在finally块中关闭了连接,如下所示。如果我错了,请纠正我:最后{if(cs!=null)cs.close();if(conn!=null)conn.close();}@RichaSharma首先关闭conn,然后是csu建议的关闭连接后,我得到2个异常-最大游标超过+java.sql.SQLException:关闭连接。发生这种情况可能是因为有一个父方法正在调用my buildContent()方法和另外两个方法。另外两个方法也在调用SQL过程。因此,在关闭连接后执行过程时,我得到了关闭的连接。@RichaSharma
    ExtractDB.getConnection()
    应该返回一个新连接。我错过了这行代码-ExtractDB.getConnection();由于我的代码是在Java1.6中构建的,我在finally块中关闭了连接,如下所示。如果我错了,请纠正我:最后{if(cs!=null)cs.close();if(conn!=null)conn.close();}@RichaSharma首先关闭conn,然后关闭cs