使用脚本创建表和插入数据未找到 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
命令。这可行,但同时执行CREATE
和INSERT
命令会更方便。我尝试将这些组合成一个“执行 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
放在CREATE
和INSERT
命令以及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 表的主要内容,如果未能解决你的问题,请参考以下文章