从Java调用存储过程-ORA错误时未引发异常
我正在从Java调用一个Oracle存储过程,在执行从Java调用存储过程-ORA错误时未引发异常,java,oracle,stored-procedures,jdbc,try-catch,Java,Oracle,Stored Procedures,Jdbc,Try Catch,我正在从Java调用一个Oracle存储过程,在执行CallableStatement后,将输入参数值发送到Java并将输出参数值返回到Java不会有任何问题 但是,当我向存储过程发送一些坏数据(以强制出错)并执行CallableStatement的execute方法时,我希望在方法中抛出SQLException。这种情况不会发生,代码将继续正常运行 通过SQL Developer运行存储过程时,我可以清楚地看到日志窗口中显示的oracle错误消息(codeORA-06502)。因此,为什么我的
CallableStatement
后,将输入参数值发送到Java并将输出参数值返回到Java不会有任何问题
但是,当我向存储过程发送一些坏数据(以强制出错)并执行CallableStatement
的execute
方法时,我希望在方法中抛出SQLException
。这种情况不会发生,代码将继续正常运行
通过SQL Developer运行存储过程时,我可以清楚地看到日志窗口中显示的oracle错误消息(codeORA-06502
)。因此,为什么我的Java代码没有捕获任何错误消息对我来说是个谜
有人知道这种行为的根源是什么吗?存储过程是否未正确抛出错误;Javatry/catch
是否无法识别抛出的异常?不幸的是,我无法访问存储的过程代码来检查它们如何处理错误
欢迎使用任何指针。Java不会抛出SQLException,因为调用存储过程Java函数(CallableStatement)已成功地将命令发送到Oracle。如果这个过程执行成功,CallableStatement的methode会给我们0,否则与0不同,所以您不会看到SQLException
但是在SQLDeveloper的例子中,它是一个真正的Oracle SQL解释器,因此您可以看到SQLException 只有当存储过程中的第一个可执行语句失败时才会引发异常。如果至少有一条语句执行正确,则不会抛出第一条异常
您可以尝试将事务放入存储过程本身,并在任何语句失败时捕获异常,并从catch块抛出异常。所有这些都在存储过程中。我不相信在存储过程编码为显式执行此操作之前会引发SQLException。毫无疑问,如果抛出异常,JVM将捕获它