#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