当前位置:Gxlcms > 数据库问题 > sqlserver 分页模糊查询

sqlserver 分页模糊查询

时间:2021-07-01 10:21:17 帮助过:36人阅读


问题: 在sqlserver 进行模糊查询,出现问题

  1. <strong>最初使用“concat”,进行拼串操作,如下所示:</strong><br>
  2. <<span style="color: #0000ff;">select</span> id = <span style="color: #800000;">"</span><span style="color: #800000;">queryCount</span><span style="color: #800000;">"</span> resultType=<span style="color: #800000;">"</span><span style="color: #800000;">int</span><span style="color: #800000;">"</span> >
  3. <span style="color: #0000ff;">select</span> count(*<span style="color: #000000;">)
  4. </span><span style="color: #0000ff;">from</span><span style="color: #000000;"> t_user
  5. </span><<span style="color: #0000ff;">where</span>>
  6. <<span style="color: #0000ff;">if</span> test = <span style="color: #800000;">"</span><span style="color: #800000;">queryText!= null</span><span style="color: #800000;">"</span>> loginacct like concat(<span style="color: #800000;">"</span><span style="color: #800000;">%</span><span style="color: #800000;">"</span>, #{queryText}, <span style="color: #800000;">"</span><span style="color: #800000;">%) </if></span>
  7. </<span style="color: #0000ff;">where</span>>
  8. </<span style="color: #0000ff;">select</span>>

运行结果concat” 是不是可以识别的函数,不是内置函数

查询结果: “concat”方法进行拼串,只适用于mysql 和 oracle, 不适用于sqlserver,这个函数是用来连接字符串,                            sqlserver中没有,可以使用 + 连接符号搞定

解决方案:使用传统的拼串操作,“like”操作尝试:

  1. <strong><span style="color: #000000;"><span style="font-size: 16px;">尝试一: 使用<span style="color: #ff0000;">占位符(#{})</span></span><br></span></strong><<span style="color: #0000ff;">select</span> id = <span style="color: #800000;">"</span><span style="color: #800000;">queryCount</span><span style="color: #800000;">"</span> resultType=<span style="color: #800000;">"</span><span style="color: #800000;">int</span><span style="color: #800000;">"</span> >
  2. <span style="color: #0000ff;">select</span> count(*<span style="color: #000000;">)
  3. </span><span style="color: #0000ff;">from</span><span style="color: #000000;"> t_user
  4. </span><<span style="color: #0000ff;">where</span>>
  5. <<span style="color: #0000ff;">if</span> test = <span style="color: #800000;">"</span><span style="color: #800000;">queryText!= null</span><span style="color: #800000;">"</span>> loginacct like <span style="color: #800000;">‘</span><span style="color: #800000;">%#{queryText}%</span><span style="color: #800000;">‘</span> </<span style="color: #0000ff;">if</span>>
  6. </<span style="color: #0000ff;">where</span>>
  7. </<span style="color: #0000ff;">select</span>><br><br><span style="font-size: 16px;"><strong>运行结果:</strong></span><em id="__mceDel"><strong><br></strong></em>Preparing: select count(*) from t_user WHERE loginacct like ‘%?%‘ <em id="__mceDel"><strong><br></strong></em>

  com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围。

  查询结果:在使用占位符进行模糊查询时不能把问号放在引号里面,问号的位置必须跟字段名同级;(不理解

  解决方案:like ‘%‘ + #{quertText} + ‘%’(成功运行)

  1. <select id = "queryCount" resultType="int" ><br> select count(*)<br> from t_user<br> <where><br> <if test = "queryText!= null"> loginacct like ‘%‘ + #{queryText}+ ‘%‘ </if><br> </where><br></select>

 

  1. <span style="color: #000000;"><strong><span style="font-size: 16px;">尝试二:</span></strong> 使用<span style="color: #ff0000;">EL表达式</span>(成功运行)
  2. </span><<span style="color: #0000ff;">select</span> id = <span style="color: #800000;">"</span><span style="color: #800000;">queryCount</span><span style="color: #800000;">"</span> resultType=<span style="color: #800000;">"</span><span style="color: #800000;">int</span><span style="color: #800000;">"</span> >
  3. <span style="color: #0000ff;">select</span> count(*<span style="color: #000000;">)
  4. </span><span style="color: #0000ff;">from</span><span style="color: #000000;"> t_user
  5. </span><<span style="color: #0000ff;">where</span>>
  6. <<span style="color: #0000ff;">if</span> test = <span style="color: #800000;">"</span><span style="color: #800000;">queryText!= null</span><span style="color: #800000;">"</span>> loginacct like <span style="color: #800000;">‘</span><span style="color: #800000;">%${queryText}%</span><span style="color: #800000;">‘</span> </<span style="color: #0000ff;">if</span>>
  7. </<span style="color: #0000ff;">where</span>>
  8. </<span style="color: #0000ff;">select</span>><br><strong><span style="font-size: 16px;">存在问题:</span></strong><span style="font-size: 16px;"><span style="font-size: 14px;"><span style="font-size: 13px;"><span style="color: #ff0000;">使用 ${}无法防止sql注入</span> </span>  </span></span>

 

  结论:sqlserver 模糊查询中, 优先使用 like ‘%‘ + #{quertText} + ‘%’进行操作

 

sqlserver 分页模糊查询例码:(供自己忘记后查看)

  1. <<span style="color: #0000ff;">select</span> id = <span style="color: #800000;">"</span><span style="color: #800000;">queryList</span><span style="color: #800000;">"</span> resultType=<span style="color: #800000;">"</span><span style="color: #800000;">T_user</span><span style="color: #800000;">"</span>>
  2. <span style="color: #0000ff;">select</span> top ${pagesize}*
  3. <span style="color: #0000ff;">from</span><span style="color: #000000;"> t_user
  4. </span><<span style="color: #0000ff;">where</span>>
  5. <<span style="color: #0000ff;">if</span> test = <span style="color: #800000;">"</span><span style="color: #800000;">queryText!=null</span><span style="color: #800000;">"</span>>loginacct like <span style="color: #800000;">‘</span><span style="color: #800000;">%</span><span style="color: #800000;">‘</span> + #{queryText}+ <span style="color: #800000;">‘</span><span style="color: #800000;">%</span><span style="color: #800000;">‘</span><span style="color: #000000;">
  6. and id not </span><span style="color: #0000ff;">in</span><span style="color: #000000;">
  7. (</span><span style="color: #0000ff;">select</span> top ${startIndex} id <span style="color: #0000ff;">from</span><span style="color: #000000;"> t_user order by id)
  8. order by id
  9. </span></<span style="color: #0000ff;">if</span>>
  10. </<span style="color: #0000ff;">where</span>>
  11. <<span style="color: #0000ff;">where</span>>
  12. <<span style="color: #0000ff;">if</span> test = <span style="color: #800000;">"</span><span style="color: #800000;">queryText==null</span><span style="color: #800000;">"</span>><span style="color: #000000;">
  13. id not </span><span style="color: #0000ff;">in</span><span style="color: #000000;">
  14. (</span><span style="color: #0000ff;">select</span> top ${startIndex} id <span style="color: #0000ff;">from</span><span style="color: #000000;"> t_user order by id)
  15. order by id
  16. </span></<span style="color: #0000ff;">if</span>>
  17. </<span style="color: #0000ff;">where</span>>
  18. </<span style="color: #0000ff;">select</span>><br><br><span style="font-size: 18px;"><strong>注意事项: 单个或者是多个条件查询,都是只有一个“where” 条件之间使用 “and” 连接</strong></span>

 

sqlserver 分页模糊查询

标签:cep   方法   user   函数   内置函数   字段名   oracle   查询   where   

人气教程排行