当我连接到数据库并执行查询时,如果发生任何异常,那么我只想获取异常而不是完整消息的原因,这样在我的日志中我只能记录异常的原因,例如。下面的一个例外是在catch块中的异常对象上应用getMessage()
[Microsoft] [ODBC SQL Server驱动程序] [SQL Server]无效的对象名称'tty'。
所以我只想获取“无效的对象名称'tty'”。
仅由于executeUpdate()方法而发生异常。所以异常可能是与数据库或sqlquery相关的任何事情,而不仅仅是无效的对象名称'tty'。
答案 0 :(得分: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());
}
这可能比第一种选择容易得多,但在驾驶员变化时显然更加脆弱。不管怎么说,看到不同驱动程序的消息格式改变,我也不会感到惊讶......
答案 1 :(得分:0)
正如@Jon Skeet建议我更好地使用正则表达式的第一个选项并在catch块中应用以下代码
模式p = Pattern.compile(“\ [。* \]”);
Matcher m = p.matcher(e.getMessage());
int end = 0;
而(m.find()){
端= m.end();
System.out.println(m.start()+“”+ m.end());
}
的System.out.println(e.getMessage());
的System.out.println(e.getMessage()子串(结束));
然后它给出以下输出
0 47
[Microsoft] [ODBC SQL Server驱动程序] [SQL Server]无效的对象名称'tty'
无效的对象名称'tty'。