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 をクリックすると、rm_id が範囲外である 123 と表示され、エラーがどこにあり、何が問題なのか理解できません。

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 を含めるとします。次に、2 番目のステートメントは、列が box_no の値である n 番目の列を取得しようとします。私はあなたがただ欲しいと思う:

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

繰り返しますが、上記は、SELECT ステートメントのフィールド リストに box_no が含まれている場合にのみ機能します。

于 2012-12-30T22:40:13.463 に答える