2012-12-30 52 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()

相关问题