2012-09-07 51 views
2

我試圖將H2用作單元測試的內存數據庫。我通過Spring將所有東西連接在一起。一切似乎工作正常。數據庫加載後,ddl sql文件運行,就像dml sql(或者看起來那樣)。內存中的H2數據庫,插入腳本不會持久

我可以運行一個測試,在數據庫中創建一條記錄,然後檢索並驗證它是否適當地保持。所以這告訴我ddl腳本運行良好。

問題是,當我嘗試接收通過dml腳本插入的記錄時,我什麼也沒得到。

我試着在文件中放入兩次相同的插入語句,確實收到一個唯一的約束錯誤,它告訴我他們正在運行......但由於某種原因,不是持續

DDL:

DROP TABLE IF EXISTS `schema`.`region` ;CREATE TABLE IF NOT EXISTS `schema`.`region` (
    `region_id` INT(11) NOT NULL , 
    `name` VARCHAR(56) NOT NULL , 
    `description` VARCHAR(512) NULL DEFAULT NULL , 
    PRIMARY KEY (`region_id`)); 

DML:

INSERT INTO `schema`.`region` (`region_id`, `name`, `description`) VALUES (1001, 'TEST', 'TESTING'); 

網址:

jdbc:h2:file:db_test;MODE=MYSQL;INIT=create schema if not exists test_db\\;runscript from 'classpath:test_ddl.sql'\\;runscript from 'classpath:test_dml.sql' 

任何幫助將是有益的。

感謝

+0

我有完全相同的問題,你有沒有修復它? – Freewind

回答

1

Where are the Database Files Stored?的常見問題。使用您使用的數據庫URL jdbc:h2:file:db_test,文件存儲在當前工作目錄中。根據你開始你的應用程序的位置,這是一個不同的地方,所以使用不同的數據庫。

我建議改用jdbc:h2:~/db/test_db...

我捆綁使用H2作爲內存數據庫

你實際使用的持久性數據庫,看到database URL overview

+0

是的,你是正確的我的網址指示文件不在內存分貝。我的意圖是最終使用內存(jdbc:h2:mem:...)我正在玩其他選項,以查看它是否會在此處發佈並且不準確。我很抱歉。 與那說,我確實使用〜/ db/...格式,這是給更多的信息,這是我需要的。 批量我的跟蹤文件包含「org.h2.jdbc.JdbcSQLException:列‘洋’未找到; SQL語句:」錯誤 我有一個基本的語句如下: – user1655798

+0

我的跟蹤文件的大部分內容包含「組織.h2.jdbc.JdbcSQLException:列 「洋」 未找到; SQL語句:」錯誤 EX聲明: CREATE TABLE IF NOT EXISTS's1'.'tableA'( 'id' INT(11)NOT NULL, 'name' VARCHAR(56)NOT NULL, 'description' VARCHAR(512)NULL DEFAULT NULL, PRIMARY KEY('id')); CREATE TABLE IF NOT EXISTS's1'。'tableB'( 'tableB_id' INT(11)NOT NULL, 'name' VARCHAR(12)NOT NULL, 'tableA_id' INT(11)NOT NULL, PRIMARY KEY('tableB_id') 約束'fk_tableA 'FOREIGN KEY('tableA_id')REFERENCES's1'.'tableA'('id')ON DELETE NO ACTION ON UPDATE NO ACTION); – user1655798

+0

這聽起來像是一個不同的問題。你能發佈完整的錯誤消息(包括錯誤代碼)和所有堆棧跟蹤? –