如何使 DB2 的 JDBC SQLExceptions 更具描述性?

2022-09-03 09:34:03

如何使 DB2 JDBC 驱动程序抛出的 SQLException 更具描述性?

目前我得到了这种例外。使用这些神秘的 SQLCODE 和 SQLSTATE 数值很麻烦。有没有办法使SQL例外以包含代码说明。

Caused by: com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -302, 
     SQLSTATE: 22001, SQLERRMC: null
      at com.ibm.db2.jcc.b.hh.c(hh.java:1662)
      at com.ibm.db2.jcc.b.hh.a(hh.java:1238)
      at com.ibm.db2.jcc.c.db.n(db.java:737) 
      ....

例如,SQLSTATE 22001 有这样的描述:

字符数据,发生右截断;例如,更新或插入值是对于列而言太长的字符串,或者无法将 datetime 值分配给主机变量,因为它太小。

编辑:我也在使用Spring和Hibernate框架。


答案 1

将 JDBC 驱动程序属性设置为 。示例连接网址:retrieveMessagesFromServerOnGetMessagetrue

jdbc:db2://host:50128/MYDB:retrieveMessagesFromServerOnGetMessage=true;

另请参见 DB2 11.1 文档


答案 2
  1. 检查异常是否实现com.ibm.db2.jcc.DB2Diagnosable

  2. 在 上,您可以调用以获取 .它将返回SQL错误代码(),状态(),您可以调用以获取格式正确且可读的错误消息。DB2DiagnosablegetSqlca()DB2SqlcagetSqlCode()getSqlState()getMessage()

IBM没有将此映射到异常的原因可能有一个明智的原因。我的猜测是他们没有,因为可以抛出令人讨厌的异常,所以你必须把它包装进去。getMessage()DB2Sqlca.getMessage()try-catch


推荐