Я подозреваю, что это может быть ложным положительным, но я не могу быть уверен, поэтому я немного смущен. Я использую 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, предполагается, что ваше соединение открыто, даже если вы отменили ссылку на него, установив для переменной подключения значение null. – Acewin