我有一个嵌入式德比数据库的连接。
我想创建一个临时表,并了解到必须使用DECLARE GLOBAL TEMPORARY TABLE并将前缀SESSION添加到INSERT语句中的表名。
我已尝试在DECLARE和SELECT语句中使用而不使用SESSION前缀,但它没有任何区别。
创建临时表的DECLARE语句是成功的,因为两个INSERT语句(每个返回计数为1)。
SELECT语句无法返回任何结果。我试过“SELECT * FROM ...”也没有成功。
感谢任何建议。
(注意:conn这里是一个包装类,所以conn.executeQuery,conn.executeUpdate实际上得到一个Statement并使用Statement的executeQuery / Update)
System.out.println("tt 1a" ); conn.executeUpdate("DECLARE GLOBAL TEMPORARY TABLE SESSION.tempstats ( t1 int, t2 int, t3 int) NOT LOGGED "); System.out.println("tt 1b" ); // PreparedStatement pStmt = conn.prepareStatement( "INSERT INTO SESSION.tempstats VALUES ( ?, ?, ? )" ); pStmt.setInt( 1, 1 ); pStmt.setInt( 2, 1 ); pStmt.setInt( 3, 1 ); int count = pStmt.executeUpdate(); System.out.println("tt 2, count " + count ); pStmt.setInt( 1, 2 ); pStmt.setInt( 2, 2 ); pStmt.setInt( 3, 2 ); count = pStmt.executeUpdate(); System.out.println("tt 3, count " + count ); ResultSet testRs = conn.executeQuery( "SELECT t1, t2 from SESSION.tempstats" ); count = 0; while ( testRs.next() ) { log2 ("result of tempstats table is " + testRs.getInt("t1") + " " + testRs.getString("t2") ); count++; } System.out.println("tt 4, query result count = " + count ); testRs.close(); pStmt.close();
上述代码的结果是
tt 1a
tt 1b
tt 2, count 1
tt 3, count 1
tt 4, query result count = 0
答案 0 :(得分:2)
如果autocommit设置为true,则必须使用“ON COMMIT PRESERVE ROWS”创建临时表,就像我的情况一样。
如果将autocommit设置为false,则原始代码将起作用。
在我的情况下,is设置为true,现在设置为false。
答案 1 :(得分:0)
创建表时使用“ON COMMIT PRESERVE ROWS”:
DECLARE GLOBAL TEMPORARY TABLE SESSION.TEMPSTATS(t1 int,t2 int,t3 int)ON COMMIT PRESERVE ROWS NOT LOGGED