假设我有一个名为 users 的表和一个名为 username 的列,其格式为 user1 ,用户2 ..
我想循环地将用户插入到该表中,每个条目的值取决于之前的条目。新条目的值由表中按字母顺序排列最大的条目生成,即 users。
因为在 AutoCommit 设置为 false 时,插入后可以在 JDBC API 中getGenerateKeys
;
在如下情况下:
connection.setAutoCommit(false);
while(someCondition)
{
ResultSet rs = connection.createStatement("select max(username) from users").executeQuery();
if(rs.next())
{
name= rs.getString("username"); //returns user1
}
String newName = generateNewName(name); // simply makes user1 -> user2
connection.createStatement("insert into users (name,...) values ("+newName+",...)").executeUpdate(); ///and inserts..
}
select 查询是否返回最后插入的值 或者 它返回表中之前我开始循环的最大列?
最佳答案
首先,为了确保您立即看到数据库上的所有更改,优先使用 READ_UNCOMMITED 的 TransactionIsolation,而不是使用自动提交。或者,在任何地方使用自动提交也可以完成这项工作。
一旦您确保立即看到每个数据库更改,数据库就会向您发送选择执行期间的某个时间的最大用户数。但是,一旦您实际收到结果,其他线程可能会创建其他用户。因此,这仅适用于单线程工作,并且很可能现在没有任何意义。
TL:DR 不,不要这样做!
关于java - 当自动提交设置为 false 时,select 是否返回最后插入的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43520213/