Java内存hsqldb

Posted

技术标签:

【中文标题】Java内存hsqldb【英文标题】:Java memory hsqldb 【发布时间】:2021-01-07 10:28:11 【问题描述】:

我正在使用 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)

【问题讨论】:

【参考方案1】:

user 是保留的 SQL 关键字。您不应将其用作列名。

我使用您的架构重现了该问题 - 将列重命名为“用户 ID”使一切按预期工作。

user被本页确认为保留关键字:https://www.drupal.org/docs/develop/coding-standards/list-of-sql-reserved-words

【讨论】:

以上是关于Java内存hsqldb的主要内容,如果未能解决你的问题,请参考以下文章

[Java]Java的堆内存和栈内存解析--举例进行内存分析

java内存模型深入理解java内存模型的系列好文

在java中上传文件出现内存溢出怎么解决标签:java,内存,溢出

如何设置java内存限制

如何防止java中的内存泄漏

java有内存溢出吗?如果有是啥情况?