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超出范围不能理解错误在哪里以及问题是什么。
答案 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时,上述内容才有效。