NamedParameterJdbcTemplate Oracle SQL,如何在命名查询中转义单引号?
NamedParameterJdbcTemplate Oracle SQL, how to escape single quote in named query?
我有以下代码,我似乎无法弄清楚如何转义命名参数周围的单引号。在生成的查询中,我需要在它的两边加上单引号:
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) -> {...
...
我试过像 stringBuilder.append("'':applicationId''");
一样在 name 参数周围加上双单引号,但没有用。根据我在 SO 上看到的其他答案,我尝试了单引号和许多其他此类单引号和双引号的组合。好像看不懂。
原来我的问题根本不是 Alex Poole 所建议的单引号(谢谢 Alex)。我的 Java 字符串需要转换为 Oracle 类型 CHAR(17)。在我这样做之后,不需要单引号或双引号,并且我的命名参数正确解析并且查询有效。
我有以下代码,我似乎无法弄清楚如何转义命名参数周围的单引号。在生成的查询中,我需要在它的两边加上单引号:
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) -> {...
...
我试过像 stringBuilder.append("'':applicationId''");
一样在 name 参数周围加上双单引号,但没有用。根据我在 SO 上看到的其他答案,我尝试了单引号和许多其他此类单引号和双引号的组合。好像看不懂。
原来我的问题根本不是 Alex Poole 所建议的单引号(谢谢 Alex)。我的 Java 字符串需要转换为 Oracle 类型 CHAR(17)。在我这样做之后,不需要单引号或双引号,并且我的命名参数正确解析并且查询有效。