删除的元素Postgresql JDBC返回数组

问题描述 投票:0回答:1

这是我的数据库:

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

所以这是我的代码,用于从数据库中删除具有较大密钥的龙,该密钥具有较大的密钥,该密钥属于确定用户。 SQL查询非常适合删除它们,但不适用于从已删除的元素返回键数组。我尝试使用PreparedStatement,但据我所知,后来我检查了该类不返回数组,并且CallableStatement仅用于执行db中的进程,并且我不知道它们如何返回数组。

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算法,这将是非常有帮助的。

java sql postgresql jdbc
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.