Ich habe ein "Einladung" -Objekt, das in einer MySQL-Datenbank modelliert ist. Dieses Objekt hat eine Liste ("treatmentPlanIDsToCopyf") und wird in der Datenbank mit einer zweiten Tabelle gepflegt. Die Methode, die ich geschrieben habe, um sie in die Haupttabelle einzufügen und dann durch die Liste zu gehen und Datensätze für jedes Element in der Liste in die zweite Tabelle einzufügen, ist unten. An der Leitung ps = cn.prepareStatement(sql);
Eclipse gibt mir eine Warnung, die besagt: "Ressourcenverlust: 'PS' ist nicht an diesem Ort geschlossen". Ich schließe die vorbereitete Aussage in der finally
-Klausel, also wollte ich wissen, ob es wirklich ein Ressourcenleck gibt, das ich beheben muss. Dies ist das erste Mal, dass ich Chargen mit vorbereiteten Anweisungen verwende, also war ich mir nicht wirklich sicher. Vielen Dank.ist das eigentlich ein Ressourcenleck?
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);
}
}