如何使用Singleton类来获取多个连接?

时间:2012-07-31 06:00:27

标签: java database design-patterns jdbc

我写了一个Singleton类来获取连接。但是,我无法使用Singleton获得连接。

我想使用我的Singleton获取多个连接并使用Singleton连接查询数据库。我总是尝试几种方法,但没有成功。

这是我的Singleton类:

import java.sql.*;

public class ConnectDB {

private static Connection connect;
private static ConnectDB instance;

private ConnectDB()
{

    try {

        Class.forName("com.mysql.jdbc.Driver");
        //connect DB
        connect = DriverManager.getConnection("jdbc:mysql://ip/database","root","password");

    }

    catch(SQLException e)
    {
        System.err.println(e.getMessage());

    }

    catch(ClassNotFoundException e)
    {

        System.err.println(e.getMessage());

    }   
}

  public static ConnectDB getInstance()
  {

      if(instance == null) {

          instance = new ConnectDB();

      }

      return instance;

  }

}

现在,我得到了连接:

 public class NameClass {




public void getInfoDatabase()
{   

       Connection cnn = ConnectDB.getConnection();
       PreparedStatement ps;
       ResultSet rs;

       try {

           ps = cnn.prepareStatement("select *  from tables");

           rs = ps.executeQuery();

           while(rs.next())
           {

               String tables = rs.getString("table1");
               System.out.println(tables);
           }

3 个答案:

答案 0 :(得分:9)

如果您想有效地使用多个连接,可能需要connection pool

  

在软件工程中,连接池是数据库的缓存   保持连接,以便在连接时可以重用连接   将来对数据库的请求是必需的。连接池是   用于增强在数据库上执行命令的性能。

Singleton返回许多连接会违反Singleton的目的,{{1}}的任务是在调用时提供相同的实例。

我建议你看看this之前的SO线程,其中讨论了各种连接池库。

答案 1 :(得分:0)

最好有一个单独类的连接池,如ComboPooledDataSource,然后从中获得多个连接。

答案 2 :(得分:0)

我的方式是这个DBConnection是一个Singleton类。这个用法在ContactDAO类中。

NaN
  

********* ContactDAO *************

public class DBConnection{

    private static DBConnection instance;
    private String url="jdbc:oracle:thin:@192.168.10.32:1521:orcl";
    private String login="kit";
    private String pass="1234";

    private DBConnection(){

        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        if (instance == null) {
            instance = new DBConnection();
            System.out.println(" Connection  - - - - - - - -  New DBConnection created");
        }
        try {
            return DriverManager.getConnection(instance.url, instance.login,instance.pass);
        } catch (SQLException e) {
            throw e;
        }
    }

    public static void close(Connection connection)
    {
        try {
            if (connection != null) {
                connection.close();
                connection=null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}