2013-10-02 21 views
2

我有Connection类的代码,它只从一个数据库获得连接。看看下面的DBConnection.java从java应用程序创建到2个数据库的连接

package eksim.db.sql; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 


public class DBConnection { 

    public Connection conn=null; 
    private static DBConnection dbConn=null; 
    static final String DB_URL= 
      "jdbc:sqlserver://10.0.0.47\\test;databaseName=a;"; 
    static final String DB_USER="sa"; 
    static final String DB_PASS="123"; 




    public DBConnection(){ 
     if(conn==null){ 
      try{ 
       Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); 
       conn=DriverManager.getConnection(DB_URL, DB_USER, DB_PASS); 
      } 
      catch(Exception ex){ 
       ex.printStackTrace(); 
      } 
     } 
    } 





    public static DBConnection getInstance(){ 
     DBConnection conn=null; 
     if(dbConn==null){ 
      System.out.println("New"); 
      dbConn=new DBConnection(); 
      conn=dbConn; 
     } else{ 
      conn=dbConn; 
     } 
     return conn; 
    } 
    public Connection getCon() throws SQLException{ 
     return this.conn; 
    } 
} 

现在,我想创建另一个连接到不同的数据库。任何人都可以给我建议修改此代码,以获得连接到2数据库的结果?谢谢任何回复

回答

1
public class DBConnection { 

public Connection conn=null; 
private static DBConnection dbConn=null; 
static final String DB_URL= 
     "jdbc:sqlserver://10.0.0.47\\test;databaseName=a;"; 
static final String DB_USER="sa"; 
static final String DB_PASS="123"; 


public Connection secCon=null; 
static final String DB_URL_SECOND= // URL 

static final String DB_USER_SECOND=""; // user name 
static final String DB_PASS_SECOND="123"; 




public DBConnection(){ 
    if(conn==null){ 
     try{ 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); 
      conn=DriverManager.getConnection(DB_URL, DB_USER, DB_PASS); 
      secCon=DriverManager.getConnection(DB_URL_SECOND, DB_USER_SECOND, DB_PASS_SECOND); 
     } 
     catch(Exception ex){ 
      ex.printStackTrace(); 
     } 
    } 
} 
2

您需要提供一些方法来识别不同的连接,但也要配置这些连接。

您可以提供一个newInstance方法,并为其传递一个名称,该名称用于标识创建该连接所需的连接和连接属性。

然后,当过你想要去连接一个参考,你可以简单地使用getInstance(name)

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.util.HashMap; 
import java.util.Map; 

public class DBConnection { 

    public Connection conn = null; 

    private static Map<String, DBConnection> mapInstances = new HashMap<String, DBConnection>(25); 

    private String dbURL; 
    private String dbUser; 
    private String dbPassword; 

    private DBConnection(String dbURL, String dbUser, String dbPassword) { 
     this.dbPassword = dbPassword; 
     this.dbURL = dbURL; 
     this.dbUser = dbUser; 
    } 

    public synchronized static DBConnection newInstance(String name, String dbURL, String dbUser, String dbPassword) { 
     DBConnection con = new DBConnection(dbURL, dbUser, dbPassword); 
     mapInstances.put(name, con); 
     return con; 
    } 

    public synchronized static DBConnection getInstance(String name) { 
     return mapInstances.get(name); 
    } 

    public synchronized Connection getCon() throws SQLException { 
     if (conn == null) { 
      try { 
       Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); 
       conn = DriverManager.getConnection(dbURL, dbUser, dbPassword); 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 
     } 
     return this.conn; 
    } 

} 

例如...

DBConnection db1 = DBConnection.newInstance("db1", ....); 
DBConnection db2 = DBConnection.newInstance("db2", ....); 

而且当你要访问的连接再次...

DBConnection db1 = DBConnection.getInstance("db1"); 
DBConnection db2 = DBConnection.getInstance("db2"); 
+0

认为这是最好的,如果你有'ConcurrentHashMap'而不是'HashMap',它更好,同时使用几乎所有的线程:) –

+0

@AnanthaSharma它当然是一个有效的点,但两个实例方法是'synchronized' – MadProgrammer

相关问题