0
我怀疑这可能是误报,但我无法确定,所以我有点困惑。我正在使用Eclipse Neon,并在第三次准备声明时出现了这个问题。我在下面做几乎相同的事情,没有任何错误。PreparedStatement在准备语句时发生资源泄漏
try{
Connection con = MySQL.connection;
PreparedStatement ps = con.prepareStatement("SELECT * from UsernameData "
+ "WHERE UUID = '" + player.getUniqueId() + "'");
ResultSet rs = ps.executeQuery();
if(rs.next() == true){
ps = con.prepareStatement("update UsernameData set UUID = ?, Username = ? where UUID = ?");
ps.setString(1, uuid);
ps.setString(2, username);
ps.setString(3, uuid);
ps.execute();
ps.close();
rs.close();
return;
}
ps = con.prepareStatement("insert into UsernameData(UUID, Username)"
+ " values (?, ?)");
ps.setString(1, uuid);
ps.setString(2, username);
ps.execute();
ps.close();
rs.close();
return;
}catch(SQLException e){
Bukkit.getServer().getLogger().warning("SQL Error: " + e);
}
嗯,这是有道理的,谢谢。 – Haydenman2
不一定。我不认为它像任何一种最佳实践或重复使用相同语句或PreparedStatement变量的问题。我会站点这个http://stackoverflow.com/questions/850878/does-setting-java-objects-to-null-do-anything-anymore – Acewin
只需使用ps.close()关闭语句;很好。潜在的泄漏并不是因为你在做ps.execute();或ps.close();这将是当你无法关闭它们。而且这是更重要的连接,因为直到你打电话给connection.close数据库时,假设你的连接是开放的,即使你通过设置连接变量为空来解除连接。 – Acewin