2016-03-20 25 views
2

我有一種方法,通過添加到Map對象(即HashMap)來處理從表中檢索到的數據。但是,當它試圖重新打印ResultSet對象(dbResultset)數據時,它已被添加到Map對象中,但沒有數據被打印。所以我的疑問是,我的代碼是否有一些操作(或),一旦將它添加到Map對象中,ResultSet對象中就不會有任何數據?我無法在其他方法中重複使用ResultSet對象嗎?ResultSet對象在添加到Map對象後沒有任何數據嗎?

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

發生了什麼事是你使用next()使光標移動,直到最後一排,當你使用isAfterLast()沒有數據得到,因爲你已經使用next()和移動光標直到最後一個可用數據,並且沒有數據可以獲得

+0

您好卡里姆,感謝您的答案,我使用beforeFirst()方法將光標移動到第一個記錄和ResultSet對象現在可以重用之前。 – moneyclosetooxygen

相關問題