为多个用户创建一个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?
答案 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。