用Java编写一般应用程序,怎么实现在一个事务中访问了多种类型数据库。
注意要实现:一旦有一个数据库提交失败,就要回滚所有数据库,不管该事务中其他数据库有没有提交成功。为了保证数据的完整性,只要一个服务器commit失败,就算已经commit...
注意要实现:一旦有一个数据库提交失败,就要回滚所有数据库,不管该事务中其他数据库有没有提交成功。
为了保证数据的完整性,只要一个服务器commit失败,就算已经commit成功的数据库,也要rollback。但commit成功的数据库好像不能rollback。不知道,这个访问多种数据库的事务能不能够实现? 展开
为了保证数据的完整性,只要一个服务器commit失败,就算已经commit成功的数据库,也要rollback。但commit成功的数据库好像不能rollback。不知道,这个访问多种数据库的事务能不能够实现? 展开
展开全部
我测试了用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了。
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了。
展开全部
不同类型的数据库 肯定有多个数据源 这个设计到数据库的分布式事务的处理 这个跟数据库本身有关是否支持分布式事务 如果数据库不支持没有办法 如mysql5 支持不是很好
如果没法实现 可以用手动编程实现
如果没法实现 可以用手动编程实现
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你有几个数据库就写几个对应的DBManager,获得几个对应的connection
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
设置多个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();
}
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();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询