0

ms アクセスでテーブルを作成しました。MS-access で ID のデータ型を Auto Number に設定しました。レコードを更新しようとするとJavaで。netBeans IDE で「条件式のデータ型が一致しません」というエラーが表示されます。しかし、まだ表にないID番号を変更すると、うまくいきます。コードは以下です。

String sql = "Update table1 set price ='" + txtPrice.getText() + "', quantity='" + txtQuantity.getText() + "', description='" + txtDescription.getText() + "' where id= " + txtid.getText() + "";
        try {
             pst = conn.prepareStatement(sql);
            pst.executeUpdate();
            JOptionPane.showMessageDialog(null, "Updated");
            UpdateJTable();
        } catch (Exception e) {

            JOptionPane.showMessageDialog(null, e);
        }
4

4 に答える 4

1

通常の Statement と PreparedStatement オブジェクトも混同していると思います。PreparedStatement を使用すると、プレースホルダー (SQL ステートメントの多くで見られる ? ) を使用して、PreparedStatement にもう少し作業を任せることができます。

次のようにSQL文を書いてみてください:

update table1 set price = ?, quantity = ?, description = ? where id = ?

次に、PreparedStatement オブジェクトを使用して、次のようにします。

pStmt.setInteger(1, Integer.valueOf(txtPrice.getText())

パラメータごとに。PreparedStatement を直接使ってから数年経ちますが、メモリの都合上、パラメータは 1 ベースです。

しかし、あなたの基本的な問題はキャスティングの 1 つです。また、これに PreparedStatement を使用すると、コードがよりクリーン (およびより安全) になる場合があります。

于 2012-06-03T14:30:29.277 に答える
0

priceおよび列は整数であると想定しているquantityため、それらを引用する必要はありません。

次の SQL を試してください。

String sql = "Update table1 set price =" + txtPrice.getText() + ",
              quantity=" + txtQuantity.getText() + ", description='" +
              txtDescription.getText() + "' where id= " + txtid.getText() + "";

価格と数量に一重引用符がないことに注意してください

于 2012-06-03T05:43:44.397 に答える
0

最初に id フィールドで型キャストを使用してみてください。お気に入り:

int id = Integer.parseInt(txtid.getText());

次に、クエリを実行します。

String sql = "Update table1 set price ='" + txtPrice.getText() + "', quantity='" +
              txtQuantity.getText() + "', description='" + txtDescription.getText() + "' 
              where id= " + id + "";
于 2012-06-03T05:48:25.797 に答える
0

取得しているパラメーターが少なすぎるというエラーについては、クエリのフィールド名を再確認してください。

于 2012-06-03T16:57:00.583 に答える