ResultSet已经请求过了

时间:2017-05-17 13:41:18

标签: java jdbc sqlite

我使用java程序查询SQLite数据库。我目前处于开发测试状态,并希望测试特定的选择查询。我有一个线程,我调用它来发出我的所有数据库命令(生产者)和一个消费者线程来处理结果集。 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 - 向数据库发出查询:从TrendPredef1111中选择不同的时间戳,machineId,ioType,ioId,子字段,值WHERE machineId = 1111 AND ioType = 2 AND ioId =" 25" AND时间戳< = 1495027659000000000 AND时间戳> = 1494943059000000000

     

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

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:3)

您正在发出两个结果集请求。

首先是在创建Resultset对象时。

创建QueryResult对象时的第二个。

通过" rs"而不是对象。