如何传递连接代码?

时间:2011-12-07 14:42:16

标签: java mysql database jdbc connection

我正在使用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();
            }
        }
}

2 个答案:

答案 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 作为获取连接的方式是合适的,不需要性能和可伸缩性。