【问题标题】:Handling exceptions in Oracle DB stored Java classes处理 Oracle DB 存储的 Java 类中的异常
【发布时间】:2014-06-26 15:37:23
【问题描述】:

当存储的 Java 类遇到未处理的异常时,将完整堆栈跟踪返回到 PL/SQL 以进行正确日志记录的最佳方法是什么?

在我的课程的初步测试中,我遇到了 NullPointer,Oracle 将其显示为未处理的 Java 异常。我得到的唯一信息是它是一个 NullPointer - 我不知道它在代码中的位置。

显然我应该能够通过严格验证客户端提供的数据和单元测试来避免大多数异常,但万一发生了什么?

我正在考虑捕获异常,将它们的堆栈跟踪存储在一个数组中并将该数组返回给 PLSQL...但我宁愿避免管理所有这些额外的返回值。

肯定已经有一些东西了,不幸的是我的 Google-fu 让我失望了......

【问题讨论】:

  • 你有什么问题?

标签: java exception-handling oracle11g java-stored-procedures


【解决方案1】:

您可以获得完整的堆栈跟踪并将它们转换为String 并将其传递给PL/SQL 以进行日志记录。我从另一个 SO 问题 here 中得到了将 Stacktrace 转换为 String 的简单解决方案

StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
t.printStackTrace(pw);
String stackTrace = sw.toString(); // Send it to PL/SQL

【讨论】:

  • 我选择了这个。我将它们创建为静态变量并创建了一个包装函数log(Exception)log(String)(使用pw.append 添加我自己的消息)用于开发/调试,将其发送到 System.out 或这取决于我是否在本地 JVM 或数据库 JVM 上运行它。后来我不得不捕获通过 System.out 完成的外部 API 的调试消息,但我无法访问代码来执行您的建议,所以我不得不使用类似于 stackoverflow.com/questions/8708342/… 的东西。
  • 很高兴你能做到。谢谢
猜你喜欢
  • 2011-03-29
  • 1970-01-01
  • 2010-12-30
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 2012-01-31
相关资源
最近更新 更多