Java 为什么需要数据库代理密钥的generatedKeys,以及为什么需要它?
我有一个Postgres数据库,我正在编写一个Java程序来查询, 插入, 更新, 并从中删除数据。 我的一些表有代理键, 数据库会自动递增 我使用Java 为什么需要数据库代理密钥的generatedKeys,以及为什么需要它?,java,sql,postgresql,jdbc,Java,Sql,Postgresql,Jdbc,我有一个Postgres数据库,我正在编写一个Java程序来查询, 插入, 更新, 并从中删除数据。 我的一些表有代理键, 数据库会自动递增 我使用getGeneratedKeys()方法接收最后插入的元组的键。 但我不明白我为什么需要这些钥匙,怎么用它们 我能够在不接收这些密钥的情况下插入数据 // Works as expected and gives me the last key. PreparedStatement prepStmt = connection.prepareStatem
getGeneratedKeys()
方法接收最后插入的元组的键。
但我不明白我为什么需要这些钥匙,怎么用它们
我能够在不接收这些密钥的情况下插入数据
// Works as expected and gives me the last key.
PreparedStatement prepStmt = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
....
ResultSet rs = prepStmt.getGeneratedKeys();
if (rs.next()) {
this.lastID = rs.getInt(1);
}
这些生成的键的用途和/或价值是什么?如果您插入到多个表中,并且这些表的外键指向另一个表 您将需要插入引用的键,然后插入第二个表的外键列 表A的id表B的id的外键
插入表B并在插入到表A时使用相同的Id例如,您可能希望使用生成的键执行其他操作,例如将记录插入到另一个表中。您的意思是作为另一个表中的外键?是的,这就是我的示例的意思,虽然可能还有其他示例说明了为什么您希望从Java获取生成的密钥。可能您希望在HTTP
位置
标头中返回指向新资源的链接。即使没有任何其他表:假设客户端需要此生成ID的值,以便将其存储在某个位置并稍后获取行值。例如,要存储包含三行项目的发票,请首先写入发票(父项)并捕获其生成的主键值。然后在行项目子表中写入三个行项目中的每一个,并为每个新行项目行分配其父发票的标识符(其外键)。