如何在java中对另一个选择查询的结果集执行选择查询
Posted
技术标签:
【中文标题】如何在java中对另一个选择查询的结果集执行选择查询【英文标题】:How to perform a select query on the ResultSet of another select query in java 【发布时间】:2020-06-17 11:36:26 【问题描述】:这是我尝试在第一个冗长查询的resultSet
上执行第二个查询的代码。我需要上传这个
某处的数据。
这样做对吗?
或者除了再次查询数据库之外还有更好的方法吗?
public String createQuery() throws SQLException
StringBuilder Query = new StringBuilder();
try
Query.append(" SELECT ...... ")
catch (Exception e)
e.printStackTrace();
return Query.toString();
private void openPreparedStatements() throws SQLException
myQuery = createQuery();
try
QueryStatement = dbConnection.prepareStatement(myQuery);
catch (SQLException e)
e.printStackTrace();
return;
public ResultSet selectData(String timestamp) throws SQLException
openConnection();
ResultSet result = null;
ResultSet rs_new=null;
try
result = QueryStatement.executeQuery();
while (result.next())
String query = "SELECT * FROM " + result + " WHERE " + "ID" + " =" + "ABC";
rs_new =QueryStatementNew.executeQuery(query);
System.out.print(rs_new);
catch (SQLException e)
LOGGER.info("Exception", e);
return result;
【问题讨论】:
您需要将此代码与结果集代码嵌套。 我读到这种方法根本不适合,你知道为什么吗? 请分享详细的代码 sn-ps 以清楚了解您的实现。 更新了完整代码 【参考方案1】:您可以将它们组合起来,而不是运行两个单独的查询(当您不需要中间查询时)。
例如你可以这样做:
SELECT *
FROM (
-- first query here
) x
WHERE ID = 'ABC'
【讨论】:
我需要两个不同的结果集,因为我需要将第一个发送到 FTP,第二个发送到弹性 那么答案是否定的。您要求实现一个结果集,然后使用它来运行第二个查询。 DB2(和大多数数据库)不是这样工作的 如果为了提高效率而运行复合查询(像这样),引擎不会实现第一个查询,而是将其流水线。您需要分别运行这两个查询。 我们有什么理由不能这样做吗?有什么文件吗?请告诉我【参考方案2】:您不能在一个数据库连接中使用两个语句对象。因此,您可以打开另一个数据库连接并在第二个连接中执行第二个语句,或者遍历第一个语句的结果集并存储您需要的值(例如在数组/集合中)然后关闭该语句并运行第二个,这次从您保存它们的数组/集合中检索值。请参阅Java generating query from resultSet and executing the new query
【讨论】:
【参考方案3】:让 Db2 将中间结果集保存在全局临时表中,如果您有能力使用它,并且您的应用程序使用相同的数据库连接会话。
DECLARE GLOBAL TEMPORARY TABLE SESSION.TMP_RES AS
(
SELECT ID, ... -- Your first lengthy query text goes here
) WITH DATA WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED;
您可以将后续SELECT ... FROM SESSION.TMP_RES
的结果发送到FTP,将SELECT * FROM SESSION.TMP_RES WHERE ID = 'ABC'
的结果发送到elastic。
【讨论】:
以上是关于如何在java中对另一个选择查询的结果集执行选择查询的主要内容,如果未能解决你的问题,请参考以下文章
(java)如何将从数据库中查询出来的结果集转换为对应类的对象?可考虑hibernate。
如何将 mybatis 选择查询的巨大结果集导出到 csv?
java在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException