【问题标题】:Return array of deleted elements postgresql JDBC返回已删除元素的数组 postgresql JDBC
【发布时间】:2020-05-27 08:23:26
【问题描述】:

这是我的数据库:

dragons
id, key, name, age, creation_date
users
id, name, user, pass
users_dragons
user_id, dragon_id

所以这是我从数据库中删除龙的代码,这些龙具有更大的密钥,并且属于确定用户。 SQL 查询非常适合删除它们,但不适用于从已删除元素返回键数组。

我尝试使用PreparedStatement,但后来我检查了,据我所知,这个类不返回数组,CallableStatement 仅用于在数据库中执行进程,我不知道如何他们返回数组。

String query = "" +
"DELETE FROM dragons " +
"WHERE id IN (SELECT d.id FROM dragons d, users u, users_dragons ud" +
"         WHERE d.key > ?" +
"           AND ud.dragon_id = d.iD" +
"           AND ud.user_id in (select id from users where id = ?)) RETURNING key INTO ?";

CallableStatement callableStatement = connection.prepareCall(query);
int pointer = 0;
callableStatement.setInt(++pointer, key);
callableStatement.setInt(++pointer, credentials.id);
callableStatement.registerOutParameter(++pointer, Types.INTEGER);
callableStatement.executeUpdate();

return (int []) callableStatement.getArray(1).getArray();

代码给了我错误,但很明显,因为 CallableStatement 需要一个 postgres 函数来运行,而不是一个简单的 SQL 查询

org.postgresql.util.PSQLException: This statement does not declare an OUT parameter. 
Use { ?= call ... } to declare one. 
at org.postgresql.jdbc.PgCallableStatement.registerOutParameter
.......

如何使用正确的 JDBC 算法从数据库中删除元素并返回已删除项的键数组,这将非常有帮助。

【问题讨论】:

  • 今日提示:始终使用现代、明确的JOIN 语法。更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接!

标签: java sql postgresql jdbc


【解决方案1】:

您将这样的语句视为普通的SELECT 语句:使用java.sql.PreparedStatement.executeQuery()java.sql.Statement.executeQuery(String sql) 执行语句并获得结果集。

java.sql.CallableStatement 用于调用过程(但在 PostgreSQL 中不需要它)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 2020-10-21
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多