我正在使用H2 1.4.191对生产中针对DB2运行的一些代码进行单元测试。我在H2和DB2中创建了一个序列,如下所示 -
NSSetUncaughtExceptionHandler
代码会像这样查询 -
CREATE SEQUENCE TABLENAME_SEQ
START WITH 1
INCREMENT BY 1
NO CYCLE
CACHE 50;
由于代码基本上是针对DB2运行的,因此它会针对SELECT NEXTVAL FOR TABLENAME_SEQ FROM SYSIBM.SYSDUMMY1
进行选择。
单元测试的H2 URL将模式指定为DB2,这是否意味着H2将针对SYSIBM.SYSDUMMY1进行查询,或者我在此处遗漏了一些内容。
SYSIBM.SYSDUMMY1
这是我得到的错误 - org.h2.jdbc.JdbcSQLException:SQL语句中的语法错误"从SYSIBM.SYSDUMMY1"中选择NEXTVAL FOR TABLENAME_SEQ; SQL语句: 从SYSIBM.SYSDUMMY1 [42000-191]
为TABLENAME_SEQ选择NEXTVAL我知道用于从q序列中选择的H2的systax是不同的,但是因为我指定了mode = db2,它是否适用于DB2 systax?
答案 0 :(得分:0)
设置连接时,只需在网址中添加INIT指令:
jdbc:h2:./testdb;MV_STORE=FALSE;MVCC=FALSE;MODE=DB2;INIT=CREATE SCHEMA IF NOT EXISTS SYSIBM\\;CREATE TABLE IF NOT EXISTS SYSIBM.SYSDUMMY1()
请注意,只有Java中才需要双反斜杠(\)。之前的反斜杠;在INIT内是必需的。
我希望这会对你有所帮助