2012-12-13 82 views
1

是否應該java.sql.Statement.execute拋出java.io.EOFException?只有在允許僅允許SQLException時才能引發EOFException?

http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#execute%28java.lang.String,%20int%29據說它可能只會拋出java.sql.SQLException。不過,我得到這個異常消息記錄:

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException 

STACKTRACE: 

java.io.EOFException 
     at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1394) 
     at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1538) 
     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1929) 
     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167) 
     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278) 
     at com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1224) 
     at com.mysql.jdbc.Connection.execSQL(Connection.java:2244) 
     at com.mysql.jdbc.Connection.execSQL(Connection.java:2192) 
     at com.mysql.jdbc.Statement.execute(Statement.java:906) 
     at com.mysql.jdbc.Statement.execute(Statement.java:947) 
     at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.logicalcobwebs.proxool.ProxyStatement.invoke(ProxyStatement.java:100) 
     at org.logicalcobwebs.proxool.ProxyStatement.intercept(ProxyStatement.java:57) 
     at $java.sql.Statement$$EnhancerByCGLIB$$4e952ca0.execute() 
     at handler.do_insert(handler.java:734)

論「handler.java」 733行有「執行」的呼叫,並在734那裏是一個的getGeneratedKeys電話(也可能拋出的SQLException只) 。

+0

什麼可能發生在你身上的是連接關閉你。這不屬於mySQL的範圍,而是套接字問題。 – ATaylor

+0

您的代碼是否正在捕獲異常,因爲它不僅僅是來自捕獲異常的堆棧中較深的代碼的一些錯誤輸出? – Omaha

+0

對不起,代碼實際上確實發現了異常。我感到困惑;可能是因爲堆棧跟蹤(它在我的問題中被截斷)一直到主程序,所以我留下了一個印象,即異常沒有被捕獲。 –

回答

2

查找單詞** BEGIN NESTED EXCEPTION **。​​不會拋出此異常,它是一個嵌套的異常。這意味着在創建SQLException時通過了這個原因。類似這樣的:

try { 

    ... 

} catch (EOFException e) { 
    throw new SQLException(e); 
} 
+0

謝謝你的解釋和包裝可以完成的例子!我的錯誤實際上是誤讀了日誌,並且認爲實際上異常沒有被捕獲(如同SQLException)。 –

4

看着「BEGIN嵌套異常」讓我覺得EOFException嵌套在SQLException中 - 這可能是這種情況嗎?

的方法只能拋出SQLException,但SqlException異常可以換另一個的異常(或錯誤)

+0

SQLException的條件包括「如果發生數據庫訪問錯誤」。在這種情況下,我希望SQLException包裝某種形式的IOException。 –