这是我的数据库:
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 算法从数据库中删除元素并返回已删除项目的键数组,这将非常有帮助。