【问题标题】:Is there a way to obtain the keys from a deleted record?有没有办法从已删除的记录中获取密钥?
【发布时间】:2021-10-19 19:36:08
【问题描述】:

我正在使用 PostgreSQL 将表单保存在三个表中,一个用于名称和 id,另一个用于填充字段,第三个用于存储字段的值。

private static final String REMOVE_FORM = "DELETE FROM forms WHERE name = ?";
private PreparedStatement removeFormQuery;

public boolean connect() throws SQLException{
    this.connection = DriverManager.getConnection(URL);
    this.removeFormQuery = this.connection.prepareStatement(REMOVE_FORM);
}
public void close() throws SQLException {
    if(null != this.connection) {
        this.connection.close();
    }
    if(null != this.removeFormQuery) {
            this.removeFormQuery.close();
    }
}
private void removeForm(String form) {
    try {
        removeFormQuery.setString(1, form);
        int execute = removeFormQuery.executeUpdate();
        System.out.println(execute);
        ResultSet generatedKeys = removeFormQuery.getGeneratedKeys();
        while (generatedKeys.next()) {
            int anInt1 = generatedKeys.getInt("id");
            removeFieldQuery.setInt(1, anInt1);
            if (removeFieldQuery.execute())
                System.out.println("remove field failed");
            else
                System.out.println("remove field success");
            ResultSet generatedFieldsKeys = removeFieldQuery.getGeneratedKeys();
            while (generatedFieldsKeys.next()) {
                int anInt = generatedFieldsKeys.getInt("id");
                removeListItemQuery.setInt(1, anInt);
                if (removeListItemQuery.execute())
                    System.out.println("remove listItem failed");
                else
                    System.out.println("remove listItem success");
            }
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

执行删除查询后代码没有生成键,我错过了什么吗?

【问题讨论】:

  • 你的查询的sql和表的定义是什么?
  • 您是如何准备removeFromQuery 声明的?您在那里运行的底层 SQL 查询是什么。请edit您的问题并添加该代码。

标签: java postgresql jdbc


【解决方案1】:

虽然您没有告诉我们您正在运行什么查询,但如果它们是 deletes,那么您不会期望任何生成的密钥。

来自Statement.getGeneratedKeys() 的 Javadoc:

     * Retrieves any auto-generated keys created as a result of executing this
     * Statement object. If this Statement object did
     * not generate any keys, an empty ResultSet
     * object is returned.

当您插入表时可能会自动生成键,创建需要主键的新行,但是当您删除行时不会生成键。

【讨论】:

  • "但是当您删除一行时,不会生成键。" - 除非 SQL 语句包含 returning 子句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多