Java H2中的SQL方言

Java H2中的SQL方言,java,db2,h2,Java,Db2,H2,我有一个包含SQL“insert”语句的文件。我打开这个文件,读取它,然后尝试将它插入数据库(表已经存在)。声明的格式如下: Insert into table1 Select 1,.... Insert into table1 Select 2,.... Insert into table1 Select 3,.... ; “;”在一大堆台词之后 这些语句在实际的DB2服务器中运行良好,但在H2中不起作用。我也尝试过MODE=DB2,但仍然不起作用 为了使它工作,我插入了“;”每行之后。因此

我有一个包含SQL“insert”语句的文件。我打开这个文件,读取它,然后尝试将它插入数据库(表已经存在)。声明的格式如下:

Insert into table1 Select 1,....
Insert into table1 Select 2,....
Insert into table1 Select 3,....
;
“;”在一大堆台词之后

这些语句在实际的DB2服务器中运行良好,但在H2中不起作用。我也尝试过MODE=DB2,但仍然不起作用

为了使它工作,我插入了“;”每行之后。因此,声明变成:

Insert into table1 select 1,....;
Insert into table1 Select 2,....;
Insert into table1 Select 3,....;
;
当我尝试在H2控制台中插入这些语句时,效果很好。但在java程序中,由于两个连续的“;”而产生错误


这个问题有什么解决方案吗?

我不能完全理解“选择”之后的内容,因为我习惯于使用“值(…)”或引用另一个表的select语句,这些语句通常可以使用类似于ROW_NUMBER()的语句对所显示的值编制成单个语句

如果插入量很大,请尝试使用PreparedStatement的addBatch()方法。正确实现后,它速度快,非常安全,对数据库资源(如语句缓存)的影响最小


您需要单独执行这些语句。H2控制台还单独执行每个语句。
con.setAutoCommit(false);
PreparedStatement pstmt = con.prepareStatement("INSERT INTO table1 VALUES (?,?)");
pstmt.setInt(1, 1);
pstmt.setString(2, "example");
pstmt.addBatch();
pstmt.setInt(1, 2);
pstmt.setString(2, "I should really loop through an array here...");
pstmt.addBatch();
int[] updCnt = pstmt.executeBatch();
con.commit();