2

データベースにクエリを実行する次のコードがあります。ただし、while ループ内のコードは実行されません。メッセージボックスはありません。実行されません! 誰でも私を助けることができます!結果セットが空ではありません! try catch ブロックから同じ値を出力すると、それが実行され、正しい値が出力されます。DB 接続は、標準の MySQL DB 接続クラスです。

database = new DBConnection();

    String dept = txtSearch.getText();
    String Query = "SELECT * FROM department where dept_name= '" + dept + "'";

    ResultSet set = database.queryDatabase(Query);

    try {
        if (set.next() == false) {
            JOptionPane.showMessageDialog(null, "No Matchs found for the search query! Try Again.", "Search Error", JOptionPane.ERROR_MESSAGE);
        } else {
            while (set.next()) {
                System.out.print(set.getString("dept_name"));
                txtName.setText(set.getString("dept_name"));
                txtDes.setText(set.getString("dept_desc"));
            }
        }
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, ex.getMessage(), ex.getCause().toString(), JOptionPane.ERROR_MESSAGE);
    }
4

1 に答える 1

4

ここで行のデータを呼び出しset.next()てから無視することにより、クエリの最初の行を破棄しています。

    if (set.next() == false) {  // ***** here on this line
        JOptionPane.showMessageDialog(null, "No Matchs found for the search query! 
            Try Again.", "Search Error", JOptionPane.ERROR_MESSAGE);
    } else {
        while (set.next()) {
            System.out.print(set.getString("dept_name"));
            txtName.setText(set.getString("dept_name"));
            txtDes.setText(set.getString("dept_desc"));
        }
    }

代わりに、呼び出すたびに ResultSet から情報を抽出してnext()true を返すようにしてください。

代わりに次のようなことができます。

int setCount = 0;
while (set.next()) {
  setCount++;
  System.out.print(set.getString("dept_name"));
  txtName.setText(set.getString("dept_name"));
  txtDes.setText(set.getString("dept_desc"));
}
if (setCount == 0) {
  // show a warning to the user that the result set was empty
}
于 2013-04-28T04:07:39.027 に答える