4

我有一个作者表: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 吗?

4

5 回答 5

8

尝试

stmt.executeUpdate("INSERT INTO authors VALUES (, '"+ string.get(1) +"')", Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.getGeneratedKeys();
rs.next();
long pk = rs.getLong(1);
于 2013-01-09T11:37:07.547 回答
5

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

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

于 2013-01-09T11:36:25.973 回答
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));
}
于 2013-01-09T11:37:24.193 回答
0

尝试:

INSERT INTO authors VALUES (...) returning authorID

当您执行它时,请使用executeQuery. 你应该得到ResultSet一行一列的 a - 这将是 ID。

于 2013-01-09T11:32:51.940 回答
0

我不知道 JDBC 是否支持此功能(有一段时间没用过),但我想您可以尝试:

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

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

您使用的是哪个 RDMBS?

于 2013-01-09T11:35:15.033 回答