JDBC错误:在读取时检测到流结束

时间:2010-02-11 19:01:36

标签: java jdbc

我在通过JDBC连接访问数据库时遇到问题。

End of stream was detected on a read

错误发生在几个不同的点上。

我感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

此问题的根本原因在于Java代码与相关数据库服务器之间的通信线路。它可以是一切。 JDBC代码中的错误,JDBC驱动程序中的错误,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驱动程序,然后检查硬件问题。

祝你好运,找出问题的原因。

答案 1 :(得分:0)

在我的情况下,它是旧版com.microsoft.sqlserver.jdbc.SQLServerDriver

当在SQL Server计算机上的Windows事件日志中看到此消息时,我意识到了这一点: “连接到该服务器需要加密,但是客户端库不支持加密;连接已关闭。请升级客户端库。”

在我的情况下,解决方案是在“ SQL Server配置管理器” /“ Sql Server网络配置”中禁用“强制加密” /右键单击“协议...” /“属性” /“强制加密”设置改为“否”