繁体   English   中英

建立多个jdbc数据库连接

[英]making multiple jdbc database connections

请通过以下链接查看以下代码:

 Connection connMain = DriverManager.getConnection("jdbc:mysql://XX.XX.X.XXX:3306/test","myusername","mypassword");

Connection connRemote = DriverManager.getConnection("jdbc:mysql://" + CurrRemoteIPAddress + ":3306/test","myusername1","mypassword1"); 

http://ideone.com/28GaFh

现在,如代码所示,我正在从一个数据库(位于IP地址XX.XX.X.XXX)中提取一些信息,并将其插入另一个数据库(位于CurrRemoteIPAddress定义的IP地址中,该数据库当前设置为AA)我的代码中第30行的.YY.Z.PPP)

上面的东西工作得很好。

现在,除了位于AA.YY.Z.PPP的数据库外,我还有6个数据库(为了讨论目的,我们将其称为db1,db2,db3,...,db6),我想从中插入相同的提取信息XX.XX.X.XXX。

在执行此操作时,我必须牢记以下几点:a)如果丢失了与一个数据库的连接,则应转到下一个数据库。 在理想情况下,我应该能够将信息插入所有六个数据库(db1至db6)。

我想知道,是否应该为六个数据库中的每个数据库定义新的连接字符串?

我可以在同一try catch中定义它吗?

请指教

我将创建一个连接集合(从db1到db6),然后对此进行迭代,并调用相同的插入逻辑。

您可能会捕获到任何由于连接数据库失败而导致的异常,将其记录下来并仅移至下一个。

// step 1 create connection to database db1
// step 2 if successful, add to collection
// step 3 repeat steps 1 and 2 for databases db2 to db6
// step 4 retrieve data from source database
// step 5 for each connection in collection, insert into database
// step 6 close each connection in collection

尽管可能有更好的解决方案,但我将使用一系列Connection对象。 这样,您可以迭代它们,直到获得所需的内容:

Connection connMain = DriverManager.getConnection(
    "jdbc:mysql://XX.XX.X.XXX:3306/test","myusername","mypassword");
Connection[] connections = new Connection[10]; // Assuming you need ten connections
connections[0] = DriverManager.getConnection(
    "jdbc:mysql://" + CurrRemoteIPAddress + ":3306/db1","myusername1","mypassword1"); 
connections[1] = DriverManager.getConnection(
    "jdbc:mysql://" + CurrRemoteIPAddress + ":3306/db2","myusername1","mypassword1"); 
// Add as many as you need

关于您的评论:如何在连接中捕获异常?

在某些时候,您将不得不从数据库中检索数据。 这就是您捕获异常的地方。 一个虚拟的例子:

Statement stmt;
ResultSet rs;
boolean done = false;
int i = 0;
while(!done) {
    try {
        stmt = connections[i].createStatement();
        rs = stmt.executeQuery("select * from aTable");
        rs.beforeFirst();
        while(rs.next()) {
            // Do whatever you need with the result set
        }
        done = true;
    } catch(SQLException e) {
        // Catch the exception and try with the next connection
        i++;
    }
}

这是一个总的想法。 您需要编写自己的解决方案,但这是一种可能的方法。

我想知道,是否应该为六个数据库中的每个数据库定义新的连接字符串?

是的-您需要同时打开所有连接。

我可以在同一try catch中定义它吗?

否。每个连接都应在自己的try / catch中创建,因此,如果一个连接失败,另一个连接仍然可以工作。

请指教

好吧,假设您希望它运行得更快...

  • 创建一个仅用于保存要复制的数据的类。 这是您的DTO。
  • 创建6个队列,每个目标数据库一个
  • 启动6个线程,每个线程应连接到不同的目标DB。 让它从队列中读取并执行insert语句。
  • 让主线程从源数据库中选择,创建并填充一个DTO,并将其放在每个队列中。 循环播放直到完成
  • 等待所有其他线程完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM