日期:2014-05-16  浏览次数:20399 次

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 中的字段。