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