如何使用相同的语句和结果集运行多个选择查询? [复制]

Posted

技术标签:

【中文标题】如何使用相同的语句和结果集运行多个选择查询? [复制]【英文标题】:How to run several select queries with same statement and result set? [duplicate] 【发布时间】:2013-05-21 13:05:25 【问题描述】:

我正在尝试编写简单的 Java Web 应用程序来从数据库中获取数据。 我需要在不同的数据库表上运行几个选择查询。

String queryOne = "select firstname from employees where empid = id";
String queryOne = "select title from books where bookid = bid";
String queryOne = "select auther from books where bookid = bid";

我试着这样做:

Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement();
ResultSet rs1 = statement.executeQuery(queryOne);

while (rs1.nest()) 
String firstName = rs1.getString(1);

statement.close();
connection.close();

我只能使用相同的语句运行一个查询。如何使用同一语句执行多个查询?

【问题讨论】:

请帮助:***.com/questions/10797794/… 我得到这样的数据源:DataSource dataSource = (DataSource) context.lookup("jdbc/DatabaseName");如何将 allowMultipleQueries 标志添加到该字符串?谢谢。 你为什么在乎?为什么使用多个语句是一件坏事? 使用connection.prepareStatement(),你得到的PreparedStatement是“可重复使用的”。你也应该这样做以获得参数替换。 如果我使用 PreparedStatement 如何获得多个结果集? 【参考方案1】:

你也许可以将你想要的查询存储在一个数组中并像这样迭代它:

Connection conn = dataSource.getConnection();
try 
  Statement stmt = conn.createStatement();
  try 
    for (String q : queries)   //queries is an array containing the 3 queries
      ResultSet rset = statement.executeQuery(q);
      try 
        rset.getString(1);
       finally 
        rset.close();
      
    
   finally 
    stmt.close();
  
 finally 
  conn.close();

附:最好将您的 Connection、ResultSet 和 Statement 对象包含在 try...finally 块中,以确保您能够每次关闭()它们。

【讨论】:

从 Java 7 开始,您可以使用 try-with-resources @EmanuelSaringan 你不认为这种方法会有任何性能开销吗?【参考方案2】:

为什么不能加入表并执行 1 次查询来获得所有结果?您的查询似乎非常未优化。举个例子:

从 bookid = bid 的书籍中选择标题 从 bookid = bid 的书籍中选择作者

可以在一个查询中轻松完成:

从 bookid = bid 的书籍中选择标题、作者

【讨论】:

以上是关于如何使用相同的语句和结果集运行多个选择查询? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SqlCommand 返回多个结果集?

mysql的查询语句union是啥意思

使用相同的数据库上下文运行多个选择查询

SQL查询语句查询多个数据

如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?

SQL语句对返回的结果集里的字段再进行条件查询,在一个结果集显示