单独的 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.
我想将我的数据库连接代码和我的结果集代码分开。我能想到的唯一方法并不理想,因为它会创建 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.