当多个用户同时工作时,如何从SQL表中获取自动生成的ID

时间:2014-04-25 19:29:39

标签: java sql oracle jdbc

为多个用户创建一个SQL数据库(大约100个用户),每个记录中包含近15个字段。其中ID字段自动递增...

每当一个人将记录插入数据库时​​,它必须为该特定的人显示“自动递增的ID”,为此我使用此代码

PreparedStatement ppstmt = conn.prepareStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);
ppstmt.execute(sql,PreparedStatement.RETURN_GENERATED_KEYS);
ResultSet rs = ppstmt.getGeneratedKeys();
long key = 0;
if (rs != null && rs.next()) {
    key = rs.getLong(1);
}

截至目前它的工作正常,但我的疑问是当多个用户同时插入记录时,是否会为每个人提供相应的自动生成ID?

2 个答案:

答案 0 :(得分:0)

该陈述将正常运作。返回的生成密钥将是由该用户执行该语句生成的密钥。这些是SQL定义的语义。任何不起作用的实施都将被打破。

注意,结果集在您测试时不能为空。

答案 1 :(得分:0)

你已经标记了oracle,所以这里是oracle' s documentation关于如何检索生成的密钥的工作原理。关键信息是:

  

使用DML返回子句实现自动生成的密钥。

因此值得查看关于返回子句如何工作的documentation。 如您所见,这保证只返回与刚刚执行的语句相关的数据。

我还想指出你使用PreparedStatement是错误的。从

创建PreparedStatement后
PreparedStatement ppstmt = conn.prepareStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);

下一个电话应该是ppstmt.execute,然后是ppstmt.getGeneratedKeys