0

当我连接到数据库并执行查询时,如果发生任何异常,那么我只想获取异常原因而不是完整消息,因此在我的日志中我只能记录异常原因。
通过在 catch 块[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'tty'中的异常对象上应用 getMessage(),下面出现了一个异常。

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

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

4

2 回答 2

2

我在 中看不到任何明显的东西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());
}

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

于 2011-06-18T07:52:46.857 回答
0

正如@Jon Skeet 建议的那样,我认为最好对正则表达式使用第一个选项,并在 catch 块
Pattern p=Pattern.compile("\[.*\]");中应用以下代码
匹配器 m=p.matcher(e.getMessage());
诠释结束=0;
while(m.find()){
end=m.end();
System.out.println(m.start()+" "+m.end());
}

System.out.println(e.getMessage());
System.out.println(e.getMessage().substring(end));
然后它给出以下输出

0 47
[Microsoft][ODBC SQL Server 驱动程序][SQL Server]无效的对象名称“tty”。
对象名称“tty”无效。

于 2011-06-18T09:00:11.167 回答