Hi, Thanks a lot for the test case! I found and fixed the problem.
Regards, Thomas On Friday, August 14, 2015, Aleksey Konstantinov <[email protected]> wrote: > Hi. > > In 1.4.188 version has a bug with temporary tables (in 1.4.187 it was not): > After you create and add data into temporary tables can not create and add > data in another temporary table. > > The following code reproduces this bug: > package h2test; > > import java.sql.*; > > public class H2TempTables { > public static void main(String[] args) { > System.out.println("*** Test on persistent tables"); > Test("TABLE"); > System.out.println("\n"); > System.out.println("*** Test on temporary tables"); > Test("LOCAL TEMPORARY TABLE"); > } > private static void Test (String typeTable) { > try { > Class.forName("org.h2.Driver"); > Connection conn = DriverManager.getConnection("jdbc:h2:mem:test", "sa", > ""); > conn.setAutoCommit(true); > System.out.print("Create table1 and table2 ... "); > Statement stmt = conn.createStatement(); > stmt.execute("CREATE " + typeTable + " TABLE1 (ID INT NOT NULL PRIMARY > KEY, NAME VARCHAR(50) NOT NULL)"); > stmt.execute("CREATE " + typeTable + " TABLE2 (ID INT NOT NULL PRIMARY > KEY, NAME VARCHAR(50) NOT NULL)"); > System.out.println("OK"); > System.out.print("Generate 10000 rows to table1 and table2 ... "); > PreparedStatement stmtTable1 = conn.prepareStatement("INSERT INTO TABLE1 > (ID, NAME) VALUES (?, ?)"); > PreparedStatement stmtTable2 = conn.prepareStatement("INSERT INTO TABLE2 > (ID, NAME) VALUES (?, ?)"); > int batch = 0; > for (int num = 1; num <= 10000; num++) { > batch++; > stmtTable1.setInt(1, num); > stmtTable1.setString(2, "TEST " + String.valueOf(num)); > stmtTable1.addBatch(); > stmtTable2.setInt(1, num); > stmtTable2.setString(2, "TEST " + String.valueOf(num)); > stmtTable2.addBatch(); > if (batch > 1000) { > stmtTable1.executeBatch(); > stmtTable2.executeBatch(); > batch = 0; > } > } > if (batch > 0) { > stmtTable1.executeBatch(); > stmtTable2.executeBatch(); > } > System.out.println("OK"); > System.out.print("Create table3 ... "); > stmt.execute("CREATE " + typeTable + " TABLE3 (ID INT NOT NULL PRIMARY > KEY, NAME VARCHAR(50) NOT NULL)"); > System.out.println("OK"); > System.out.print("Generate 10000 rows to table3 ... "); > PreparedStatement stmtTable3 = conn.prepareStatement("INSERT INTO TABLE3 > (ID, NAME) VALUES (?, ?)"); > batch = 0; > for (int num = 1; num <= 10000; num++) { > batch++; > stmtTable3.setInt(1, num); > stmtTable3.setString(2, "TEST " + String.valueOf(num)); > stmtTable3.addBatch(); > if (batch > 1000) { > stmtTable3.executeBatch(); > batch = 0; > } > } > if (batch > 0) { > stmtTable3.executeBatch(); > } > System.out.println("OK"); > System.out.print("Drop tables table1, table2 and table3 ... "); > stmt.execute("DROP TABLE TABLE1, TABLE2, TABLE3"); > System.out.println("OK"); > } catch (Exception e) { > e.printStackTrace(); > return; > } > } > } > > It looks like an error occurs if preparedstatement contains a large number > of rows in batch. > > -- > You received this message because you are subscribed to the Google Groups > "H2 Database" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected] > <javascript:_e(%7B%7D,'cvml','h2-database%[email protected]');> > . > To post to this group, send email to [email protected] > <javascript:_e(%7B%7D,'cvml','[email protected]');>. > Visit this group at http://groups.google.com/group/h2-database. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "H2 Database" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/h2-database. For more options, visit https://groups.google.com/d/optout.
