使用脚本创建表和插入数据未找到 HSQLDB 表

Posted

技术标签:

【中文标题】使用脚本创建表和插入数据未找到 HSQLDB 表【英文标题】:HSQLDB table not found using script to create table and insert data 【发布时间】:2013-05-15 10:43:35 【问题描述】:

我正在使用 HSQLDB 2.2.9 中的 GUI (hsqldb.jar) 创建数据库。我将所有 SQL 命令放在一个单独的文本文件中。因此,要创建数据库,我只需将文本复制并粘贴到 HSQLDB 编辑器中,然后单击“执行 SQL”按钮。我已经成功地创建了多次不同版本的数据库,每次执行CREATE TABLE 命令时只需按一下“执行 SQL”按钮,然后再按一下“执行 SQL”按钮即可执行 INSERT INTO 命令。这可行,但同时执行CREATEINSERT 命令会更方便。我尝试将这些组合成一个“执行 SQL”,但我不断收到此错误:

user lacks privilege or object not found: SHOP / Error Code: -5501 / State: 42501

这是我尝试过的:

CREATE TABLE Shop (
    Id int NOT NULL IDENTITY, 
    Name varchar(255) NOT NULL, 
    UNIQUE (Name)
)

INSERT INTO Shop VALUES (
    NULL, 
    'Test Shop'
)

请注意,如果我在两个单独的步骤中执行 SQL,则此完全相同的代码可以工作。我尝试将COMMIT 放在CREATEINSERT 命令以及CHECKPOINT 之间,但这些都没有解决问题。我也尝试在顶部添加SET WRITE_DELAY FALSE,但这也没有解决。

我需要在此代码中添加什么才能使其一步到位?谢谢!

【问题讨论】:

为什么不使用; 正确终止语句?大多数 GUI 客户端(虽然不知道 hsqldb 客户端)然后会自动拆分语句并分别发送每个语句。 @a_horse_with_no_name 我应该包括;s。我让他们参加了一些试验,无论有没有他们,我都会遇到同样的错误。似乎 fredt 有我的答案,虽然不是我要找的那个。感谢您的评论。 【参考方案1】:

这是不可能的。

GUI 客户端将窗口中的所有文本发送到数据库引擎。引擎在执行它们之前编译所有语句。因此,如果一个语句依赖于前一个语句的完成,它将无法编译。

从脚本填充数据库的更好方法是 SqlFile 工具,它是 SqlTool.jar 的一部分。这个工具会一一执行语句。

单独的指南在这里:

http://hsqldb.org/doc/2.0/util-guide/sqltool-chapt.html

【讨论】:

感谢您的信息,我会查看 SqlFile 工具。

以上是关于使用脚本创建表和插入数据未找到 HSQLDB 表的主要内容,如果未能解决你的问题,请参考以下文章

hsqldb-2.2.6 创建表并从脚本插入数据

HSQLDB 启动 DDL 脚本

具有 hsqldb 脚本文件的唯一约束违规异常(未读取空格字符)

为 hsqldb 创建架构时出现语法错误

HSQLDB 无法删除未找到的外键约束对象

表和存储过程未包含在生成的脚本中