首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中处理读事务以提供一致性?

如何在Java中处理读事务以提供一致性?
EN

Stack Overflow用户
提问于 2014-09-12 07:55:20
回答 1查看 235关注 0票数 1

我正在用Java开发一个客户端。它通过操作与服务器通信。动作是类似社交的动作(动作的一个例子是用户查看另一个用户的配置文件)。

在上面的View Profile示例中,客户端执行4个查询以从数据库服务器获取数据。为了提供一致性,我希望将这4个查询放在一个事务中。

代码语言:javascript
复制
try {
  // set auto commit to false to manually handle transaction
  conn.setAutoCommit(false);

  // execute query 1 
  // ...

  // execute query 2
  // ...

  // execute query 3
  // ...

  // execute query 4
  // ...

  // set auto commit to true again to not affect other actions
  conn.setAutoCommit(true);
} catch (SQLException e) {
  e.printStackTrace(System.out);
} finally {
  try {
    conn.close();
  } catch (SQLException e) {
    e.printStackTrace(System.out);
  }
}

但是,当我运行代码时,有时会注意到此操作返回的数据不一致。当我尝试将这4个查询组合到一个查询中时,我可以实现一致性。

我的问题是,当我想向数据库管理系统发出单独的查询时,在Java语言中设置autoCommit真的可以处理读事务吗?如果不是,如果我想要在4个单独的查询中查询DBMS,我如何提供一致性?

仅供参考,我使用的数据库服务器是Oracle DB。

EN

回答 1

Stack Overflow用户

发布于 2014-09-12 18:50:25

对于oracle,selects从不进行脏读,因此总是隐式TRANSACTION_READ_COMMITTED。如果您以很高的速率摄取数据,我的猜测是数据在第一次和最后一次select之间发生了变化,因此您最好的选择是使用3个联合将select合并为一个。

请参阅http://www.oracle.com/technetwork/issue-archive/2005/05-nov/o65asktom-082389.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25798699

复制
相关文章

相似问题

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