PreparedStatement: einfügen von Daten in mehrere Tabellen mit JDBC
Könnte jemand mir sagen, ob die erste stmt.close();
erforderlich, in den folgenden JDBC-code, der für das ausführen von zwei verschiedenen SQL-Abfragen in zwei verschiedenen Tabellen?
public class MyService {
private Connection connection = null;
public void save(Book book) {
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");
PreparedStatement stmt = connection.prepareStatement("INSERT INTO PUBLISHER (CODE, PUBLISHER_NAME) VALUES (?, ?)");
stmt.setString(1, book.getPublisher().getCode());
stmt.setString(2, book.getPublisher().getName());
stmt.executeUpdate();
stmt.close(); //1
stmt = connection.prepareStatement("INSERT INTO BOOK (ISBN, BOOK_NAME, PUBLISHER_CODE) VALUES (?, ?, ?)");
stmt.setString(1, book.getIsbn());
stmt.setString(2, book.getName());
stmt.setString(3, book.getPublisher().getCode());
stmt.executeUpdate();
stmt.close(); //2
} catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }
finally { connection.close(); }
}
}
Soweit ich mich erinnere
Jeder
Ja, sonst bist du nicht schließen das erste prepared statement-Objekt. Sie sollten auch prüfen, die Verwendung von try-mit-Ressourcen zu vermeiden, schließt nicht Aussagen, wenn Ausnahmen auftreten.
Es ist nicht erforderlich: docs.oracle.com/javase/7/docs/api/java/sql/...
close()
wird verwendet, um release-JDBC-RessourcenJeder
PreparedStatement
geschlossen werden muss, nach der Verwendung, also, ja, Sie brauchen zwei #close
, als Sie zwei PreparedStatements
. Besser wäre, zu schließen, beide in der finally
block, wie Sie mit dem Connection
, obwohl.Ja, sonst bist du nicht schließen das erste prepared statement-Objekt. Sie sollten auch prüfen, die Verwendung von try-mit-Ressourcen zu vermeiden, schließt nicht Aussagen, wenn Ausnahmen auftreten.
Es ist nicht erforderlich: docs.oracle.com/javase/7/docs/api/java/sql/...
InformationsquelleAutor skip | 2014-02-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
In meinem Buch empfehle ich immer, die Ressourcen schließen, die geöffnet wurden, um möglichen Lecks.
Einen etwas moderneren Weg wäre, um try-mit-Ressourcen:
Das wäre eine andere Frage.
Benötigt Java 1.7 oder besser.
InformationsquelleAutor beny23
Es ist ein verbreiteter Irrtum mit Anweisungen, schließen Sie alle Versionen, die Vorbereitung von Ihnen gebaut. Das ist falsch. Die Optimierung, dass die Ergebnisse in die Vorbereitung der Anweisung erfolgt über die Datenbank. Es wird dann gespeichert/gecacht wird, in der Datenbank und in der Regel wieder verwendet das nächste mal die Anweisung wird vorbereitet.
Als Ergebnis, prepared statements geschlossen werden kann, bereit, so oft Sie wollen - die Datenbank erkennt die gleiche Aussage das nächste mal um und wiederherstellen des Cache Vorbereitungen es aus der letzten Zeit - wenn es will.
In der Zusammenfassung - ja, Aussagen geschlossen werden soll - und keine, bedeutet dies nicht, nicht, die die Wirksamkeit Ihrer Abfragen.
InformationsquelleAutor OldCurmudgeon
Es ist nicht erforderlich, aber zu empfehlen. http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#close()
Der nächsten Zeile nach der ersten
close()
im code einen neuen Wert zuweist der Referenzstmt
, also das Objekt, das Sie verwenden, führen Sie die erste eingefügt werden GC würde und schließlich geschlossen. Es ist gute Praxis, gehen Sie vor und schließen Sie es, wenn Sie wissen, dass Sie fertig ist. Dies gibt die JDBC-Ressourcen sofort.InformationsquelleAutor Mike B
Die gute Praxis, schließen Sie die Anweisung behandeln, wie es wird, lassen Sie die JDBC - & Datenbank-Ressourcen. Lesen Sie mehr über stmt.close () - hier
Möchte ich darauf hinweisen, dass die gute zum schließen des Statement Objekts im finally-block, so dass die DB Ressourcen freigegeben werden, selbst wenn eine Ausnahme Auftritt.
InformationsquelleAutor Kakarot
Ja, das vorgegeben.close () - Methoden nötig sind.
Sie sollten immer explizit schließen Sie das Statement oder PreparedStatement-Objekt, um sicherzustellen, ordnungsgemäße Aufräumen.
Dokument sagt das gleiche : die gute Praxis, schließen Sie die Aussagen. Ich bin versucht, um die gleiche Sache.
InformationsquelleAutor Sarah
Mit dem code oben, ich konnte einfügen von Daten in mehreren Tabellen mit einem button. Die pst-Datei.ausführen müssen eingefügt werden in beiden Abfragen; wenn nicht, wird die Abfrage, die die pst-Datei.ausführen, ist die Tabelle, die die Daten empfangen.
InformationsquelleAutor Ivan Nieves