2010-02-11 77 views
0

我通過JDBC連接訪問數據庫時遇到問題。JDBC錯誤:在讀取時檢測到流結束

End of stream was detected on a read 

錯誤發生在幾個不同點是隨機的。

我很感激任何幫助。

+2

什麼是堆棧跟蹤?哪些點?什麼數據庫和什麼JDBC驅動程序? – Dan 2010-02-11 19:09:52

回答

0

此問題的根本原因在於您的Java代碼和相關數據庫服務器之間的通信線路。它可以是一切。 JDBC代碼中的錯誤,JDBC驅動程序中的錯誤,NIC驅動程序中的錯誤,NIC蹩腳,網絡電纜不良,數據庫服務器斷斷續續,數據庫服務器因爲耗盡連接而丟失連接等等。

有沒有直接的原因,即使不是基於堆棧跟蹤。我會開始檢查JDBC代碼是否正確和健壯的書面。即在try/finally塊中獲取並關閉儘可能最短範圍內的所有數據庫資源。

E.g.

public Entity find(Long id) throws SQLException { 
    Connection connection = null; 
    PreparedStatement statement = null; 
    ResultSet resultSet = null; 
    Entity entity = null; 

    try { 
     connection = database.getConnection(); 
     statement = connection.prepareStatement(SQL_FIND_BY_ID); 
     statement.setLong(1, id); 
     resultSet = statement.executeQuery(); 
     if (resultSet.next()) { 
      entity = new Entity(); 
      entity.setSomething(resultSet.getObject("something")); 
      // ... 
     } 
    } finally { 
     close(resultSet); 
     close(statement); 
     close(connection); 
    } 

    return entity; 
} 

下一步將升級JDBC驅動程序,然後檢查硬件問題。

祝你好運擊倒了問題的原因。