用Java编写一般应用程序,怎么实现在一个事务中访问了多种类型数据库。

2024-11-28 12:53:12
推荐回答(4个)
回答(1):

我测试了用jdbc获得多个connection连接,可以实现,其实和连接一个数据库是一样的。
1、注册数据库驱动
2、用driverMagager获得数据库连接
3、获得connection之后就可以对数据库进行操作了

对于需求,其实也是比较容易实现的。只要对于多个要commit的地方,加到同一个try块中,就可以了。
只要一个数据库存储出错,就会跳出该try,之后再 catch中执行对所以数据库的rollback。
类似:
try{
以上对于数据库的操作代码略
.......................
conn1.commit();
conn2.commit();
conn3.commit();
//其中只要其中一个执行存储出错,就会跳到catch中,执行rollback,所以不要存储一个就commit一次,要一起commit 。
}catch(Exception e){
conn1.rollback();
conn2.rollback();
conn3.rollback();
}finall{
conn1.close();
conn2.close();
conn3.close();
}
主要就是对于执行成功的存储不要立刻就执行commit操作,这样如果之后的数据库出错就无法rollback成功的那个了。
我们等到所以对于数据库的操作都执行完毕后,再一起执行commit,如果其中那个出错也不至于过早的commit,而无法rollback了。

回答(2):

不同类型的数据库 肯定有多个数据源 这个设计到数据库的分布式事务的处理 这个跟数据库本身有关是否支持分布式事务 如果数据库不支持没有办法 如mysql5 支持不是很好
如果没法实现 可以用手动编程实现

回答(3):

你有几个数据库就写几个对应的DBManager,获得几个对应的connection

回答(4):

设置多个Connection
try{

1,Class.forName("com.jdbc.mysql...");
Connection conn = DriverManager.**(url,user,pwd);
PrepareStatement ps = conn.prepareStatement(sql);

**db2
**oracle
**
conn.setAutoCommit(false);
ResultSet rs_mysql = ps.execute();
ResultSet rs_oracle = ps.execute();
ResultSet rs_db = ps.execute();
boolean result_mysql = rs_mysql.commit();
boolean result_oralce = rs_oracle.commit();
}catch(Exception e ){

conn.rollback();

}