如何将数据库中的值设置为文本字段

时间:2012-12-30 22:00:38

标签: java

 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超出范围不能理解错误在哪里以及问题是什么。

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分: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时,上述内容才有效。