のようなクエリがあるとしますSELECT * FROM my_table where name = 'Debbie O'Brian'
。ご存知かもしれませんが、SQL Server では、'
一重引用符を無視するために別のものを配置する必要があります。これが私が自動的にやりたいことです。
簡単に言えば、すべての出現箇所を 2 つの囲みの間'
で置き換える必要があります。これが私がこれまでに持っているものです:''
'
String text = "SELECT * FROM my_table where name = 'Debbie O'Brian'";
String[] splitArray = text.split(" '");
for (int i = 0; i < splitArray.length; i++) {
String str = splitArray[i];
if (str.endsWith("'"))
str = str + " ";
// replace all single quotes
str = str.replace("'", "''");
// revert last replacement
str = str.replace("'' ", "' ");
splitArray[i] = str;
}
StringBuilder builder = new StringBuilder();
for (int i = 0; i < splitArray.length; i++) {
builder.append(splitArray[i]).append(" '");
}
System.out.println(builder.substring(0, builder.length() - 2).toString());
問題は、開始前に空白の存在に依存していることです'
。私の質問は、この前提条件なしでこれを行うにはどうすればよいかということです。どんな助けでも(アルゴリズムの提案でも)大歓迎です。クエリには単一引用符で囲まれた文字列が複数ある場合があることに注意してください。
編集: Hibernate を使用してネイティブ SQL を実行し、SQL クエリ全体を入力として取得しています。