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

我有一个作者表:authorID,authorName。 authorID是一个带自动增量的pk。

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

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

stmt.executeUpdate("INSERT INTO authors " + "VALUES (, '"+ string.get(1) +"')"); 

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

现在,如果我写:

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

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

尝试

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

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

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

为了获得最后插入的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)); } 

我不知道JDBC是否支持它(暂时没有使用它),但我想你可以尝试:

 INSERT INTO TABLE_NAME (FIELD1, FIELD2) VALUES ('foo', 'bar') RETURNING FIELD3 

通过executeQuery()或者,如果你的jdbc驱动程序不支持RETURNING写一个简单的存储函数。

您使用的是哪个RDMBS?

尝试:

 INSERT INTO authors VALUES (...) returning authorID 

执行时,使用executeQuery执行此操作。 您应该返回一个包含一行和一列的ResultSet – 它将是ID。