这些语句是否在jdbc中同步执行批处理

时间:2016-10-31 21:27:30

标签: java multithreading jdbc

在多线程环境中,每个线程都在执行此调用()>>

PreparedStatement st1 = null
PreparedStatement st2 = null;

.....
.....

st1.executeBatch();
st2.executeBatch();
connection.commit();

是否保证对于每个线程,st1中的sql批处理将在st2中的sql批处理之前执行?换句话说,在这种情况下保证同步行为吗?

由于

1 个答案:

答案 0 :(得分:0)

根据documentation,连接对象可以启用(默认模式)或禁用自动提交模式。当自动提交为假时:

  

如果连接处于自动提交模式,则其所有SQL语句将作为单个事务执行并提交。否则,其SQL语句将分组为通过调用方法提交或方法回滚来终止的事务。默认情况下,新连接处于自动提交模式。

因此,如果自动提交为false,则第一批将在第二批之前提交。如果auto-commit为true,则第一批和第二批将作为一个事务提交。请注意,outputs = [] for s in inputs: x,y,z = s.split(",") outputs.append([int(x), y.strip(), z.strip()]) 仅应在自动提交为假时使用。

在这两种情况下,执行顺序(无论提交模式如何)都遵循代码中的顺序。