gpt4 book ai didi

java - 使用嵌入式 Derby,我可以插入临时表但不能在插入后查询

转载 作者:行者123 更新时间:2023-11-30 09:52:37 25 4
gpt4 key购买 nike

我连接到嵌入式 Derby 数据库。

我想创建一个临时表并了解到我必须使用 DECLARE GLOBAL TEMPORARY TABLE 并在 INSERT 语句中为表名添加前缀 SESSION。

我已经尝试在 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();

The result of the above code is

tt 1a
tt 1b
tt 2, count 1
tt 3, count 1
tt 4, query result count = 0

最佳答案

如果自动提交设置为 true,则必须使用“ON COMMIT PRESERVE ROWS”创建临时表,就像我的情况一样。

如果您将 autocommit 设置为 false,原始代码将起作用。

在我的例子中,它被设置为 true,现在被设置为 false。

关于java - 使用嵌入式 Derby,我可以插入临时表但不能在插入后查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4176243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com