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 close() wird verwendet, um release-JDBC-Ressourcen
Jeder 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

Schreibe einen Kommentar