我正面临一个小问题。我从表中获取数据,然后循环结果集。在每个循环中,我使用结果集返回的行数据 在另一个表上执行另一个查询。我发布了 下面的代码。结果集内的结果集
问题是,我感觉到我的代码中有一些问题,但不能 识别它。代码运行良好,没有任何错误或异常。帮我找到问题。并且解释我也是。
我知道我们可以使用Dao作为第一个结果集。但不会 创建太多的对象。
public ResultSet search_NatSupport() throws ClassNotFoundException, SQLException { String query = "SELECT SYMBOL, Date, sup, res FROM Nat_Support WHERE SYMBOL IS NOT ?;"; PreparedStatement stmt = null; ResultSet rs = null; DBHelper helper = DBHelper.getInstance(); stmt = helper.getConn().prepareStatement(query); stmt.setString(1, null); rs = stmt.executeQuery(); return rs; } public void searchAgain(ResultSet rs) { String query = "select * from bhav_NSE where symbol = ?"; PreparedStatement stmt = null; try { while (rs.next()) { stmt = DBHelper.getInstance().getConn().prepareStatement(query); stmt.setString(1, rs.getString(1)); ResultSet res = stmt.executeQuery(); while(res.next()){ System.out.println(res.getString(1)); } res.close(); } rs.close(); } catch (SQLException | ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { BhavMaster_NSE finals = new BhavMaster_NSE(); try { finals.searchAgain(finals.search_NatSupport()); } catch (ClassNotFoundException | SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
Q
结果集内的结果集
1
A
回答
0
相反的两个结果集,加入表上的按键,(这里符号),并在同一查询
public void search()
{
PreparedStatement stmt = null;
String query = "select bnse.* from bhav_NSE bnse,Nat_Support nsup where bnse.symbol=nsup.symbol and nsup.symbol is not null";
stmt = DBHelper.getInstance().getConn().prepareStatement(query);
ResultSet res = stmt.executeQuery();
while(res.next()){
// Get data res.getString(..);
}
res.close();
}
rs.close();
}
0
我得到了这个问题,一旦我需要使用resultset
的返回结果作为另一个输入,但我发现,我不能做到这一点,调试后,我发现,当你写一个Resultset
第一个成为内Resultset
等于Null
因此,这里是一招:
public void searchAgain(ResultSet rs) {
try {
while (rs.next()) {
bhavNse(rs.getString(1));
}
rs.close();
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
}
}
public void bhavNse(String var) {
try {
String query = "select * from bhav_NSE where symbol = ?";
PreparedStatement stmt = null;
stmt = DBHelper.getInstance().getConn().prepareStatement(query);
stmt.setString(1, var);
ResultSet res = stmt.executeQuery();
while(res.next()){
System.out.println(res.getString(1));
}
res.close();
}
catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
}
}
0
- 您不需要在查询结束时放置
;
。使用任何Closeable
资源
即使你想扔Exception
的被调用时,与资源
throw
关键字做到这一点。 try(Connection conn = DBHelper.getInstance().getConn()) {
PreparedStatement stmt = conn.prepareStatement(query);
...
ResultSet res = stmt.executeQuery();
...
} catch (SQLException ex) {
// handle exception here or throw it as below :
throw ex;
}
try-with-resource
即使发生任何故障,也会关闭所有资源。
或旧的方法是介意关闭资源失败并成功了。
+0
try-with-resource是一个不错的选择,但我们使用Jdk 1.6,因此我们必须经历很长的路。为了兼容性,我必须稍后更改代码,因为我在这里使用了多个catch。这将在Java 6中给出错误。 – Anant666
相关问题
- 1. 结合的结果集
- 2. SQLException结果集结束后
- 3. 在结果集中排序MySQL结果
- 4. Hibernate:多结果集
- 5. 造型结果集
- 6. BeautifulSoup - 对结果集
- 7. MongoDb:mapReduce收集结果
- 8. 分页结果集
- 9. 结果集问题
- 10. SQL PIVOT结果集
- 11. 使用结果集
- 12. 从多个结果集中返回单个结果集
- 13. 延迟加载部分结果集或条件结果集
- 14. 的Java结果集的RowMapper
- 15. 会话中的结果集
- 16. 从结果集中的ActiveRecord
- 17. NHibernate - 流大的结果集?
- 18. 空的N1QL结果集
- 19. 结果集的表别名
- 20. 要列表的结果集
- 21. Aggregate()的MongoDB结果集
- 22. 空结果集的NSExpressionDescription
- 23. JSTL对结果集的foreach
- 24. MySQL的 - 多个结果集
- 25. MongoDB的过滤结果集
- 26. mysqli的遍历结果集
- 27. 在结果集内缩放字段值
- 28. 结果集内存不足allocLargeObjectOrArray
- 29. SOLR如何在结果集内提升?
- 30. SQL UNION没有显示第2个结果集的结果,如果第一个结果集是空的
所以结合不为空,究竟是怎么回事错在这里? – Mureinik
没有错,但我怀疑我的方法使用结果集。在另一个循环结果集中使用一个结果集可以吗? – Anant666
不,它可能只使用一个请求(类似于'SELECT * FROM bhav_NSE where符号IN(SELECT DISTINCT SYMBOL FROM Nat_Support)'。btw,你正在泄漏资源 – 2015-11-05 06:30:07