2013-05-15 80 views
3

我正在使用HSQLDB 2.2.9中的GUI(hsqldb.jar)創建數據庫。我在一個單獨的文本文件中包含了所有的SQL命令。所以要創建數據庫,我只需複製文本並粘貼到HSQLDB編輯器中,然後點擊「Execute SQL」按鈕。我已經成功創建了幾次不同版本的DB,每次只需按下一次「Execute SQL」按鈕即可執行CREATE TABLE命令,並且隨後按下「Execute SQL」按鈕執行INSERT INTO命令。這是有效的,但同時執行CREATEINSERT命令會更方便。我試着將這些組合成一個「執行SQL」,但我不斷收到此錯誤:使用腳本創建表並插入數據未找到HSQLDB表

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,則可以工作。我試過在CREATEINSERT命令以及CHECKPOINT之間放置COMMIT,但這兩個都解決了這個問題。我也嘗試在頂部添加SET WRITE_DELAY FALSE,但這也沒有解決。

我需要添加到此代碼才能使其一步工作?謝謝!

+0

你爲什麼不終止正確使用'語句;'?大多數GUI客戶端(不知道hsqldb之一)會自動拆分語句並分別發送每個語句。 –

+0

@a_horse_with_no_name我應該包括';'s。我讓他們參加了一些試驗,我也遇到了同樣的錯誤,不管他們有沒有這些錯誤。似乎fredt有我的答案,但不是我正在尋找的那個。感謝您的評論。 – neizan

回答

2

這是不可能的。

GUI客戶端將窗口中的所有文本發送到數據庫引擎。引擎在執行它們之前編譯所有語句。因此,如果語句依賴於完成前面的語句,它將不會編譯。

從腳本填充數據庫的更好方法是SqlFile工具,它是SqlTool.jar的一部分。該工具逐個執行語句。

單獨的指南是在這裏:

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

+0

感謝您的信息,我會檢查一下SqlFile工具。 – neizan

相關問題