我正在使用JDBC,如何将我的Connection代码传递给其他对象?所以,如果我需要关闭数据库连接,那么继续编码就不会那么麻烦了,我还需要创建其他对象吗?这是我的代码
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import javax.sql.DataSource;
public class DisplayUsers {
ResultSet resultSet = null;
Statement statement = null;
Scanner input = new Scanner(System.in);
DataSource ds = null;
public void showAll() {
System.out.println("Search User: ");
String user = input.nextLine();
String query = "Select * from user";
try {
resultSet = statement.executeQuery(query);
ResultSetMetaData metadata = resultSet.getMetaData();
int columns = metadata.getColumnCount();
while(resultSet.next()){
for(int i = 1 ; i<=columns;i++){
System.out.printf("%-8s\t",resultSet.getObject(i));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
这是我的连接器代码
import java.sql.*;
public class Jdbc {
public void dbConn(){
final String url = "jdbc:mysql://localhost:3306/payroll";
Connection conn = null;
try{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,"root","123192");
}catch(Exception e){
e.printStackTrace();
}
}
}
答案 0 :(得分:2)
您通常会根据需要获得连接,执行SQL,然后关闭它。 如果您正在使用连接池,通常会在池中请求它并在完成后返回池中。
大部分时间Connection对象都是短期的,仅用于单个事务。 打开连接会占用数据库资源,您不希望将这些资源保持打开状态。 没有什么可以阻止你绕过其他物体,但要小心......
答案 1 :(得分:1)
最好的方法是使用连接池。如果您正在编写Java EE应用程序,则可以在配置中创建池(在glassfish中,您可以使用管理控制台)。服务器将此池(通过DataSource)绑定到您指定的JNDI名称(例如“jndi / mydb”)。
因此,在代码中建立连接非常简单:
InitialContext ctx = new InitialContext();
//Application Server will automatically bind new InitialContext() call to its
//own context (where your DataSource is located).
DataSource ds = ctx.lookup("jndi/mydb")
你可以在任何地方传递这个数据源,getConnection就像 ds.getConnection()一样简单,永远不会关闭它(因为它被合并并重复使用)。
P.S。在小型控制台应用程序中使用 DriverManager 作为获取连接的方式是合适的,不需要性能和可伸缩性。