2016-03-20 8 views
2

私は、Mapオブジェクト(HashMapなど)に追加することで、テーブルから取得したデータを処理する方法を持っています。しかし、ResultSetオブジェクト(dbResultset)データを再印刷しようとしているときにMapオブジェクトに追加された後は、データは印刷されません。だから私の疑問は、私のコードは、Mapオブジェクトに一度追加されると、ResultSetオブジェクトに何もデータが存在しないということですか?他のメソッドでResultSetオブジェクトを再利用することはできませんか?MapオブジェクトにResultSetオブジェクトが追加されても、ResultSetオブジェクトには一度データがありませんか?

public class DBConnection { 
    Map<String, String> authentication=new HashMap<String, String>(); 
    public Map<String,String> processResultset() { 

     try { 
      // Retrieving the types and properties of columns from ResultSet object 
      ResultSetMetaData dbMetadata = dbResultset.getMetaData(); 
      int columnCount=dbMetadata.getColumnCount(); 
      System.out.println("col count:"+columnCount); 
      if(!dbResultset.isBeforeFirst()){ 
       System.out.println("No Records Found"); 
      } 
      else{ 
       while(dbResultset.next()){ 
        authentication.put(dbResultset.getString(1), dbResultset.getString(2)); 
       } 
       System.out.println(authentication); 
       if(dbResultset.isAfterLast()) 
        System.out.println(" no data exists"); 
      } 

     } catch (Exception e) { 
      // TODO: handle exception 
     } 
     finally{ 
      return authentication; 
     } 
    } 
} 

出力:

col count:2 
hi{203=UK, 204=Netherlands, 200=Germany, 201=Romania, 104=Japan, 103=USA, 101=Russia, 100=India} 
no data exists 
+1

あなたの問題は何ですか?結果セットのすべての内容を '認証'マップに追加した後、結果セット自体が消費されます。イテレータのようなもので、完全に消費された後は再利用できません。 –

+0

'dbResultset'はどこで宣言され、初期化されていますか? JDBCオブジェクト(ステートメント、結果セット)は、リソースを漏らさないように最小限のスコープを持つ必要があります。したがって、 'ResultSet'を再利用することは悪い考えです。 –

+0

カーソルは最後の入力の後にあります。どうしたの。何を正確に達成しようとしていますか? –

答えて

0

あなたがisAfterLast()を使用するときには、すでにnext()を使用してカーソルを移動するので、その取得するデータはありませんでしたnext()を使用して、最後の行までカーソルを移動させ、何が起こりました最後に利用可能なデータまで取得するデータがありません

+0

こんにちはKarim、答えていただきありがとうございます。私はbeforeFirst()メソッドを使用して最初のレコードの前にカーソルを移動し、ResultSetオブジェクトを今すぐ再利用できます。 – moneyclosetooxygen

関連する問題