2016-09-26 110 views
2

我想製作一個Java應用程序,當我點擊按鈕時,它可以在瀏覽器中打開Goog​​le地圖。我可以從MySQL數據庫獲取位置,緯度和經度。但是,如果我正在運行該課程,即使所有結果已經設置完畢,「結果結束」也會一直出現。這是我的代碼:總是出現錯誤「結束結果集」,所有結果集已關閉

while(rs.next()) { 
       String getKodeLokasi = rs.getString("kode_lokasi"); 
       if ((kode_lokasi.equals(getKodeLokasi))){ 
        check = true; 
       } 
       break; 
      } 

if (check) { 
    String latitude = "SELECT latitude FROM data_lokasi WHERE kode_lokasi = '"+kode_lokasi+"'"; 
    String getLat = rs.getString("latitude"); <<<<----- After end of result set 

    String longtitude = "SELECT longtitude FROM data_lokasi WHERE kode_lokasi = '"+kode_lokasi+"'"; 
    String getLong = rs.getString("longtitude"); 

    String lokasi = "SELECT lokasi FROM data_lokasi WHERE kode_lokasi = '"+kode_lokasi+"'"; 
    String getLokasi = (rs.getString("lokasi")).replace(" ", "+"); 

    if(Desktop.isDesktopSupported()){  
     Desktop.getDesktop().browse(new URI("https://www.google.co.id/maps/place/'"+getLokasi+"'/@'"+getLat+"','"+getLong+"',17z/")); 
    }       
} else {    
    JOptionPane.showMessageDialog(this, "Can't find code!"); 
} 

我的代碼有什麼問題?謝謝,請幫助我:')

+0

我不知道我關注你,但你似乎在說你調用了已經關閉的ResultSet的'getString()'方法。如果是這樣的話,那就是問題所在。關閉它後,你不能繼續使用'ResultSet'(包括如果關閉產生它的'Statement'或''Statement'所屬的'Connection',這也會關閉'ResultSet')。 –

+1

此外,實際問題與谷歌地圖無關。標籤已移除。 –

+0

i.m對不起i.m忘了以前的代碼。在while循環結束後,我已經編輯它 – Dompet

回答

1

您一直滾動到您的ResultSet的末尾。此時,它不再位於有效行上,因此沒有要讀取的列值。尤其是,您無法讀取kode_lokasi.equals(getKodeLokasi)評估的行的任何值爲true

如果您預計不會超過一行,則將while循環更改爲if塊,以便僅調用rs.next()一次。如果您需要適應多個結果行,那麼當找到正在查找的行時,您可能需要break以避免在ResultSet上再次調用rs.next()

這裏的主題是,如果你想從結果行中讀取滿足條件的值,那麼在找到該行後,你不能移動到另一個。

+1

另外,我看到沒有理由爲什麼你應該關注多行,也不知道爲什麼你需要在其中一個結果列上檢查一個簡單的相等條件。如果你想過濾行然後把它放在你的查詢中,而不是後處理結果。讓數據庫處理過濾既清潔又有效。 –

+0

我正在過濾每一行,並將其放在鏈接上,因爲我不知道源代碼如何將過濾器行放入我的查詢中,而不是有效地對結果進行後處理。也許這是我知道的過濾方式@John Bollinger – Dompet

+0

我已經在循環中添加了'break;',但是我的java應用只是識別第一個數據。我的應用程序無法識別第二,第三等:(@John Bollinger – Dompet