Java 内存 hsqldb
Java memory hsqldb
我正在使用 Java 制作一个不和谐的机器人,我将 hsqldb 用于内存数据库,但它对我来说效果不佳,我将数据插入 table 和结果下次设置给出 0 行。最令人困惑的一点是它之前在 bot
的另一个功能中起作用
代码
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();
}
我知道第一个回复将使用 p1.setLong
但我这样做了,SQL 支持服务器中的一个也这样做是为了调试,但它们都不起作用
创建了 table
的查询
CREATE TABLE waiting_rolls (channel Bigint, user Bigint, isWaiting varchar(50), lastOutput Bigint)
user
是保留的 SQL 关键字。您不应将其用作列名。
我使用你的模式重现了这个问题 - 将列重命名为 'userid' 使一切都按预期工作。
user
被该页面确认为保留关键字:https://www.drupal.org/docs/develop/coding-standards/list-of-sql-reserved-words
我正在使用 Java 制作一个不和谐的机器人,我将 hsqldb 用于内存数据库,但它对我来说效果不佳,我将数据插入 table 和结果下次设置给出 0 行。最令人困惑的一点是它之前在 bot
的另一个功能中起作用代码
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();
}
我知道第一个回复将使用 p1.setLong
但我这样做了,SQL 支持服务器中的一个也这样做是为了调试,但它们都不起作用
创建了 table
的查询CREATE TABLE waiting_rolls (channel Bigint, user Bigint, isWaiting varchar(50), lastOutput Bigint)
user
是保留的 SQL 关键字。您不应将其用作列名。
我使用你的模式重现了这个问题 - 将列重命名为 'userid' 使一切都按预期工作。
user
被该页面确认为保留关键字:https://www.drupal.org/docs/develop/coding-standards/list-of-sql-reserved-words