6

person_detailsとを含むMySql テーブルがp_idありますp_name。ここで、p_name に一重引用符が含まれるレコードを挿入する場合は、次の'ように実行します。

insert into person_details values (1, 'D\'souza');

今、私はこの方法でJavaコードを介して同じことを実行しようとしています-

insert into person_details values (1, 'D\\\'souza');

MySQLSyntaxErrorExceptionが発生します。

何か間違っていますか?

4

4 に答える 4

11

質問に直接答えるには、引用符を二重にします。

insert into person_details values (1, 'D''souza');

しかし、私はむしろを使用してクエリをパラメータ化しましたPreparedStatement

プロは次のとおりです。

  • SQL インジェクションを避ける
  • 一重引用符を使用する必要はありません。

例、

String str = "insert into person_details values (?, ?)";
query = con.prepareStatement(str);
query.setInt(1, 1);
query.setString(2, "D'souza");
query.executeUpdate();
于 2013-03-04T09:50:24.417 に答える
4

MySQL では、文字列内で''単一の forを使用します。'

insert into person_details values (1, 'D''souza');

ドキュメントへのリンク

ただし、これは、制御するデータをテーブルに事前入力する SQL スクリプトなど、文字通りデータを提供する場合に限られます。外部ソース (エンド ユーザーなど) からその文字列を受け取る場合は、または外部システム) の場合、おそらくリテラルを記述するのではなく、文字列変数を使用することになります。その場合、準備済みステートメントをJW として使用する必要があります。彼の答えで説明します。理由: http://xkcd.com/327/

于 2013-03-04T09:47:19.180 に答える
2

使用することもできます"

insert into person_details values (1, "D'souza");
于 2013-03-04T09:49:53.023 に答える
2

PreparedStatementsを使用しない理由

また、SQL インジェクションにも対応します。

于 2013-03-04T09:50:58.270 に答える