在Java中使用连接引用两个数据库

5

我有两个本地数据库,想使用Java的Connection类连接它们。连接第一个数据库很容易,只需使用以下语句:

public Connection conn;
conn = DriverManager.getConnection(connectionString);

我应该如何将第二个数据库添加到同一个连接中?它们都在同一台服务器上,所以应该很简单,但我找不到正确的命令。

谢谢。


为什么想要使用同一连接从两个数据库中连接?是为了复制吗? - Low Flying Pelican
为了能够运行查询两个数据库的事务。 - Zain Rizvi
如果你在db1中有table1,在db2中有table2,那么你需要运行连接table1和table2的查询吗? - Low Flying Pelican
更像是,我在db1中有一个名为table1的表,其中包含id1和id2两列,在db2中有一个名为table2的表,其中包含id1和id3两列。我想要在满足t1.id2 = t2.id2条件的情况下,根据table1中id2的特定值来更新table2中的id3。 - Zain Rizvi
4个回答

9

连接是与特定数据库的会话。您不能使用一个连接与两个不同的数据库通信;为此,您需要两个单独的连接。

Connection conn1 =  DriverManager.getConnection(connectionString1);
Connection conn2 =  DriverManager.getConnection(connectionString2);

这是我一直在使用的解决方法,但我希望有更好的方法来解决它。 - Zain Rizvi

2

你尝试过以下方法吗:

public Connection conn1;
conn1 = DriverManager.getConnection(connectionString1);
public Connection conn2;
conn2 = DriverManager.getConnection(connectionString2);

1
  1. 实例成员不应该是public。

  2. 连接应该是一个局部变量,而不是一个实例成员。

你只能使用一个Connection连接到一个数据库。因此你需要另一个 Connection。


谢谢,但我已经在我的代码中遵循了1和2,我只是为了这个例子简化了它。 - Zain Rizvi
@Zain 我不明白这如何简化问题。实际上,这只是浪费你和我时间。 - user207421

0

我认为你需要使用J2EE,JTA事务管理器来完成这个任务。


使用2个连接并不是非常安全的事务方式。通过JTA事务管理器,可以以透明的方式实现此功能。请参考https://dev59.com/tHI-5IYBdhLWcg3wN1lD。 - Low Flying Pelican
我本以为使用两个连接根本不安全,但这种说法并不等同于“你必须使用”。OP没有提到跨数据库的事务安全性是一个要求,也没有提到处于J2EE环境中甚至可用JTA。 - user207421
由于它说,“如何将第二个数据库添加到同一连接中”,似乎使用两个连接并不是选项,所以留下的选择是以事务安全方式访问数据库,这就是为什么我建议使用JTA的原因,因为我不知道任何其他机制可以实现这一点。 - Low Flying Pelican
另一种机制是拒绝问题的条件,就像其他人所做的那样。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接