Java-память hsqldb

#java #memory #discord #hsqldb

#java #память #Discord #hsqldb

Вопрос:

Я создаю discord-бота с использованием Java, и я использую hsqldb для базы данных памяти, но у меня это не работает нормально, я вставляю данные в таблицу, и в следующий раз результирующий набор выдает 0 строк. самым запутанным моментом является то, что он работал раньше в другой функции бота

Код

 String statement = "SELECT * FROM waiting_rolls WHERE user="   sender.getIdLong()   " AND channel="   channel.getIdLong()   "";
        System.out.println(statement);
        PreparedStatement p1 = conn.prepareStatement("SELECT * FROM waiting_rolls WHERE user='"   sender.getIdLong()   "' AND channel='"   channel.getIdLong()   "'");
        p1.execute();
        ResultSet r1 = p1.executeQuery();
        if (!r1.next()) {
            System.out.println("INSERT INTO waiting_rolls (user, channel, isWaiting) VALUES ("   sender.getIdLong()   ", "   channel.getIdLong()   ", 'true')");
            PreparedStatement p2 = conn.prepareStatement("INSERT INTO waiting_rolls (user, channel, isWaiting) VALUES ("   sender.getIdLong()   ", "   channel.getIdLong()   ", 'true')");
            p2.execute();
            EmbedBuilder embed = new EmbedBuilder();
            embed.setColor(Color.cyan);
            embed.setTitle("Create roll");
            embed.setDescription("Please insert your first value in the roll.");
            e.getChannel().sendMessage(embed.build()).queue();
        }
 

Я знаю, что первым ответом будет use p1.setLong , но я сделал это, и один из серверов поддержки SQL делает это для отладки, и они оба не работают

Запрос, который создал таблицу

 CREATE TABLE waiting_rolls (channel Bigint, user Bigint, isWaiting varchar(50), lastOutput Bigint)
 

Ответ №1:

user является зарезервированным ключевым словом SQL. Вы не должны использовать его в качестве имени столбца.

Я использовал вашу схему для воспроизведения проблемы — переименование столбца в ‘userid’ заставило все работать так, как ожидалось.

user эта страница подтверждает, что это зарезервированное ключевое слово: https://www.drupal.org/docs/develop/coding-standards/list-of-sql-reserved-words