同时打开与两个mysql数据库的连接

时间:2013-12-16 08:12:40

标签: java mysql linux jdbc

我有一个java JDBC程序,它打开与mysql数据库的连接并进行一些操作。

我想连接两个数据库,一个在本地机器上,另一个在另一个数据库中 在远程机器中。

我可以一次连接一个,但我想同时打开两个连接。

这是我的java程序:

public class DatabaseOperations {

    Connection con = null;
    String driver = "com.mysql.jdbc.Driver";
    String user = "root";
    String password = "root";
    //tring url = "jdbc:mysql://192.168.2.26:3306/time_entries_test";
    String dbName = "time_entries_test";
    String connect1 = "jdbc:mysql://192.168.2.26:3306/" + dbName + "?user=" + user + "&password=" + password + "&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10";
    String connect2 = "jdbc:mysql://localhost:3306/" + dbName + "?user=" + user + "&password=" + password + "&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10";

    public Connection createConnection() {
        try {
            Class.forName(driver);
            //con = DriverManager.getConnection(connect2);
            con = DriverManager.getConnection(connect2);
        } catch (ClassNotFoundException cnfe) {
            cnfe.printStackTrace();
        } catch (SQLException sqle) {
            sqle.printStackTrace();
        }
        return con;
    }
}

这里connect1和connect2是我要打开连接的两个url字符串。

1 个答案:

答案 0 :(得分:1)

您不能单独con引用两个数据库连接 你肯定需要保持两个不同的引用。

Connection con1 = DriverManger.getConnection( connect1 );  
Connection con2 = DriverManger.getConnection( connect2 );  

别无选择。


更新1

  

我如何同时返回con1和con2,以便我可以在我的方法中使用它们来进行操作?

解决方案1 ​​:创建多个返回本地和远程连接的方法。

public Connection getLocalConnection() {
  ...
  Connection localCon = DriverManger.getConnection( connect1 );  
  ...
  return localCon;
}

public Connection getRemoteConnection() {
  ...
  Connection remoteCon = DriverManger.getConnection( connect2 );  
  ...
  return remoteCon;
}

解决方案2 :如果要在每次调用时生成两个连接并返回它们,最好使用列表对象返回..

public List<Connection> createConnection() {
  ...
  Connection localCon = DriverManger.getConnection( connect1 );  
  Connection remoteCon = DriverManger.getConnection( connect2 );  
  ...
  List<Connection> connectionsList = new ArrayList<Connection>( 2 );
  connectionsList.add( localCon );
  connectionsList.add( remoteCon );
  ...
  return connectionsList;
}

我更喜欢使用Solution 1,因为我不确定每次都要求两个连接。有时您可能只在一个数据库中检查一些数据。