如何使用相同的语句和结果集运行多个选择查询? [复制]
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 的书籍中选择标题、作者
【讨论】:
以上是关于如何使用相同的语句和结果集运行多个选择查询? [复制]的主要内容,如果未能解决你的问题,请参考以下文章