0
私は以下のコードを持っています。名前付きパラメータの周りに単一引用符をエスケープする方法がわかりません。結果のクエリでは、私はそれのいずれかの側に単一引用符を持っている必要があります:私は動作しませんでしたstringBuilder.append("'':applicationId''");
のようにnameパラメータを二重引用符を入れて試してみたNamedParameterJdbcTemplate Oracle SQLでは、名前付き問合せでシングルクォートをエスケープする方法は?
public List<Vehicle> findByApplicationId(String applicationId) {
// example application id is a string like 12345
MapSqlParameterSource sqlParameterSource = new MapSqlParameterSource();
sqlParameterSource.addValue("applicationId", applicationId);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("SELECT make, model");
stringBuilder.append(" FROM vehicle");
stringBuilder.append(" WHERE model IN (SELECT id FROM auto WHERE model_app IN (");
stringBuilder.append(":applicationId");
stringBuilder.append("))");
// in the resulting query the applicationId must appear
// as '12345', meaning with single quotes around it
return jdbcTemplate.query(stringBuilder.toString(), sqlParameterSource,
// lambda used as row mapper
(resultSet, rowNumber) -> {...
...
。私はSOで見た他の答えに基づいて、一重引用符と一重引用符と二重引用符の他の多くの組み合わせを試しました。それを得るように見えない。
値を文字列としてバインドする場合は、一重引用符は必要ありません。 –
@AlexPoole私は引用符なしで試してみました。名前付きパラメータはデバッグログを介して結果のクエリを見ると解決されますが、データを取得することはありませんが、SQLクライアントでは同じクエリをプルデータに入れます。だから私は何かがクエリで正しく送信されていないことを示します。あなたは小さな事例の意味をお見せしますか?私は引用符の異なる組み合わせで、指定されたパラメータと整数を作成しようとしました。解決されることもありますが、間違った数の引用符では、クエリが悪いSQL文法とみなされることもあります。 –
一重引用符は答えではありません。リテラル文字列値 '':applicationId'に対しては暗黙のうちにバインド変数として扱われず、実際の値12345は使用されません。おそらく、探しているデータを、それを見ることができ、コミットしていないSQLクライアントに挿入しましたか?ちょっとした考え。それ以外の場合は、列のデータ型は何ですか? –