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 的数据库表中搜索值。我从我的文本字段 tf_rmid 中获取 WHERE 的值。一切都顺利进行,没有错误,但是一旦我插入 rm_id 并单击按钮 btgetinv 它说 123 这是我的 rm_id 超出范围无法理解错误在哪里以及问题出在哪里。

4

2 回答 2

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()

于 2012-12-30T22:15:57.863 回答
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 时,上述内容才有效。

于 2012-12-30T22:40:13.463 回答