2013-01-16 30 views
0

我使用的程序一樣存儲數據庫的信息:調試MysqlDataTruncation例外

try{ 
connection = cpds.getConnection(); 
pstmt = connection.prepareStatement("select setSomeData(?,?)"); 
//set data to the statement 
res = pstmt.executeQuery(); 
//process data retrieved 
} catch (SQLException ex) { 
     System.out.println("SQLException: " + ex); 
     ex.printStackTrace(); 
     return null; 
    } finally { 
     try { 
      pstmt.close(); 
      connection.close(); 
     } catch (SQLException ex) { 
    } 
} 

但有時我得到這個異常:

的SQLException:com.mysql.jdbc.MysqlDataTruncation :數據截斷:BIGINT UNSIGNED值超出範圍'(tstmp @ 5 - lastEvent @ 11)'
com.mysql.jdbc.MysqlDataTruncation:數據截斷:BIGINT UNSIGNED值超出'(tstmp @ 5 - lastEvent @ 11)'
at c om.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
在com.mysql.jdbc.MysqlIO.nextRowFast(MysqlIO.java:2066)
在com.mysql.jdbc.MysqlIO.nextRow(了MysqlIO。的java:1922)
在com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:3414)
在com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:481)
在com.mysql.jdbc .MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:3120)
在com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:2288)
在com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2709)
at com.mysql.jdbc.ConnectionImpl .execSQL在(ConnectionImpl.java:2677)
在com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2134)
在com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2300)
com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:116)

是否有可能知道等的影響列中的例外,那我想存儲的價值更多信息?

例如,對於異常:.MySQLTransactionRollbackException: Deadlock found when trying to get lock;

查詢SHOW ENGINE INNODB STATUS是非常有用的...

回答

1

有可以通過JDBC很少的調試信息,除了SQLSTATE,以及相應的MySQL錯誤代碼和信息。

https://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html


對於第一種例外情況,最有可能的解釋是,它是由MySQL的提出警告(或錯誤)時引起試圖爲負值存儲到一個無符號整數數據類型。

舉個例子:

CREATE TABLE foo (val BIGINT UNSIGNED); 
INSERT INTO foo (val) VALUES (-4); 

0 row(s) affected 
Total Time  : 0.030 sec 
-------------------------------------------------- 

1 row(s) affected, 1 warning(s) 
Total Time  : 0 sec 

Warning Code : 1264 
Out of range value for column 'val' at row 1 

對於其他異常,這是關於MySQL的錯誤正在被提出的信息:

Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK) 
Message: Deadlock found when trying to get lock; try restarting transaction 

對於InnoDB表遇到錯誤,是的,SHOW ENGINE INNODB STATUS聲明的輸出可以提供一些見解。但是,這些信息是針對整個數據庫的,並不一定針對遇到錯誤的會話。