首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >建立多个jdbc数据库连接

建立多个jdbc数据库连接
EN

Stack Overflow用户
提问于 2014-02-24 23:14:33
回答 3查看 211关注 0票数 0

请查看以下链接中的代码:

代码语言:javascript
复制
 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地址,该地址目前设置为代码中的第30行的AA.YY.Z.PPP )。

上面的东西运转得很好。

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

在做这件事时,我必须记住以下几点: a)如果一个数据库的连接丢失了,我应该转到下一个数据库。在理想的情况下,我应该能够将信息插入所有六个数据库(db1到db6)。

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

我可以在相同的尝试捕捉中定义它吗?

请指教

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-24 23:33:46

虽然可能有更好的解决方案,但我将使用一个Connection对象数组。这样,您就可以对它们进行迭代,直到得到所需的:

代码语言:javascript
复制
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

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

在某些时候,您必须从数据库中检索数据。这就是你抓住异常的地方。一个虚拟的例子:

代码语言:javascript
复制
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++;
    }
}

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

票数 0
EN

Stack Overflow用户

发布于 2014-02-24 23:33:09

我将创建一个连接集合(用于db1到db6),然后在此基础上迭代,调用相同的插入逻辑。

您可以捕获任何由于无法连接到数据库而导致的异常,将其记录下来,然后简单地转移到下一个数据库。

代码语言:javascript
复制
// 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
票数 0
EN

Stack Overflow用户

发布于 2014-02-24 23:49:18

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

是的-你会想让所有的连接同时打开。

我可以在相同的尝试捕捉中定义它吗?

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

请指教

好吧,假设你想让这个跑得更快.

  • 创建一个仅用于保存要复制的数据的类。这是你的DTO。
  • 创建6个队列,每个目标DB对应一个队列
  • 启动6个线程,每个线程都应该连接到不同的目标DB。让它从队列中读取并执行insert语句。
  • 让主线程从源数据库中选择,创建并填充一个DTO,并将其放到每个队列中。循环直到你完成
  • 等待所有其他线程完成。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22001206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档