Bir MySQL veritabanında modellenen bir "Davet" nesnesine sahibim. Bu nesnenin bir listesi vardır ("treatmentPlanIDsToCopyf") ve veritabanında ikinci bir tablo ile korunur. Ana tabloya eklemek için yazdığım ve daha sonra listeden geçen ve listedeki her bir öğe için kayıtları ikinci tabloya eklediğim yöntem aşağıdadır. ps = cn.prepareStatement(sql);
hattında Eclipse bana "Kaynak sızıntısı: 'ps' bu konumda kapalı değil" şeklinde bir uyarı veriyor. Hazırlanan deyimi finally
maddesinde kapatıyorum, bu yüzden düzeltmem gereken bir kaynak sızıntısı olup olmadığını öğrenmek istedim. Bu, ilk defa hazırladığım ifadelerle parti kullanıyorum, bu yüzden emin değildim. Teşekkürler.aslında bu bir kaynak sızıntısı mı?
public void invitationCreate(Connection cn, Invitation invitation) throws SQLException{
PreparedStatement ps = null;
try {
//first insert primary invitation data into the invitation table
String sql = "INSERT INTO invitiation (invitation_code, recipient_email, sender_user_id_fk, date_intived, date_accepted, accepted, recipient_first_name, recipient_last_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
ps = cn.prepareStatement(sql);
ps.setString(1, invitation.getInvitationCode());
ps.setString(2, invitation.getRecipientEmail());
ps.setInt(3, invitation.getSenderUserID());
ps.setTimestamp(4, convertLocalTimeDateToTimstamp(invitation.getDateInvited()));
ps.setTimestamp(5, convertLocalTimeDateToTimstamp(invitation.getDateAccepted()));
ps.setBoolean(6, invitation.isAccepted());
ps.setString(7, invitation.getRecipientFirstName());
ps.setString(8, invitation.getRecipientLastName());
int success = ps.executeUpdate();
//now loop through all the treatmentPlanIDs in the invitation that are to be copied into the invitees account when the register
sql = "INSERT INTO invitation_treatment_plans (invitation_code_fk, invitation_treatment_plan_id_fk) VALUES (?, ?)";
ps = cn.prepareStatement(sql);//TODO confirm this if this is actually a resource leak
for(int treatmentPlanID : invitation.getTreatmentPlanIDsToCopy()){
ps.setString(1, invitation.getInvitationCode());
ps.setInt(2, treatmentPlanID);
ps.addBatch();
}
ps.executeBatch();
} finally {
DbUtils.closeQuietly(ps);
}
}