0

すでにエントリが含まれているMySQLテーブルがあり、Javaプログラムに接続しているので、プログラムが実行されるたびにテーブル値が表示されます。基本的に、ユーザーが任意の属性の値を入力できる検索フィールドを実装しようとしています。その値に一致するすべてのエントリがテーブルに読み込まれます。次に、ユーザーは一致する適切なエントリを選択できるようになり、そのエントリの情報を編集または更新できます。これは、名前、名前、郵便番号など、同じ値のエントリがある場合に特に役立ちます。

try {
        String sql = "SELECT * FROM donors WHERE donor_id = ?";
        ps = conn.prepareStatement(sql);
        ps.setString(1, txtSearch1.getText());
        rs = ps.executeQuery();
        tblDonors.setModel(DbUtils.resultSetToTableModel(rs));
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    } 

    try {
        String sql = "SELECT * FROM donors WHERE first_name = ?";
        ps = conn.prepareStatement(sql);
        ps.setString(1, txtSearch1.getText());
        rs = ps.executeQuery();
        tblDonors.setModel(DbUtils.resultSetToTableModel(rs));
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }

検索フィールドは2番目のクエリのみを検索し、最初のクエリは検索しないため、名前を入力すると、一致する名前がテーブルに読み込まれますが、ID番号を入力しようとしても何も起こりません。私はこれにかなり慣れていませんが、結果セットオブジェクトと関係があると思いますか?しかし、正確にはわかりません。どんな助けでも素晴らしいでしょう。

4

1 に答える 1

1

ここで起こることは、2 番目の結果が最初の結果を上書きすることです。or最も簡単な解決策は、次のように where 句で使用することだと思います。

String sql = "SELECT * FROM donors WHERE (donor_id = ?) or (first_name = ?)";
ps.setString(1, txtSearch1.getText());
// but of course there are 2 ?'s now, we have to give the value to the second one
// as well
ps.setString(2, txtSearch1.getText());

JDBC でのプレースホルダーの動作方法により、それぞれに値を指定する必要があります?

于 2013-02-17T23:20:27.387 に答える