Java JDBC语句顺序

Java JDBC语句顺序,java,oracle,jdbc,Java,Oracle,Jdbc,我正在开发一个使用JDBC和内联SQL语句的遗留jsp web应用程序 我们在数据库中遇到了一个错误数据的问题,我想知道两个语句是否可能以不同于代码中指定的顺序执行。i、 e.如果我们有两条update语句,它们的运行方式如下例所示 String sql1 = "update table set x = y"; String sql2 = "update table set z = a"; Statement statement = conn.createStatement(); db_wrap

我正在开发一个使用JDBC和内联SQL语句的遗留jsp web应用程序

我们在数据库中遇到了一个错误数据的问题,我想知道两个语句是否可能以不同于代码中指定的顺序执行。i、 e.如果我们有两条update语句,它们的运行方式如下例所示

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语句之前运行第二条sql语句

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


此外,代码当前不使用事务。

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

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

然而:

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

  • 使用事务-听起来像是一个简单的解决方案。毕竟,您已经获得了
    连接
    实例。即使你告诉我们哪个数据库(除了“oracle”)、哪个版本的驱动程序、哪个JVM、哪个平台、你正在使用的servlet容器……哦,还有正在使用的硬件和正在运行的进程列表……也不可能有人只会猜一猜。什么是
    db_wrapper
    ?它是否同步提交请求?或者异步?只是一个围绕statement.executeUpdate等的包装器,带有异常处理。@Paul yeah可能会使用事务,但最好知道是什么导致了问题。