Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么需要数据库代理密钥的generatedKeys,以及为什么需要它?_Java_Sql_Postgresql_Jdbc - Fatal编程技术网

Java 为什么需要数据库代理密钥的generatedKeys,以及为什么需要它?

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

我有一个Postgres数据库,我正在编写一个Java程序来查询, 插入, 更新, 并从中删除数据。 我的一些表有代理键, 数据库会自动递增

我使用
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的值,以便将其存储在某个位置并稍后获取行值。例如,要存储包含三行项目的发票,请首先写入发票(父项)并捕获其生成的主键值。然后在行项目子表中写入三个行项目中的每一个,并为每个新行项目行分配其父发票的标识符(其外键)。