java—在多线程环境中使用jdbc getgeneratedkeys函数

r7knjye2  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(390)

我有一个web应用程序,它使用一个表的自动增量值插入到其他表中。我需要确保为auto increment列读取的值在表中存在潜在的并发插入时是正确的。既然每个线程都有自己的连接(来自容器池),我还需要将代码放在事务中吗?

PreparedStatement ps = null;
ResultSet rs = null;
String sql = "INSERT INTO KYC_RECORD ....";
int autoIncKeyFromApi = -1;

Connection connection = ....

try {

    connection.setAutoCommit(false);

    ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

    ps.setString( ... );

    ps.executeUpdate();

    rs = ps.getGeneratedKeys();

    if (rs.next()) {
        autoIncKeyFromApi = rs.getInt(1);
    } else {

        // throw an exception from here
    }

    connection.commit();
}
vfwfrxfs

vfwfrxfs1#

列的autoincrement值在db级别上管理。因此,在多线程环境中,您可以不必担心地获取值来获取密钥。
一旦调用updatesql语句,事务就开始了。它发生在db级别。它将保持打开状态,直到您手动提交或启用自动提交。

相关问题