数据库: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()+" %' "); ------错误用法。注意,这里要忽略'%%' 旁边的''
这个单引号可能会让大家浪费点时间,这里在此稍微提下。
第一次写东西,谢谢指出错误。