将新数据插入数据库并沿途获取id

时间:2014-08-04 23:48:23

标签: mysql

获取新插入数据的ID的正确方法是什么?

sql = "INSERT INTO users (name, email, password) VALUES (?, ? ,?)";

conn.setAutoCommit(false);
pstmt = conn.prepareStatement(sql);

pstmt.setString(1, aUser.getUsername());
pstmt.setString(2, aUser.getEmail());
pstmt.setString(3, aUser.getPassword());

int rowCount = pstmt.executeUpdate();
conn.commit();
conn.setAutoCommit(true); 

sql = "SELECT id FROM users WHERE username=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, aUser.getUsername());
rs = pstmt.executeQuery();
while( rs.next() ) {
    aUser.setId( rs.getLong(1));
}

我认为我的代码应该可以正常工作,因为我认为我应该在连接仍然打开的同时发出第二个请求获取新插入数据的ID。但是,我越看代码越多,我认为我可以做得更好。代码看起来有点奇怪。所以我想知道经验丰富的开发人员如何在专业策

1 个答案:

答案 0 :(得分:1)

如果您正在使用JDBC,则可以将Statement.RETURN_GENERATED_KEYS添加到prepareStatement来电(或executeUpdate,如果您没有使用预备声明)。即,stmt.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)。然后,您可以使用stmt.getGeneratedKeys()获取结果密钥。