0

テキストを MySql データベースに更新しようとしています。テキストには " マークが含まれています。例として、文字列は Hello "world" である可能性があり、挿入コマンドを記述すると、次のようになります。

insert into mytable ('mystring') values("Hello "world");

このようなコマンドを実行するためにJavaを使用しています。明らかに、ワールド文字列の二重引用符が原因でエラーが発生します。Javaに置き換えてみました givenString.replaceAll("\"", "\\""); givenString.replace(Pattern.quote("\""), "\\"");

しかし、何も機能しません。どんな助けでも大歓迎です!

4

2 に答える 2

5

\次のようにダブルエスケープします。

givenString.replaceAll("\"", "\\\"");

コメントで Ted Hopp が述べているように、テーブルにデータを挿入するには、パラメーターを使用してユーザーが準備したステートメントを使用し、使用している API に従ってそれらを設定する必要があります。たとえば、JDBC を使用している場合setStringは、オブジェクトのメソッドを使用できStatementます。

String str = "Hello \"world";
PreparedStatement stmt = con.prepareStatement(
      "insert into mytable('column') values(?)");
stmt.setString(1, str);

最初のコメントについて:

Java では文字列は不変であるためreplaceAll、内容が必要な置換を含む文字列である新しいインスタンスを返します。したがって、次のように、結果を前の変数に再度代入する必要があります。

public String getSqlLikeString(String givenString) {
   System.out.println(givenString); 
   givenString = givenString.replaceAll("\"", "\\\""); 
   System.out.println(givenString); 
   return givenString;
}

// or just
public String getSqlLikeString(String givenString) {
   return givenString.replaceAll("\"", "\\\"");
}
于 2012-10-18T18:20:20.017 に答える
0

次のようなことを試してください:

    String s = "hello \"world\"";
    System.out.println(s);
    System.out.println(s.replace("\"", "\\\""));
于 2012-10-18T18:21:11.280 に答える