2010-02-11 49 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驱动程序,然后检查硬件问题。

祝你好运击倒了问题的原因。