六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 22|回复: 0

关于PreparedStatement中数据库like查询的小问题

[复制链接]

升级  8.33%

67

主题

67

主题

67

主题

举人

Rank: 3Rank: 3

积分
225
 楼主| 发表于 2013-2-4 19:58:07 | 显示全部楼层 |阅读模式
数据库:MySQL
IDE:eclipse
查询表建立方法如下:
CREATE TABLE `student` (
  `id` int(10) NOT NULL auto_increment,
  `name` char(10) default NULL,
  `sex` char(10) default NULL,
  `age` int(10) default NULL,
  `password` char(20) character set utf8 default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
 
想用like模糊查询表中名字带有“小”的记录,查询语句如下:
SELECT id, name, sex, age FROM student WHERE name LIKE '%小%' AND sex LIKE '%%' AND age LIKE '%%';
其中like用法如下:

通配符说明示例%
包含零个或多个字符的任意字符串。
WHERE name LIKE '%小%' 将查找在名字中任意位置包含汉字 "小" 的所有名字。
_(下划线)
任何单个字符。
WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。
[ ]
指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。
WHERE au_lname LIKE '[C-P]arsen' 将查找以 arsen 结尾并且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如 Carsen、Larsen、Karsen 等。
[^]
不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。
WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始并且其后的字母不为 l 的所有作者的姓氏。

在java中用PreparedStatement运用like查询:
private static final String SearchStudent =
    "SELECT id, name, sex, age FROM student WHERE name like ? and sex like ? and age like ?";
pstat = conn.prepareStatement(SearchStudent);
代码太占篇幅,只写部分。
pstat.setString(1, "%"+s.getName()+"%");---------正确用法。
pstat.setString(1, " '% "+s.getName()+" %' ");------错误用法。注意,这里要忽略'%%'旁边的''
这个单引号可能会让大家浪费点时间,这里在此稍微提下。
第一次写东西,谢谢指出错误。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表