2016-09-26 17 views
2

ボタンをクリックするとブラウザでGoogleマップを開くことができるJavaアプリケーションを作りたいと思います。 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

また、実際の質問はGoogleマップとは関係ありません。タグが削除されました。 –

+0

i.m申し訳ありません。i.mは前のコードを忘れていました。私はすでに – Dompet

答えて

1

ResultSetの最後までスクロールします。その時点では、有効な行には存在しないため、読み取る列の値はありません。特に、kode_lokasi.equals(getKodeLokasi)と評価された行から値を読み取ることはできません。trueです。

複数の行が存在しない場合は、が1回だけ呼び出されるように、whileループをifブロックに変更してください。複数の結果行に対応する必要がある場合は、探しているループを見つけたらbreakをループから外してが再びResultSetで呼び出されないようにする必要があります。

ここでのテーマは、条件を満たす結果行から値を読み取る場合、その行を見つけた後、別の行に移動してはいけないということです。

+1

また、私は見る複数の行に関係する必要がある理由や、結果列のいずれかで単純な等価条件をチェックする必要がある理由はありません。行をフィルタリングする場合は、結果を後処理するのではなく、クエリにその行を配置します。 DBハンドルでフィルタリングを行うと、よりクリーンで効率的です。 –

+0

結果を効率的に後処理するのではなく、フィルタ行がそれをどのようにしてクエリに入れるのかソースコードがわからないため、各行をフィルタリングしてリンクに置きます。たぶんこれは私がそれをフィルタリングすることを知っている方法です@John Bollinger – Dompet

+0

私のループに 'break;'をすでに追加していますが、Javaアプリケーションは最初のデータを識別するだけです。私のアプリは第2、第3などを識別することができません:(@ジョンボリンジャー – Dompet

関連する問題