java - 如何从java异常中获取唯一原因

标签 java jdbc exception sqlexception jdbc-odbc

当我连接到数据库并执行查询时,如果发生任何异常,那么我只想获取异常的原因而不是完整的消息,这样在我的日志中我就可以只记录异常的原因。下面是通过在 catch block 中的异常对象上应用 getMessage() 来实现的一个异常
[Microsoft][ODBC SQL Server 驱动程序][SQL Server]对象名称“tty”无效。

所以我只想获取“无效的对象名称't​​ty'”。

该异常仅因executeUpdate()方法而发生。因此异常可能是与数据库或 sqlquery 相关的任何内容,而不仅仅是无效的对象名称“tty”。

最佳答案

我在SQLException中看不到任何明显的东西,但我可以想到两个选项:

  • 删除方括号中的所有内容(可能使用正则表达式)。
  • 如果您始终使用相同的驱动程序,只需删除前导的可预测前导子字符串

第二个选项的示例代码:

private static final String MESSAGE_PREFIX =
    "[Microsoft][ODBC SQL Server Driver][SQL Server]";

...

String message = exception.getMessage();
if (message.startsWith(MESSAGE_PREFIX))
{
    message = message.substring(MESSAGE_PREFIX.length());
}

这可能比第一个选项要容易得多,但在面对驱动程序变化时显然更加脆弱。无论如何,看到不同驱动程序的消息格式发生变化我不会感到惊讶......

关于java - 如何从java异常中获取唯一原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6394625/

相关文章:

java - `foo()` 和 `foo(void)` 之间的区别

java - 在运行时将类从文件系统加载到应用程序

oracle - ewallet.p12.lck 和 cwallet.sso.lck 文件在 oracle 钱包中有什么意义?

java - java中如何找出sql结果集中的变量类型?

c# - 捕获另一个表单抛出的异常

java - 搜索并替换包中所有 java 文件中的文本

java - 如何在不使用 Iterator 的情况下从 Hashmap 中获取值?

c# - 英文异常信息?

java - 有没有一种方法可以有效地比较任意对象的字段

python - 在 python 方法中处理异常的正确方法是什么?