我正面臨一個小問題。我從表中獲取數據,然後循環結果集。在每個循環中,我使用結果集返回的行數據 在另一個表上執行另一個查詢。我發佈了 下面的代碼。結果集內的結果集
問題是,我感覺到我的代碼中有一些問題,但不能 識別它。代碼運行良好,沒有任何錯誤或異常。幫我找到問題。並且解釋我也是。
我知道我們可以使用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. 集合結果
- 3. MySQL結果集
- 4. Java結果集
- 5. 結合的結果集
- 6. MySQL的結果集
- 7. SQLException結果集結束後
- 8. 在結果集中排序MySQL結果
- 9. 結果集問題
- 10. Hibernate:多結果集
- 11. MongoDb:mapReduce收集結果
- 12. SQL PIVOT結果集
- 13. 結果集驗證
- 14. 多個結果集
- 15. 結果集錯誤
- 16. 結果集在MySQL
- 17. 分頁結果集
- 18. BeautifulSoup - 對結果集
- 19. 用盡結果集
- 20. 使用結果集
- 21. 結果集過濾
- 22. 非法結果集
- 23. 從LINQ結果集
- 24. 造型結果集
- 25. 加入結果集
- 26. SQL選擇集合/結果的年數1-10結果集
- 27. PHP Array:結果集中的內容
- 28. 延遲加載部分結果集或條件結果集
- 29. 從多個結果集中返回單個結果集
- 30. 的Java結果集的RowMapper
所以結合不爲空,究竟是怎麼回事錯在這裏? – Mureinik
沒有錯,但我懷疑我的方法使用結果集。在另一個循環結果集中使用一個結果集可以嗎? – Anant666
不,它可能只使用一個請求(類似於'SELECT * FROM bhav_NSE where符號IN(SELECT DISTINCT SYMBOL FROM Nat_Support)'。btw,你正在泄漏資源 – 2015-11-05 06:30:07