我在通过JDBC连接访问数据库时遇到问题。
End of stream was detected on a read
错误发生在几个不同的点上。
我感谢任何帮助。
答案 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网络配置”中禁用“强制加密” /右键单击“协议...” /“属性” /“强制加密”设置改为“否”