Вызов процедуры, в которой есть INSERT-запрос, не создаёт никаких записей MySQL

У меня есть такая процедура (точнее, как я её создал):

DELIMITER //

CREATE PROCEDURE registerUser (IN ip VARCHAR(100), IN world VARCHAR(100), IN countryCode VARCHAR(45), IN nick VARCHAR(100))
BEGIN
    INSERT INTO `donations` VALUES (NULL, 5000, 100, 16, 0, 0, 0, 0, 0, 0, 3);
    SET @don_id = last_insert_id();
    INSERT INTO `telemetry` VALUES (NULL, ip, world, countryCode, CURRENT_TIMESTAMP, 0);
    INSERT INTO `users` VALUES (NULL, nick, @don_id, CURRENT_TIMESTAMP, last_insert_id());
END//

Теперь, я её хочу вызвать из-под Java. Вот так:

    private void registerUserInDatabaseIfNotExists(ServerPlayerEntity player) {
        try {
            Connection connection = MySQLConnection.getPool().getConnection();

            PreparedStatement req = connection.prepareStatement("SELECT COUNT(*) FROM `users` WHERE `nickname` = ?;");
            req.setString(1, player.getName().getString());
            ResultSet rs = req.executeQuery();

            rs.next();
            if (rs.getInt("COUNT(*)") == 0) { // Если записи не существует, то надо выполнить процедуру
                logger.info("Registering a new user: " + player.getName().getString());

                CallableStatement statement = connection.prepareCall("{CALL registerUser(?, ?, ?, ?)}");
                statement.setString(1, player.getIp());
                statement.setString(2, ((WorldNameGetter) player.world).getName());
                statement.setString(3, "RU");
                statement.setString(4, player.getName().getString());

                req.execute();

                statement.close();

                logger.info("Player successfully registered!");

                connection.close();
            }
        } catch (Exception ex) {
            player.networkHandler.disconnect(new LiteralText("Произошла ошибка при обработке вашего соединения! " +
                    "Попробуйте подключиться позднее.").formatted(Formatting.RED));

            logger.error("Error while process joining player " + player.getName().getString());
            logger.throwing(Level.ERROR, ex);
        } // Здесь простые действия на случай ошибок.
    }

И самая главная проблема в том, что этот вызов не создаёт ВООБЩЕ никаких записей, а попытка вызвать её через statement.executeUpdate() вызывает ошибку: Throwing java.sql.SQLException: Can not issue executeUpdate() or executeLargeUpdate() with statements that produce result sets

Как это исправить?


Ответы (1 шт):

Автор решения: Денис Орлов

В общем, я разобрался. Тут очень тупая ошибка была: я вызывал не statment.execute(), а req.execute(). Вывод: Надо более внимательно следить за переменными.

→ Ссылка