2016-07-11 3 views
0

Ich möchte meinen Datenbankverbindungscode und meinen Resultset-Code trennen. Die einzige Möglichkeit, dies zu tun, ist nicht ideal, weil es 2 Verbindungspools erstellen würde. Codeausschnitt:Separate JDBC-Verbindung und ResultSet-Code

public void connectivity() throws SQLException{ 

    try{ 
    Class.forName(driver); 
    Connection c = DriverManager.getConnection(url, user, pass); 
    Statement st = c.createStatement(); 
    } 
    catch(ClassNotFoundException e){ 
    e.printStackTrace(); 
    } 
    finally{ 
     try{ 
     c.close(); 

    } 
    catch(Exception e){ 
    e.printStackTrace(); 
    } 

    } 
} 

public Statement getStatement() throws SQLException{ 
     Class.forName(driver); 
     Connection c = DriverManager.getConnection(url, user, pass); 
     Statement st = c.createStatement(); 

     return st; 

} 

Und dann in einer anderen Klasse I haben:

Connectivity connect = new Connectivity(); 
Statement st = connect.getStatement(); 
ResultSet r = st.executeQuery(sql); 

ich dies tun, weil ich Zugang zu Statement benötigen, um die ResultSet Arbeit zu machen. Wie kann ich den Connectivity-Code und den Resultset-Code abstrahieren, um sie in 2 verschiedenen Modulen zu haben, ohne 2 Verbindungspools erstellen zu müssen?

Vielen Dank im Voraus.

+0

Warum? Du solltest versuchen, sie zu kombinieren. Ermitteln Sie die Verbindung, die Anweisung und die Ergebnismenge in drei aufeinander folgenden geschachtelten Try-with-Resources-Anweisungen. Hinweis: Die Zeile "Class.forName()" wurde seit 2007 nicht mehr benötigt. – EJP

+0

Ich habe einige Ergebnismengen zu erfassen, und ich beabsichtige, mit jedem dieser Ergebnissätze etwas zu tun. Stattdessen möchte ich meinen Resultset-Code in einer DAO-Klasse platzieren. –

Antwort

0

Wenn Sie den Code trennen möchten, können Sie die Verbindung einfach zu einer Mitgliedsvariablen machen und nur eine Verbindung erstellen und dann entweder Anweisungen erstellen oder eine andere Methode erstellen, die eine vorbereitete Anweisung (ein anderes Datenmember) und dann gib einfach eine Ergebnismenge zurück. Es gibt wahrscheinlich eine Reihe von Möglichkeiten, dies zu tun. Hier ist ein Beispiel, das Sie auf Ihrem Weg zu bekommen:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.Statement; 

public class Connectivity { 
    Connection connection; 
    String url, user, pass, driver; 

    public Connectivity(String url, String user, String pass, String driver) { 
     super(); 
     this.url = url; 
     this.user = user; 
     this.pass = pass; 
     this.driver = driver; 
     try{ 
      Class.forName(driver); 
      connection = DriverManager.getConnection(url, user, pass); 

      }catch(ClassNotFoundException e){ 
       e.printStackTrace(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
    } 

    public Statement getStatement() throws SQLException{ 
      return connection.createStatement(); 

    } 

    public void close() throws SQLException{ 
     connection.close(); 
    } 

    @Override 
    protected void finalize() throws Throwable { 
     super.finalize(); 
     connection.close(); 
    } 
} 

Durch die Art und Weise könnte es bessere Möglichkeiten, sein zu versuchen, zu tun, was Sie tun mögen. Sie sollten auf EJP hören und in die Data Access Object Pattern schauen.

+0

Das ist, was ich gesucht habe. Vielen Dank! –

Verwandte Themen