今天要做一个关于模糊查询的需求,以前用JDBC做精确查询都是用 "SELECT * FROM test WHERE id = ?",所以用模糊查询时理所当然的也用了"SELECT * FROM test WHERE name = '%?%'",但是查询时一直提示java.sql.SQLException: Invalid parameter index 1.

Google一下原来ps不支持上面的写法,应该先用占位符表示 "SELECT * FROM test WHERE name = ?",然后在传参数的时候拼接ps.setString(1, "%"+参数+"%");

为了弄明白为什么PS不支持上面错误的表达方式,特意查看了一下源码(基于Jtds驱动,如下为简略代码),原来PS再解析SQL语句时,是先判断是否有 [ " ' 符号,如果有则把后面的字段都当做字符串处理,而后才判断占位符。

String[] parse(boolean extractTable) throws SQLException {
  switch (c) {
case '{':
escape();
isModified = true;
break;
case '[':
case '"':
case '\'':
copyString();
break;
case '?':
copyParam(null, d);
break;
case '/':
if (s+1 < len && in[s+1] == '*') {
skipMultiComments();
} else {
out[d++] = c; s++;
}
break;
case '-':
if (s+1 < len && in[s+1] == '-') {
skipSingleComments();
} else {
out[d++] = c; s++;
}
break;
default:
if (isSlowScan && Character.isLetter(c)) {
if (keyWord == null) {
keyWord = copyKeyWord();
if ("select".equals(keyWord)) {
isSelect = true;
}
isSlowScan = extractTable && isSelect;
break;
}
if (extractTable && isSelect) {
String sqlWord = copyKeyWord();
if ("from".equals(sqlWord)) {
// Ensure only first 'from' is processed
isSlowScan = false;
tableName = getTableName();
}
break;
}
} out[d++] = c; s++;
break;
}
}

JDBC之PreparedStatement模糊查询的更多相关文章

  1. Spring Jdbc使用like模糊查询

    public List<WfConfigMVO> queryList(WfConfigMVO wfConfig) throws SysException { StringBuffer sq ...

  2. Jmeter中JDBC Request和BeanShell PostProcessor的结合使用(SQL模糊查询)

    [前言] 今天记录一下Jmeter中JDBC Request和BeanShell PostProcessor的结合使用的方法(SQL模糊查询) [步骤] 1.下载对应数据库的驱动包到jmeter安装目 ...

  3. jdbc中如何实现模糊查询

    情况如何 再利用jdbc执行sql语句的时候,对于其他的句子的执行没什么太大的问题:加上占位符,然后设置占位符的值. 但是在模糊查询的时候,一直都写不对,这里提供了两种可选的解决办法,以供参考. 解决 ...

  4. 【Java框架型项目从入门到装逼】第十五节 - jdbc模糊查询实现(附带详细调试过程)

    上一节,我们实现了用户列表查询,已经按条件精确查询: if(student.getUsername() != null && !"".equals(student. ...

  5. JDBC_14_使用JDBC工具类实现模糊查询

    使用JDBC工具类实现模糊查询 代码: import java.sql.*; /** * 模糊查询 * 测试DBUtils */ public class JDBCTest09 { public st ...

  6. jdbc 12: 模糊查询

    jdbc连接mysql,进行模糊查询 package com.examples.jdbc.o11_模糊查询; import com.examples.jdbc.utils.DBUtils; impor ...

  7. PreparedStatement 使用like 模糊查询

    PreparedStatement 使用like 在使用PreparedStatement进行模糊查询的时候废了一番周折,以前一直都没有注意这个问题. 一般情况下我们进行精确查询,sql语句类似:se ...

  8. 在JDBC中实现SQL语句的模糊查询

    在JDBC中实现SQL语句的模糊查询 在大多数情况下我们可以在JDBC中写入sql语句通过占位符的方式来直接查询,但是如果要进行模糊查询,需要转义字符才能够正常查询. sql语句: select * ...

  9. Java JDBC 模糊查询 避免输入_,%返回全部数据

    Java JDBC 模糊查询 避免输入_,%返回全部数据 "SELECT * FROM employees WHERE INSTR(first_name,?)>0 " 仅供参 ...

随机推荐

  1. job interview

    一 , 7series clock 二, SDRAM comtroller (DDR) 4.熟悉DDR2/3协议或Ethernet相关协议,并有实际项目经验者优先: 三,AXI bus(AMBA) 四 ...

  2. ASP 生成带日期的随机数

    <% Function getRnd() '**************************************** '返回值:如getRnd(),即输出2008082415534646 ...

  3. tlb,tlh,tli文件的关系

    tlb文件:com类型库文件.在需要使用对应com类的模块里,“#import ...*.tlb”使用之. tlh.tli文件:他们是vc++编译器解析tlb文件生成的标准c++文件.因为odl和tl ...

  4. GridView不換行

    在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便会出问题,即GridView会显示不全. 解决办法,可以把ScrollVIew给删除 ...

  5. ###《Effective STL》--Chapter6

    点击查看Evernote原文. #@author: gr #@date: 2014-09-27 #@email: forgerui@gmail.com Chapter6 函数子.函数子类.函数及其他 ...

  6. 第十二篇、HTML常用框架收集

    1.Swiper 广告轮播插件 2.Bootstrap 响应式布局 3.jQuery js兼容插件 4.jQuery Mobile 5.phoneGap

  7. 仿战旗tv

    模仿战旗tv做的一个小项目,还需继续完善. 以下为链接地址: https://github.com/NearMilk/ZhanqiTV

  8. 【html】【14】特效篇--侧边栏客服

    实例参考: http://sc.chinaz.com/tag_jiaoben/zaixiankefu.html 代码: css @charset "utf-8"; ;;list-s ...

  9. 【转】图解SQL的各种连接join

    原帖地址:http://www.nowamagic.net/librarys/veda/detail/936 图解SQL的各种连接join 让你对SQL的连接一目了然 在 2011年12月22日 那天 ...

  10. css3中的BFC,IFC,GFC和FFC(转载)

    作者原文网址:http://www.cnblogs.com/dingyufenglian/p/4845477.html   What‘s FC? 一定不是KFC,FC的全称是:Formatting C ...