在内存H2数据库中,插入脚本不会持久化

时间:2012-09-07 22:02:13

标签: database insert h2 persist

我想将H2用作我的单元测试的内存数据库。我通过Spring将所有内容连接在一起。一切似乎才能正常工作。数据库加载,ddl sql文件运行,dml sql运行(或者看起来似乎如此)。

我可以运行一个在数据库中创建记录的测试,然后检索并验证它是否被适当保留。所以这告诉我ddl脚本运行正常。

问题是当我尝试接收通过dml脚本插入的记录时,我什么都没得到。

我尝试将相同的insert语句放在文件中两次,确实收到一个唯一的约束错误,它告诉我它们正在运行......但由于某种原因不能持久化

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');

URL:

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'

任何帮助都会有所帮助。

谢谢

1 个答案:

答案 0 :(得分:1)

请参阅常见问题解答中的Where are the Database Files Stored?。使用您使用的数据库URL jdbc:h2:file:db_test,文件存储在当前工作目录中。根据您启动应用程序的位置,这是一个不同的位置,因此使用不同的数据库。

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

  

我想将H2用作内存数据库

您实际上正在使用持久性数据库,请参阅database URL overview