java - Java内存hsqldb
问题描述
我正在使用 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();
}
我知道将使用第一个回复,p1.setLong
但我这样做了,SQL 支持服务器中的一个这样做是为了调试,它们都不起作用
创建表的查询
CREATE TABLE waiting_rolls (channel Bigint, user Bigint, isWaiting varchar(50), lastOutput Bigint)
解决方案
user
是保留的 SQL 关键字。您不应将其用作列名。
我使用您的架构重现了该问题 - 将列重命名为“用户 ID”使一切按预期工作。
user
被此页面确认为保留关键字:https ://www.drupal.org/docs/develop/coding-standards/list-of-sql-reserved-words
推荐阅读
- drupal - Drupal:向类别添加了新的分类术语,但与不同类别一起使用时会引发错误
- android - 单击时汉堡菜单没有响应
- mysql - MySQL 不等于某个长度
- reactjs - 如何在样式化组件中使用类
- java - 如何从 ScheduledFuture 任务中获取委托
- php - 如何在jquery中将字符串添加到选项菜单X次
- powershell - Powershell 错误:Get-Date 上的指定转换无效错误
- postgresql - 删除触发器后的 Postgres 不会触发
- php - 覆盖 WooCommerce 全局模板 quantity-input.php 以获得更好的移动端数量输入体验
- scala - Scala 库在编译和测试配置中都可用