【问题标题】:ResultSet already requested已请求结果集
【发布时间】:2017-05-17 13:41:17
【问题描述】:

我正在使用 java 程序来查询 SQLite DB。我目前处于开发测试状态,想测试一个特定的选择查询。我有一个线程,我调用它来发出我的所有数据库命令(生产者)和一个消费者线程来处理结果集。 DBCommand 线程(生产者)将打开数据库连接,创建一个新查询,发出它,获取结果集并将其放入共享队列并关闭连接:

String url = "jdbc:sqlite:" + Configuration.getInstance().getDbPath();
        // create a connection to the database
        conn = DriverManager.getConnection(url);

 try
        {
            if (conn.isValid(DB_TIMEOUT))
            {
                Statement stmt;
                try
                {
                    errorLog.info("Query Issued to Database: " + query);
                    stmt = conn.createStatement();
                    stmt.execute(query);
                    ResultSet rs = stmt.getResultSet();
                    if (rs != null)
                    {
                        try
                        {
                            TrendApp.resultSetProcQueue.put(new QueryResult(request, stmt.getResultSet()));
                        } catch (InterruptedException e)
                        {
                            errorLog.error("Failed to capture result set from query: " + e);
                        }

                    } else
                    {
                        try
                        {
                            TrendApp.resultSetProcQueue.put(new QueryResult(request, null));
                        } catch (InterruptedException e)
                        {
                            errorLog.error("Failed to capture result set from query: " + e);
                        }
                        errorLog.info(stmt.getUpdateCount() + " rows updated.");
                    }

                } catch (SQLException e)
                {
                    errorLog.error("Failed to issue database command: " + e);
                }

            }
        } catch (SQLException e)
        {
            errorLog.error("Database connection is not valid.");
        }

        closeDB();
    } else
    {
        errorLog.info("Database query is empty. No action performed.");
    }

}

请注意,这个程序的重点是从已经存在的大量表中取出元素,并将子集放入我创建的新表中,以便于访问。因此,当我查询新表时,我收到错误“已请求 ResultSet”。请注意,在消费者方面,目前还没有结果集处理(我还没有为它编写代码)。此错误也会在程序重新启动之间发生。自从对我的新表的初始查询以来,它一直没有工作。

[INFO] 05-17-2017 09:27:41 [pool-2-thread-4] DBExtend - 向数据库发出查询:选择不同的时间戳、machineId、ioType、ioId、子字段、来自 TrendPredef1111 的值 WHERE machineId = 1111 AND ioType = 2 AND ioId = "25" AND 时间戳 = 1494943059000000000

[ERROR] 05-17-2017 09:27:41 [pool-2-thread-4] DBExtend - 无法发出数据库命令:java.sql.SQLException:ResultSet 已请求

任何想法我做错了什么?

【问题讨论】:

  • 你给stmt.getResultSet()打了两次电话,这是禁止的。

标签: java jdbc sqlite


【解决方案1】:

您正在对结果集进行两次请求。

首先是在创建Resultset 对象时。

第二次创建 QueryResult 对象。

改为传递“rs”对象。

【讨论】:

  • 是的,我在您编辑之前进行了更改。但我仍然感谢您的澄清。
猜你喜欢
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
相关资源
最近更新 更多