2012-12-30 91 views
1
private void btgetinvActionPerformed(java.awt.event.ActionEvent evt) { 
     //JOptionPane.showMessageDialog(null, "REMITTANCE ID IS VALID!"); 
     try { 
      DBUtil util = new DBUtil(); 
      Connection con = util.getConnection(); 
      PreparedStatement stmt = con.prepareStatement("select bk_det.rm_id from bk_det WHERE dbo.bk_det.rm_id = ?"); 
      ResultSet rs; 
      String rm = tf_rmid.getText().trim(); 
      stmt.setInt(1, Integer.parseInt(rm)); 
      rs = stmt.executeQuery(); 
      while (rs.next()) { 
       int i = Integer.parseInt(rs.getString("box_no")); 
       tfbrname.setText(rs.getString(i)); 
      } 
     } catch (Exception ex) { 
      JOptionPane.showMessageDialog(null, ex.getMessage()); 

     } 
    } 

我實際上試圖從我的數據庫表中搜索名爲dbo.bk_det的值。我從我的textfield tf_rmid中獲取WHERE的值。一切順利,沒有錯誤,但一旦我插入rm_id並點擊按鈕btgetinv它說123這是我的rm_id超出範圍不能理解錯誤在哪裏,是什麼問題。如何將數據庫中的值設置爲文本字段

回答

1

問題是與下面的語句:

int i = Integer.parseInt(rs.getString("box_no")); 
tfbrname.setText(rs.getString(i)); 

第一條語句將無法正常工作,你所希望的方式因爲select子句中沒有名爲「box_no」的列。它會拋出一個異常。假設您將代碼更改爲在select子句中使用box_no。然後,第二條語句將嘗試檢索第n列,其中列是box_no的值。我想你只是想:

tfbrname.setText(rs.getString("box_no")); 

再說一次,只有你的SELECT語句在字段列表中包含box_no時,上述內容纔會起作用。

+0

男人你真棒謝謝你soo真的很有幫助:-) –

1

rs.next()如果它不包含任何更多記錄,則返回false。所以如果你想在沒有記錄的情況下表現一些事情,你必須檢查記錄數量。

例如,

int recordCount = 0; 
while (rs.next()) { 
    recordCount++; 
    int i = Integer.parseInt(rs.getString("box_no")); 
    tfbrname.setText(rs.getString(i)); 
} 
if(recordCount == 0) { 
    // do something : report an error or log 
} 

瞭解更多信息,請參閱http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#next()

相關問題