Java 无法理解SQL异常-Ora错误代码:Ora-01000:
我有一个Java类,它调用SQL过程来执行一些DB操作。 以下是我的Java方法: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
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;
}
我希望您能帮助我理解以下几点:
您没有关闭连接,请使用“资源块尝试”
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过程。因此,在关闭连接后执行过程时,我得到了关闭的连接。@RichaSharmaExtractDB.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过程。因此,在关闭连接后执行过程时,我得到了关闭的连接。@RichaSharmaExtractDB.getConnection()
应该返回一个新连接。我错过了这行代码-ExtractDB.getConnection();由于我的代码是在Java1.6中构建的,我在finally块中关闭了连接,如下所示。如果我错了,请纠正我:最后{if(cs!=null)cs.close();if(conn!=null)conn.close();}@RichaSharma首先关闭conn,然后关闭cs