DB2 错误
DB2数据库错误信息,是DB2数据库错误信息在实际的应用中是经常出现的,在实际的运行中会带来很多的不便,以下的文章就是对DB2数据库错误信息的示例。
DB2数据库错误信息:
com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -407, SQLSTATE: 23502, SQLERRMC: TBSPACEID=2, TABLEID=640, COLNO=0
at com.ibm.db2.jcc.b.ig.e(ig.java:1594)
at com.ibm.db2.jcc.b.ig.a(ig.java:1223)
at com.ibm.db2.jcc.c.gb.n(gb.java:718)
at com.ibm.db2.jcc.c.gb.i(gb.java:255)
at com.ibm.db2.jcc.c.gb.c(gb.java:53)
at com.ibm.db2.jcc.c.w.c(w.java:46)
at com.ibm.db2.jcc.c.vb.g(vb.java:151)
at com.ibm.db2.jcc.b.ig.p(ig.java:1218)
at com.ibm.db2.jcc.b.jg.d(jg.java:2340)
at com.ibm.db2.jcc.b.jg.W(jg.java:463)
at com.ibm.db2.jcc.b.jg.executeUpdate(jg.java:446)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:1968)
解决方法:
其中对于DB2数据库错误信息的说明:SQLSTATE: 23502 插入或更新值为空,但该列不能包含空值。
分析DB2报出的错误信息,主要从六个方面进行分析:SQLCODE, SQLSTATE, ,SQLERRMC, TBSPACEID, TABLEID, COLNO
1、先从SQLCODE和SQLSTATE两方面的数字确认是什么原因(见网址:http://www.knowsky.com/538581.html)
2、在根据TBSPACEID和TABLEID两方面确认是哪个表
SQL语句:select * from syscat.tables where tbspaceid="" and tableid=""
3、根据COLNO确认是哪个列出问题
SELECT * FROM SYSCAT.COLUMNS WHERE TABNAME= '*******' AND COLNO = “”
三步就可以精确确认错误的原因了
上面三步可以汇总成一个SQL语句
SELECT tabschema, tabname, colname
FROM syscat.columns
WHERE colno = 1 AND
( tabschema, tabname ) IN
( SELECT tabschema, tabname
FROM syscat.tables
WHERE tbspaceid = 2 AND
tableid = 517 )
原理分析:在DB2 数据库中隐藏着一个内部表,专存储数据库的各个表。可以通过select * from syscat.tables进行查看。TBSPACEID, TABLEID, COLNO 都是表tables 中的字段。