我使用一个java程序来查询一个SQLite DB。我目前处于开发测试状态,希望测试特定的select查询。我有一个线程,我调用它来发出我的所有DB命令(生产者)和一个使用者线程来处理结果集。DBCommand线程(生产者)只需打开DB连接、创建一个新查询、发出查询、获取结果集并将其放在共享队列中并关闭连接:
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已经请求“的错误。注意,在消费者端,目前还没有结果集处理(我还没有为它编写代码)。此错误也发生在程序重新启动之间。自从对我的新表进行最初的查询之后,它就没有工作了。
信息05-17-2017年09:41池-2-线程-4 DBExtend -查询数据库:选择不同的时间戳,machineId,ioType,ioId,子字段,从TrendPredef1111值machineId = 1111和ioType =2和ioId = "25“,时间戳<= 1495027659000000000和时间戳>= 1494943059000000000 错误05-17-2017 09:27:41池-2线程-4 DBExtend -未能发出数据库命令: java.sql.SQLException: ResultSet已被请求
知道我做错什么了吗?
发布于 2017-05-17 13:49:27
您正在对结果集提出两个请求。
首先是创建Resultset对象的时候。
第二,在创建QueryResult对象时。
代之以传递"rs“对象。
https://stackoverflow.com/questions/44026590
复制相似问题