JDBC语句顺序

时间:2011-08-02 23:57:24

标签: java oracle jdbc

我正在研究使用JDBC和内联SQL语句的旧jsp Web应用程序。

我们遇到数据库中数据不正确的问题,我想知道两个语句是否有可能以不同于代码中指定顺序的顺序执行。即如果我们有两个更新语句,就像下面的例子那样运行。

String sql1 = "update table set x = y";
String sql2 = "update table set z = a";
Statement statement = conn.createStatement();
db_wrapper.runSQL(sql1,statement);
db_wrapper.runSQL(sql2,statement);

是否有可能在繁重的负载下,第二个sql语句将在数据库的第一个之前运行。

安装我们主要是在oracle数据库上运行时遇到问题。

此外,该代码目前不使用交易。

2 个答案:

答案 0 :(得分:2)

不,该线程将按此顺序调用Oracle驱动程序,没有显式的方法调用重新排序,也没有在JDBC中重新排序或查询。

但是:

  1. 您确定您的代码没有缓冲对数据库的调用,并最终以不同的顺序执行它或将其发送到不同的连接吗?如果它向不同的连接发送查询,则可能发生其中一个连接,执行第二个语句,在第一个连接之前终止,第一个连接失败。
  2. 您是否在查看来电的返回值?还是例外?可能是第一个查询因为代码未检查的原因而失败了吗?也许赶上了,记录在某个地方(如系统出来)并且从未认真对待过?
  3. 司机可能会以奇怪的方式行事。虽然我不知道您正在使用哪个版本的Oracle,但JDBC驱动程序可以自由地执行他们想要的操作。
  4. 在负载很重的情况下,多个线程将执行JSP,因此除非代码正确同步或查询范围正确,否则可能会发生许多奇怪的事情。

答案 1 :(得分:0)

数据应按照提交更新执行的顺序显示。