У меня есть соединение со встроенной базой данных derby.
Я хочу создать временную таблицу и узнал, что должен использовать DECLARE GLOBAL TEMPORARY TABLE и префикс SESSION к имени таблицы в операторе INSERT.
Я пытался использовать и не использовать префикс SESSION в операторах DECLARE и SELECT, но это не имело никакого значения.
Оператор DECLARE для создания временной таблицы является успешным, как и два оператора INSERT(каждый возвращает счетчик 1).
Оператор SELECT не возвращает никаких результатов.Я попытался "SELECT * FROM ..." также безуспешно.
Любой совет приветствуется.
(ПРИМЕЧАНИЕ: здесь conn является классом-оберткой, поэтому conn.executeQuery,conn.executeUpdate фактически получает 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