需要有关 IBM DB2 错误令牌的详细信息,同时通过休眠获取 DataAccessException



我正在我的java应用程序中使用IBM DB2和Hibernate。我永远不会在我的应用程序中遇到数据访问异常,我得到一个堆栈跟踪,如下所示

DataAccessException: {}com.ibm.websphere.ce.cm.DuplicateKeyException: [jcc][50053][12311][3.65.102] T2zOS exception: [jcc][T2zos]T2zosPreparedStatement.readExecuteInternal:nativeExecute:9943: DB2 engine SQL error, SQLCODE = -803, SQLSTATE = 23505, error tokens = IX6040UC;000001136E ERRORCODE=-803, SQLSTATE=23505
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:80)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:57)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:540)

我能够理解堆栈跟踪中的几乎所有项目,但错误令牌中的这个 000001136E。它意味着什么?

本手册包含以下 SQLCODE -803 解释:

插入或更新的值无效,因为索引中的索引 空间索引空间名称约束表的列,因此没有两行 可以在这些列中包含重复值。删除现有行是 X 记录标识

您在错误消息中看到的标记映射到错误解释中的变量:"IX6040UC"是索引空间名称,而"000001136E"是现有记录的 RID(记录 ID)的十六进制表示形式,该记录已具有您尝试插入或更新的值。

我没有要测试的系统,但您可以尝试此查询来获取现有记录:

select * from yourtable where RID(yourtable) = 70510

70510 是十六进制 RID 0x1136E的十进制表示形式。

相关内容

  • 没有找到相关文章

最新更新