1

PreparedStatement を使用して Java アプリケーションで MySQL データベースの複数の列データを更新したいのですが、その方法がわかりませんでした。

更新用のコード クエリは次のとおりです。

String s = "UPDATE items SET name =" + u.getName() + ",category="
                + u.getCategory() + ", price=" + u.getPrice()
                + "   ,qunatity=" + u.getQuantity() + " WHERE id = '"
                + u.getId() + "'; ";
4

2 に答える 2

58

いいえ、いいえ、いいえ、いいえ!

文字列を連結して SQL ステートメントを作成しないでください。私たちはずっと前にこれを乗り越えたと思っていました。これは非常に悪い習慣であり、エラーを作成してアプリケーションに巨大なセキュリティ ホールを作る非常に良い方法です。文字列を連結して SQL ステートメントを作成することは、災害の元凶であり、定着する前に根絶する必要のある悪い習慣です。

準備されたステートメントを使用してください- 長い目で見れば、多くの手間を省くことができます。

たとえば、あなたが書いたものをこれと比較してください:

PreparedStatement update = connection.prepareStatement
    ("UPDATE items SET name = ?, category = ?, price = ?, quantity = ? WHERE id = ?");

update.setString(1, u.getName());
update.setString(2, u.getCategory());
...
update.setInt(5, u.getId());

update.executeUpdate();

確かに、少し冗長ですが、はるかに読みやすく、エラーが発生しにくくなっています。言うまでもなく、JDBC は、SQL インジェクションを可能にする厄介な引用の問題を処理します。

于 2012-08-19T09:51:53.897 に答える
1

文字列値を囲む引用符がありません。

SET name = '" + u.getName() + "', ...
           ^ ^

また、タイプミスがあります。qunatityおそらくあるはずquantityです。

また、パラメーター化されたクエリを確認することをお勧めします。現在のコードには、SQL インジェクションのリスクがあります。

于 2012-08-19T09:46:34.453 に答える