单独的 JDBC 连接和结果集代码

Separate JDBC Connection and ResultSet code

我想将我的数据库连接代码和我的结果集代码分开。我能想到的唯一方法并不理想,因为它会创建 2 个连接池。代码片段:

    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;

}

然后在另一个 class 我有:

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

我这样做是因为我需要访问 Statement 才能使 ResultSet 正常工作。我如何抽象连接代码和结果集代码以将它们放在 2 个不同的模块中,而不必创建 2 个连接池?

提前致谢。

如果您想分离出代码,您可能只想将连接设为成员变量并创建一个连接,然后创建语句或实际创建另一种方法,该方法将具有准备好的语句(另一个数据成员)然后只是 return 个结果集。可能有很多方法可以做到这一点。这是一个让你上路的例子:

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();
    }
}

顺便说一句,可能有更好的方法来尝试做您想做的事。你应该听听 EJP 并看看 Data Access Object Pattern.