Это моя база данных:
dragons
id, key, name, age, creation_date
users
id, name, user, pass
users_dragons
user_id, dragon_id
Итак, это мой код для удаления драконов из базы данных, у которых есть больший ключ, который был передан и принадлежит определенному пользователю. Запрос SQL отлично работает для их удаления, но не для возврата массива ключей из удаленных элементов.
Я пробовал использовать PreparedStatement
, но позже я проверил, насколько мне известно, что этот класс не 't возвращают массивы, а 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
.......
Было бы очень полезно, каким будет правильный алгоритм JDB C для удаления элементов из базы данных и вернуть массив ключей удаленных элементов.