zoukankan      html  css  js  c++  java
  • Parameter index out of range (2 > number of parameters, which is 1)

    今天在实现一个功能时遇到一个问题,解决了很久。结果是#{}与${}使用错误的原因。但是具体原因还不是很清楚,写此篇总结,知道的可以交流。

    具体描述为:通过教师的头衔(1高级讲师2首席讲师)及名称进行模糊查询,报如下错误:

    org.springframework.dao.TransientDataAccessResourceException:

    ### Error querying database.  Cause: java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).

    ### The error may exist in file [E:javaEE+androidmoocworkspaceedu-mooc argetclassesmybatismappersadmin eacherTeacherMapper.xml]

    ### The error may involve com.edu.mooc.admin.mapper.TeacherMapper.quearyTeacherListBySolr-Inline

    ### The error occurred while setting parameters

    ### SQL: SELECT count(*) FROM EDU_TEACHER WHERE EDU_TEACHER.`STATUS` = 0 AND EDU_TEACHER.IS_STAR = ? AND EDU_TEACHER.`NAME` LIKE '%?%'

    ### Cause: java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).

    ; SQL []; Parameter index out of range (2 > number of parameters, which is 1).; nested exception is java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).

    参看一些网上解释:就是当设置参数时,没有相应的问号与之匹配(或者根本就没有?号).

    分析错误:

    Parameter index out of range (2 > number of parameters, which is 1).

    翻译为:找到了1个问号,却插入了2个值,导致参数越界(根据得到的信息打印将很容易判断数据是否与数据库字段匹配等小问题)。

    看看sql代码:

    SELECT

          <include refid="edu_teacher_columns"/>

          FROM EDU_TEACHER

          <where>

             EDU_TEACHER.`STATUS` = 0

             <if test="isStar > 0">

                AND EDU_TEACHER.IS_STAR = #{isStar}

             </if>

             <if test="keyWords != null and keyWords != '' ">

                AND EDU_TEACHER.`NAME` LIKE '%#{keyWords}%'

             </if>

             ORDER BY SORT DESC,CREATE_TIME ASC

          </where>

    将'%#{keyWords}%'修改为'%${keyWords}%'后结果正确

    日志信息输出结果为:

    ==>  Preparing: SELECT count(*) FROM EDU_TEACHER WHERE EDU_TEACHER.`STATUS` = 0 AND EDU_TEACHER.IS_STAR = ? AND EDU_TEACHER.`NAME` LIKE '%李%'

    ==> Parameters: 1(Integer)

    <==    Columns: count(*)

    <==        Row: 3

    <==      Total: 1

    ==>  Preparing: SELECT EDU_TEACHER.ID, EDU_TEACHER.NAME, EDU_TEACHER.EDUCATION, EDU_TEACHER.CAREER, EDU_TEACHER.IS_STAR, EDU_TEACHER.PIC_PATH, EDU_TEACHER.STATUS, EDU_TEACHER.CREATE_TIME, EDU_TEACHER.UPDATE_TIME, EDU_TEACHER.SUBJECT_ID, EDU_TEACHER.SORT FROM EDU_TEACHER WHERE EDU_TEACHER.`STATUS` = 0 AND EDU_TEACHER.IS_STAR = ? AND EDU_TEACHER.`NAME` LIKE '%李%' ORDER BY SORT DESC,CREATE_TIME ASC limit ?,?

    ==> Parameters: 1(Integer), 0(Integer), 10(Integer)

    <==    Columns: ID, NAME, EDUCATION, CAREER, IS_STAR, PIC_PATH, STATUS, CREATE_TIME, UPDATE_TIME, SUBJECT_ID, SORT

  • 相关阅读:
    mybatis 查询一对多子表只能查出一条数据
    Docker 查看容器里Log4写的日 志文 件里的日志
    MYSQL之union的使用
    【前端开发】常见好用的流程图框架
    【推荐】好网站推荐
    【前端工具】好用的数据库工具Navicat
    jQuery ajax
    thinkphp6.0封装数据库及缓存模型
    Unity 3D使用C#脚本实例
    Unity 3D简单使用C#脚本,脚本的执行顺序
  • 原文地址:https://www.cnblogs.com/hhwei/p/6185164.html
Copyright © 2011-2022 走看看