【问题标题】:java.sql.SQLException: Operand should contain 1 column(s) - Springjava.sql.SQLException:操作数应包含 1 列 - Spring
【发布时间】:2016-07-13 06:15:32
【问题描述】:

为什么我从下面的代码中得到这个异常?

List<String> getId=jdbcTemplate.queryForList("select Id from MYTable", String.class);
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("sName", "AC");
parameters.addValue("ids", getId);
List<MypojoClass> result = new ArrayList<>();
String query ="select CTime,HTime from MYTable where Type=:sName and Id in((:ids)) and CTime > CONVERT_TZ(date_format(now() - interval 1 month,'%Y-%m-01 00:00:01'),'+00:00', '-05:30');";
result = namedParameterJdbcTemplate.query(query, parameters, ParameterizedBeanPropertyRowMapper.newInstance(MypojoClass.class));

例外:

 org.springframework.jdbc.BadSqlGrammarException) org.springframework.jdbc.BadSqlGrammarException: 
    PreparedStatementCallback; bad SQL grammar [
    select CTime,HTime from MYTable where Type=? and Id in((?, ?, ?, ?, ?)) and CTime > CONVERT_TZ(date_format(now() - interval 1 month,'%Y-%m-01 00:00:01'),'+00:00', '-05:30');]; nested exception is java.sql.SQLException: Operand should contain 1 column(s)

【问题讨论】:

    标签: mysql spring jdbc


    【解决方案1】:

    删除IN中多余的括号

    SELECT
        CTime,
        HTime
    FROM
        MYTable
    WHERE
        Type =?
    AND Id IN (?, ?, ?, ?, ?)
    AND CTime > CONVERT_TZ(date_format(now() - INTERVAL 1 MONTH,'%Y-%m-01 00:00:01' ),'+00:00','-05:30');
    

    注意:

    SELECT '1' IN ('2','1','3'); Result: 1(TRUE)See demo

    SELECT '1' IN (('2','1','3')); Result: [Err] 1241 - Operand should contain 1 column(s)See demo

    SELECT ('2','1','3') IN (('2','1','3')); Result: 1(TRUE)See demo

    【讨论】:

      猜你喜欢
      • 2018-01-16
      • 2019-08-16
      • 1970-01-01
      • 2023-03-29
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多