带有SQL的JAVA:insert命令的返回值?

jef*_*anz 3 java sql jdbc

我有一个作者表:authorID,authorName.authorID是一个自动增量的PK.

我想在java中编写一个从用户获取名称并将其添加到表中的方法.但是我需要返回作者的id.有没有办法用1 sql语句做到这一点?

例如,如果我的代码有命令:

stmt.executeUpdate("INSERT INTO authors " + "VALUES (, '"+ string.get(1) +"')");
Run Code Online (Sandbox Code Playgroud)

其中string.get(1)是作者姓名.

现在,如果我写:

ResultSet rs =stmt.executeUpdate("INSERT INTO authors " + "VALUES (, '"+ string.get(1) +"')");
Run Code Online (Sandbox Code Playgroud)

它表示错误,因为rs是结果集,但返回的值是int.这是我插入的行的pk吗?

Evg*_*eev 7

尝试

stmt.executeUpdate("INSERT INTO authors VALUES (, '"+ string.get(1) +"')", Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.getGeneratedKeys();
rs.next();
long pk = rs.getLong(1);
Run Code Online (Sandbox Code Playgroud)

  • 请使用参数化查询.提供的代码是等待发生的SQL注入攻击. (3认同)
  • 或者更好的是,OP 应该使用参数化查询 (2认同)

Sub*_*der 5

创建时传递Statement.RETURN_GENERATED_KEYS PreparedStatement conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

PreparedStatement#getGeneratedKeys()在惰性后返回自动生成的密钥.


Per*_*ror 5

为了获得最后插入的 id,请查看以下代码:

PreparedStatement stmnt = Conn.preparedStatement("INSERT INTO authors(col1) VALUES (?)", Statement. RETURN_GENERATED_KEYS );
stmnt.setString(col1val);
stmnt.executeUpdate();
ResultSet rs=stmnt.getGeneratedKeys();
if(rs.next()){
   System.out.println(rs.getInt(1));
}
Run Code Online (Sandbox Code Playgroud)