我想在 Java 中使用 JDBC INSERT
数据库(在我的情况下是 Microsoft SQL Server)中的一条记录。同时,我想获取插入ID。如何使用 JDBC API 实现这一点?
原文由 Satya 发布,翻译遵循 CC BY-SA 4.0 许可协议
String generatedColumns[] = { "ID" };
PreparedStatement stmtInsert = conn.prepareStatement(insertSQL, generatedColumns);
ResultSet
对象获取 Statement 上的 GeneratedKeys ResultSet rs = stmtInsert.getGeneratedKeys();
if (rs.next()) {
long id = rs.getLong(1);
System.out.println("Inserted ID -" + id); // display inserted record
}
原文由 Harsh Maheswari 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
1 回答2.4k 阅读✓ 已解决
如果它是自动生成的密钥,那么您可以为此使用
Statement#getGeneratedKeys()
。您需要在与Statement
相同的INSERT
上调用它。您首先 需要 使用Statement.RETURN_GENERATED_KEYS
创建语句来通知 JDBC 驱动程序返回密钥。这是一个基本示例:
请注意,您依赖于 JDBC 驱动程序是否有效。目前,大多数最新版本都可以工作,但如果我是正确的,Oracle JDBC 驱动程序仍然有点麻烦。 MySQL 和 DB2 已经支持它很久了。 PostgreSQL 不久前开始支持它。我无法评论 MSSQL,因为我从未使用过它。
对于 Oracle,您可以在 — 之后直接调用
CallableStatement
INSERT
RETURNING
子句或SELECT CURRVAL(sequencename)
(或任何特定于 DB 的语法)---
在同一事务中获取最后生成的密钥。另请参阅 此答案。