3

1 つのデータベースからのみ接続を取得する Connection クラスのコードがあります。以下の DBConnection.java を見てください。

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;
    }
}

今、別のデータベースへの別の接続を作成したいと思います。Connection の結果を 2 データベースに取得するために、このコードを変更するよう提案してもらえますか? 返信ありがとう

4

2 に答える 2

3

さまざまな接続を識別する手段を提供するだけでなく、それらの接続を構成する手段も提供する必要があります。

メソッドを提供し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");
于 2013-10-02T04:02:22.530 に答える
2
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();
         }
     }
}
于 2013-10-02T03:41:40.347 に答える