模糊查询-注意事项

2023-05-16

1.动态查询语句

2.SQL中占位符不能在单引号中,否则,会以?进行查询数据

'%#{param}%'

'%?%'

3.SQL中不能使用加号进行字符串拼接,加号是用来做运算的

'%'+'D'+'%'

4.MyBatis进行拼串,拼串会出现  SQL 注入情况 ,例如:“or 1=1”

'%${param}%'

5.使用内置方法进行拼串

concat('%',#{param},'%')

6.查询条件值本身为%,查询出所有的数据

concat('%',#{param},'%') => '%%%'

 '%\%%'  使用转译字符再进行查询。

7.#和\是一个意思,表示转译。使用#代替\

select * from t_user where username like '%#%%' escape '#'

select * from t_user where loginacct like '%@%%' escape '@'

SELECT * FROM t_user WHERE loginacct LIKE concat('%','@%','%') ESCAPE '@'

 

8.常见的SQL文,在Oracle中,使用两个竖线用来表示字符串拼接,MySQL中没有这样的语法。

select * from t_user where username like '%'|| #{param} ||'%'

 

  • SQL参数问题

    <select id="queryCount" resultType="int">

        select count(*) from t_user

        <where>

                <if test="queryText!=null">

                loginacct like '%#{queryText}%'

                </if>

        </where>

    </select>

 

    <select id="pageQuery" resultType="User">

        select * from t_user

         <where>

                <if test="queryText!=null">

                loginacct like '%#{queryText}%'

                </if>

        </where>

        limit #{start}, #{size}

    </select>

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

  • 有3个参数,但是只是指定了2个.
  • Select * from t_user where loginacct like '%#{loginacct}%' limit?,?
  • select * from t_user           WHERE loginacct like '%?%'          limit ?, ?

org.springframework.dao.TransientDataAccessResourceException:

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

### The error may exist in URL [jar:file:/F:/atcrowdfunding/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/atcrowdfunding-main/WEB-INF/lib/atcrowdfunding-user-0.0.1-SNAPSHOT.jar!/mybatis/mapper-user.xml]

### The error may involve defaultParameterMap

### The error occurred while setting parameters

### SQL: select * from t_user           WHERE loginacct like '%?%'          limit ?, ?

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

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

  • SQL注入问题 :

Id = 100 OR 1=1

SELECT * FROM t_user WHERE id= ${id}

SELECT * FROM t_user WHERE id=  100 OR 1=1

 

在特定场合可以使用${}:

例如:

  • Create table ${tableName} …      //表名称位置不能使用?占位符,所以也就不能使用#{}
  • Order by ${fieldName} asc   //对字段进行排序,可以 传递动态字段名称.

    <select id="queryCount" resultType="int">

        select count(*) from t_user

        <where>

                <if test="queryText!=null">

                loginacct like '%${queryText}%'

                </if>

        </where>

    </select>

 

    <select id="pageQuery" resultType="User">

        select * from t_user

         <where>

                <if test="queryText!=null">

                loginacct like '%${queryText}%'

                </if>

        </where>

        limit #{start}, #{size}

    </select>

  • SQL拼接问题
    • 不能使用加号拼接

  • 使用concat()函数拼接字符串

    <select id="queryCount" resultType="int">

        select count(*) from t_user

        <where>

                <if test="queryText!=null">

                loginacct like concat('%',#{queryText},'%')

                </if>

        </where>

    </select>

 

    <select id="pageQuery" resultType="User">

        select * from t_user

         <where>

                <if test="queryText!=null">

                loginacct like concat('%',#{queryText},'%')

                </if>

        </where>

        limit #{start}, #{size}

    </select>

  • 查询关键字为% 和 \
    • 查询关键字为%将数据都查询出来了,不安全.
    • 对查询的特殊符号进行转译.

  • 解决:
    • Java中转译

String queryText = "%";

if(StringUtil.isNotEmpty(queryText)){

 //斜线本身需要转译,regex中两个\\表示一个\ ; Java中也是两个\\表示一个\;所以,需要四个斜线

queryText = queryText.replaceAll("%", "\\\\%");

System.out.println("--------------"+queryText);                        

}

  • SQL语句中转译
    • 对特殊符号进行转译;斜杠本身也属于特殊符号,需要转译.

select * from t_user where loginacct like '%\\%%'

  • 注意:
    • 尽量在保存数据时,验证数据的合法性,尽量避免存在的字符串中含有特殊符号.
    • 但是,有时无法避免,则需要进行特殊处理:

例如:

"<<合同编号[101]文件>>"

"D:\\atguigu"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模糊查询-注意事项 的相关文章

  • 模糊查询

    lt select id 61 34 findByUserIdMonthAttend 34 resultMap 61 34 BaseResultMap 34 gt SELECT lt include refid 61 34 Base Col
  • Activity onNewIntent注意事项

    数据上报发现 xff0c onNewIntent 以后 xff0c onResume和onPause可能不会执行 xff0c 直接执行onStop
  • 模糊查询-注意事项

    1 动态查询语句 2 SQL中占位符不能在单引号中 xff0c 否则 xff0c 会以 进行查询数据 39 param 39 39 39 3 SQL中不能使用加号进行字符串拼接 xff0c 加号是用来做运算的 39 39 43 39 D 3
  • 接入腾讯应用宝(YSDK)注意事项

    接入腾讯ysdk只想说 xff0c 其文档写的真是差 xff01 很多东西摸不着头尾 xff0c 在这期间走了很多坑 第一个 xff1a 拉起手Q时 xff0c 出现100044画面错误 造成这个的因素有很多 xff1a 1 xff0c 未
  • Python if else语句用法规范(注意事项)

    在使用 if elif else 条件语句时 xff0c 需要初学者根据实际应用场景 xff0c 自行设计表达式和代码块 xff0c 而在这两部分中 xff0c 有些细节需要初学者注意 1 代码块不要忘记缩进 代码块一定要缩进 xff0c
  • 数据库学习 - like(模糊查询)

    模糊查询问题 比如查询姓张的同学 xff0c 查询张某某等这类型问题 xff0c 在 select语句中通过查询条件中加入运算符 like 来表示 xff1b 含有 like运算符的表达式 列名 not like 字符串 xff08 表示其
  • 【csv】csv文件入Oracle的注意事项

    注意点 xff1a wps打开csv文件 xff0c 如果超过104 85万 xff0c 会出现数据丢失情况 xff0c 看到的和最终存在的皆只有104 85万 解决方案 xff1a 如果文件过大 xff0c 不要打开 xff0c 不要打开
  • JAVA继承-注意事项

    JAVA继承 1 子类所有构造器 xff0c 会隐式调用父类的无参构造器 原理 xff1a 子类所有构造器 xff0c 都会在第一行隐式调用super 问题 xff1a 如果父类没有无参构造器 xff0c 编译报错 解决 xff1a 在子类
  • CMake注意事项

    今天被target link libraries找不到库文件的问题给郁闷了好久 xff0c 后来才发现target link libraries第二个参数 xff08 即需要连接的库 xff09 居然一定要lib作为开头 xff0c 才能在
  • 分页 + 模糊查询 有坑!

    前言 不知道你有没有使用过Mysql的like语句 xff0c 进行模糊查询 xff1f 不知道你有没有将查询结果 xff0c 进行分页处理 xff1f 模糊查询 xff0c 加上分页处理 xff0c 会有意想不到的坑 xff0c 不信我们
  • jeecg boot笔记(一)-使用模糊查询

    1 引入 JInput import JInput from components jeecg JInput vue 2 使用
  • iOS 299美元企业账号申请流程及注意事项

    iOS开发者众多 但并不是所有的开发者都对账号申请 证书配置这些问题都清楚 毕竟不是所有开发者都能够经历这个环节 多数情况下是进公司之前这些东西都已经有了 作为一个合格的iOS开发者 我们必须要了解苹果的三种开发者账号 下图对三者进行了比较
  • Tomcat出现404的解决方法[类型 状态报告 消息 请求的资源[/]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源]

    解决idea的web项目tomcat启动后无法加载index jsp文件 404 问题 使用servlet是正常的 可以用以下解决方式 打开项目设置Project Structure 点击进入Project Settings下的Facets
  • Linux--文件压缩、解压命令

    1 tar 打包或者解包 tar cvf xxx tar 打包好 的名字 需要打包的所有文件名 2 gzip 压缩或者解压 压缩 gzip 打包的名字 例如 gzip mytar tar 解压 gzip d xxx tar gz 例如 gz
  • elasticsearch 模糊查询

    1 使用关键字wildcard 2 它使用标准的 shell 通配符查询 匹配任意字符 匹配 0 或多个字符 GET cars transactions search pretty query wildcard city value ia
  • Linux--编译链接(过程、原理、执行、多个文件)

    1 编译链接四个步骤 1 预编译 gcc E main c o main i 2 编译 gcc S main i o main s 3 汇编 gcc c main s o main o 4 链接 gcc main o o main 执行 m
  • Linux--文件内容查看命令

    目录 1 查看文件内容 1 cat 2 more 5 tail 2 合并文件 3 向文件中写入数据 1 查看文件内容 1 cat 2 more more 文件名 空格 回车 3 less less 文件名 看完内容之后不会显示到屏幕上 相当
  • 【Matlab学习笔记】matlab的编程规则

    1 Matlab的续行符 关于matab的换行 在matlab代码的编写过程中 有时会遇到代码在一行显示不开了 或者在txt文档 或其他代码编辑后 由于其本身格式的作用 代码可能会自动换行 将这样的代码直接粘贴到matlab的命令窗口运行
  • Linux--vim安装、简介、模式及命令

    目录 1 vim简介 1 命令模式转为插入模式 2 命令模式转为末行模式 3 转换图 4 vim常用命令 复制 删除 1 删除 2 拷贝 3 粘贴 4 撤销 5 恢复撤销 6 替换 7 光标移动 1 行开头 2 行末尾 3 最后一行 4 第
  • 标识符和关键字应该如何理解?

    思考 为什么语言中需要关键字和表示符 程序来源于生活 想想我们人类在生产生活过程中的一些语言使用都有其特定的含义 而每个事物或者事物的一些属性功能也都需要给予特定的语言符号来表示 故java语言的发明者们按照人类的方式创造除了一门值得大家学

随机推荐