2017-02-16 2 views
1

Für die meisten meiner Abfragen verwende ich die query() Methode von JdbcTemplate und eine RowMapper, die alle Statement und Verbindung Sachen intern tun wird.Muss ich die JdbcTemplate-Verbindung schließen und manuell erstellte Anweisungen erstellen?

Aber in einem bestimmten Fall brauche ich einige zusätzliche Metadaten aus der ResultSet und möchte nur die Statement und ResultSet von mir selbst behandeln.

Muss ich danach die Statement oder Connection schließen, damit es an den Verbindungspool zurückgegeben wird oder wird dies von Spring getan, auch wenn ich die JdbcTemplate-Methoden nicht verwende?

Connection conn = getJdbcTemplate().getDataSource().getConnection(); 
    PreparedStatement ps = conn.prepareStatement(sql); 
    ResultSet rs = ps.executeQuery(); 

    /* ... */ 

    ps.close(); // should I do this? 
    conn.close(); // and this? 
+0

ausführen Wenn Sie mit der Verbindung selbst herumspielen ja, Sie müssen es schließen. Oder verwenden Sie besser eine 'ConnectionCallback' oder eine der anderen Callback-Schnittstellen. Warum müssten Sie die Verbindung manuell herstellen? Ich habe nicht die Notwendigkeit (oder Drang) gefunden, dies zu tun, wenn ich "JdbcTemplate" verwende. –

+0

Um einfach einige Berichte zu erstellen, möchte ich nur das gesamte Abfrageergebnis in einem Objekt ausgeben, das aus einem Header-Array mit den Spaltennamen und einem zweidimensionalen Array von Zeilen/Spalten für die Werte besteht. Ich möchte dieselbe Methode für verschiedene Anweisungen verwenden, damit ich die Header-Namen aus dem ResultSet abrufen muss. –

+0

Genau dafür ist ein 'ResultSetExtractor' gedacht. –

Antwort

1

Ich denke, Sie müssen es selbst schließen. Look here, die Template-Implementierung macht es, wenn Sie es mit der Vorlage

+0

Ich denke, ich werde auch die 'DataSourceUtils.releaseConnection()' Methode verwenden :) –

Verwandte Themen