返回被删除的元素数组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个回答
1
投票

你把这样的语句当作一个普通的 SELECT 声明:使用 java.sql.PreparedStatement.executeQuery()java.sql.Statement.executeQuery(String sql) 来执行语句并得到一个结果集。

java.sql.CallableStatement 是用来调用程序的(但在PostgreSQL中你不需要它)。

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