DB2的排错过程

      DB2数据库错误信息,是DB2数据库错误信息在实际的应用中是经常出现的,在实际的运行中会带来很多的不便,以下的文章就是对DB2数据库错误信息的示例。

DB2数据库错误信息:

  
  
  
  
  1. com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -407, SQLSTATE: 23502, SQLERRMC: TBSPACEID=2TABLEID=640COLNO=0 
  2. at com.ibm.db2.jcc.b.ig.e(ig.java:1594)  
  3. at com.ibm.db2.jcc.b.ig.a(ig.java:1223)  
  4. at com.ibm.db2.jcc.c.gb.n(gb.java:718)  
  5. at com.ibm.db2.jcc.c.gb.i(gb.java:255)  
  6. at com.ibm.db2.jcc.c.gb.c(gb.java:53)  
  7. at com.ibm.db2.jcc.c.w.c(w.java:46)  
  8. at com.ibm.db2.jcc.c.vb.g(vb.java:151)  
  9. at com.ibm.db2.jcc.b.ig.p(ig.java:1218)  
  10. at com.ibm.db2.jcc.b.jg.d(jg.java:2340)  
  11. at com.ibm.db2.jcc.b.jg.W(jg.java:463)  
  12. at com.ibm.db2.jcc.b.jg.executeUpdate(jg.java:446)  
  13. 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 中的字段。




你可能感兴趣的:(DB2的排错过程)