当前位置: 首页 > 知识库问答 >
问题:

Sybase中的JDBC事务控制

罗翔
2023-03-14

需要JAVA中JDBC事务控制机制的帮助。

问题:

我们的赛贝斯DB中有一些存储过程需要在未链接模式下运行。由于我们在两个不同的数据库(不幸的是,两个都是赛贝斯)上更新数据,如果有任何故障,我们需要能够回滚所有以前的事务。

但是在未限制模式下运行(自动提交-开启)并不能帮助我们进行回滚,因为一些SP已经提交了事务。

Connection connection = getConnection();
PreparedStatement ps = null;
try{
   String sql = getQuery(); // SQL Chained Mode 
   ps = connection.prepareStatement(sql); 
   ps.executeUpdate();        //Step 1
   .
   .
   sql = getTransctionQuery(); // SQL Unchained Mode
   connection.setAutoCommit(true);        //Step 2
   ps = connection.prepareStatement(sql); 
   ps.executeUpdate();
   connection.setAutoCommit(false);
   .
   .
   sql = getQuery(); // SQL Chained Mode 
   ps = connection.prepareStatement(sql);  
   ps.executeUpdate();     //Step 3 This step fails.
   connection.commit();
}catch(){
   connection.rollback(); //Doesn’t rollback step 1 and understandably step 2.
}
finally{
   connection.close();  //cleanup code
}

理想情况下,如果第3步失败,我们希望有效地回滚第1步和第2步。

当前解决方案:

我们的想法是重新发明轮子并编写我们自己的回滚版本(通过删除插入的记录并从Java恢复更新的值)。

需要有效的解决方案

由于这个解决方案是费力的,而不是傻瓜证明,我们想知道是否有任何其他更好的解决方案。

谢啦

共有1个答案

赏彭薄
2023-03-14

您需要执行显式的BEGIN TRANSACTION语句。否则,每个DML本身就是一个您无法控制的事务。显然,自动提交也必须关闭。

 类似资料:
  • 在我的应用程序几分钟后尝试提交许多事务后,我会遇到以下异常: 无法提交jdbc事务嵌套异常为java.sql.sqlexception:jz006:catled IOException:java.net.socketTimeoutException:读取超时...“ 我正在使用Sybase和带有Spring JDBC的JDBC 4驱动程序,我找到了以下链接:http://infocenter.Sy

  • 主要内容:提交和回滚,使用保存点如果JDBC连接处于自动提交模式,默认情况下,则每个SQL语句在完成后都会提交到数据库。 对于简单的应用程序可能没有问题,但是有三个原因需要考虑是否关闭自动提交并管理自己的事务 - 提高性能 保持业务流程的完整性 使用分布式事务 事务能够控制何时更改提交并应用于数据库。 它将单个SQL语句或一组SQL语句视为一个逻辑单元,如果任何语句失败,整个事务将失败。 要启用手动事务支持,而不是使用JDBC驱

  • 我有一个在事务控制器中分组HTTP请求的测试计划,例如: 现在,我需要控制此类事务的请求速率,而不是单个请求。例如,我可能希望每分钟有60个事务控制器实例 有一个恒定吞吐量计时器,据我所知,它用于控制单个请求的吞吐量。例如,如果我将恒定吞吐量计时器吞吐量设置为每分钟60个,JMeter将在avg上每分钟给我60个请求,但不是每分钟给我60个事务控制器实例。 将JMeter配置为每分钟有60个事务控

  • 本文向大家介绍深入解析Java中的JDBC事务,包括了深入解析Java中的JDBC事务的使用技巧和注意事项,需要的朋友参考一下 事务 事务是一步或多步组成操作序列组成的逻辑执行单元,这个序列要么全部执行,要么则全部放弃执行。事务的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(IsoIation)和持续性(Durability)原子性(Atomicity):事务应

  • 我想使用jdbc连接Sybase ASE,但我在以下方面遇到了一个错误: 有人能告诉我怎么解决这个问题吗?

  • 问题内容: 警告: 注意:如果在事务期间调用此方法,则结果是实现定义的。 这就提出了一个问题: 如何在JDBC中开始事务? 很明显,如何结束事务,但不知道如何开始事务。 如果a 从事务内部开始,我们应该如何在事务外部调用以避免特定于实现的行为? 问题答案: 回答我自己的问题: JDBC连接以启用的自动提交模式开始,在该模式下,每个SQL语句都与事务隐式地划分了界限。 希望每个事务执行多个语句的用户