代码之家  ›  专栏  ›  技术社区  ›  Anonymous Human

NamedParameterJdbcTemplate Oracle SQL,如何在命名查询中转义单引号?

  •  0
  • Anonymous Human  · 技术社区  · 7 年前

            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) -> {...
        ...
    

    我试图在name参数周围加上双单引号,如中所示 stringBuilder.append("'':applicationId''"); ,这不起作用。我尝试了单引号和许多其他的单引号和双引号的组合,这些都是基于我所看到的其他答案。似乎无法得到它。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Anonymous Human    7 年前

    事实证明,我的问题根本不是Alex Poole(谢谢Alex)所说的单引号。我的Java字符串需要转换为Oracle类型CHAR(17)。在我这样做之后,不需要单引号或双引号,我的命名参数得到了正确的解析,查询工作正常。