java的sql里面的模糊查询的sql语句怎么查询

SQL 模糊查询条件的四种匹配模式
执行数据库查询时,有完整查询和模糊查询之分。
一般模糊语句格式如下:
SELECT 字段 FROM 表 WHERE 某字段 LIKE 条件;
其中,关于条件,SQL提供了四种匹配模式:
1、%:表示零个或多个字符。
  可以匹配任意类型和任意长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
  比如:select * from flow_user where username like '%王%';
  将会把flow_user这张表里面,列名username中还有“王”的记录全部查询出来。
  另外,如果需要找到flow_user这张表里面,字段username中既有“唐”,又有“英”的记录,可以使用and条件,
  select * from flow_user where username like '%英%' and username like '%唐%';
  则可以查询出来所有包含“英”和“唐”的所有内容,“英”和“唐”所在的前后位置无所谓。
  若是用select * from flow_user where username like '%英%唐%';
  可以查出来包含“英唐”的内容,但是查不出来“唐英”的内容。
2、_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度:
  select * from flow_user where username like '_英_';
  只能找到“王英琨”这样username为三个字且中间一个字是“英”的内容。
  再比如:select * from flow_user where username like '英__';
  只能找到“英雄点”这样username为三个字且第一个字是“英”的内容。
3、[]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配的对象为他们中的任一个。
  select * from flow_user where username LIKE'[王李张]飞';
  将找出“王飞”“李飞”“张飞”(而不是“张王李飞”)。
  如[]内有一系列字符(01234,abcde之类的)则可略写为“0-4”,“a-e”:
  select * from flow_user where username like '老[0-9]';
  将找出“老1”、“老2”、……、“老9”;
  Oracle 10g以上的版本用法为:  
  select * from flow_user where regexp_like(username, '[张王李]飞');
4、[^]:表示不在括号所列之内的单个字符。其取之和[]相同,但它所要求匹配对象为指定字符以外的任一个字符。
  select * from flow_user where username LIKE'[^王李张]飞';
  将找出不是“王飞”“李飞”“张飞“的”赵飞“、”吴飞“等。
  注:oracle like 不支持正则,你可以使用支持like的正则regexp_like
5、查询内容包含通配符时:
  由于通配符的缘故,导致查询特殊字符“%”、“_”、“[”的语句无法正常实现,把特殊字符用“[]”括起来便可以正常查询。
  function sqlencode(str)
  str=replace(str,"[","[[]") '此句一定要在最前
  str=replace(str,"_","[_]")
  str=replace(str,"%","[%]")
  sqlencode=str
  end function
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!Java与MogoDB之间查询数据并运用正则表达式实现模糊查询
很奇怪的是,在网上搜到的java与mogodb链接有两种方式,一种是使用一系列mogodb前缀的方法,详见菜鸟教程,一种就是直接是使用db类的对象进行连接,我个人推荐菜鸟教程上的东西,因为比较全面同时讲解清晰,百度上其他一堆说实话不是没用,只不过就是太乱了,没有解释,解释不清。
闲话少说,直接看代码,这个java代码实现的就是链接并选择数据集然后从数据集中查找并打印出查找结果的自己想要的内容:(MogoDB中Document的东西也在代码里)
package P3;
import com.mongodb.*;
import com.mongodb.client.FindI
import com.mongodb.client.MongoC
import com.mongodb.client.MongoC
import com.mongodb.client.MongoD
import java.sql.T
import java.util.ArrayL
import java.util.L
import java.util.regex.P
import javax.print.attribute.HashAttributeS
import org.bson.D
public class vgf {
public static void main(String args[]){
//public void getList(){
//连接到MongoDB服务 如果是远程连接可以替换&localhost&为服务器所在IP地址
//ServerAddress()两个参数分别为 服务器地址 和 端口
ServerAddress serverAddress = new ServerAddress(&114.215.28.180&,27017);
List addrs = new ArrayList();
addrs.add(serverAddress);
//MongoCredential.createScramSha1Credential()三个参数分别为 用户名 名称 密码
MongoCredential credential = MongoCredential.createScramSha1Credential(&xxxx&, &xxxx&, &xxxx&.toCharArray());
List credentials = new ArrayList();
credentials.add(credential);
//通过连接认证获取MongoDB连接
MongoClient mongoClient = new MongoClient(addrs, credentials);
//连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase(&数据库名&);
System.out.println(&Connect to database successfully&);
MongoCollection collection = mongoDatabase.getCollection(&数据集合名&);
System.out.println(&集合选择成功&);
//检索所有文档
* 1. 获取迭代器FindIterable
* 2. 获取游标MongoCursor
* 3. 通过游标遍历检索出的文档集合
//下面就是为了匹配正则表达式,使用Pattern来构造正则表达式,然后直接使用find()来查找就可以了
Pattern pattern = Pattern.compile(&& + &.*$&, Pattern.MULTILINE);
FindIterable findIterable = collection.find(new Document(&Time&,pattern));
//collection.find
MongoCursor mongoCursor = findIterable.iterator();
//下面是打印特定的查询内容的方法,就是通过get方法从document对象中获得数据
while(mongoCursor.hasNext()){
Document document = mongoCursor.next();
//System.out.println(document);
String string = document.get(&Time&).toString();
String string2 = string.substring(0,10);
Document document2 = ((ArrayList)document.get(&Datas&)).get(0);
Document document3 = (Document)document2.get(&DynamicData&);
System.out.println(document3.get(&Hash&).toString());
//System.out.println(string);
System.out.println(string2);
} catch (Exception e) {
e.printStackTrace();
System.err.println( e.getClass().getName() + &: & + e.getMessage() );
/*public static void main(String args[]){ㄓㄤㄑㄧㄤ
比如我有下面这样一个List,里面存放的是多个Employee对象。然后我想对这个List进行按照Employee对象的名字进行模糊查询。有什么好的解决方案么?比如我输入的查询条件为&wang&,那么应该返回只包含employee1的List列表。
List list = new ArrayList();
Employee employee1 = new Employee();
employee1.setName("wangqiang");
employee1.setAge(30);
list.add(employee1);
Employee employee2 = new Employee();
employee2.setName("lisi");
list.add(employee2);
employee2.setAge(25);
public List search(String name,List list){
List results = new ArrayList();
Pattern pattern = Pattern.compile(name);
for(int i=0; i & list.size(); i++){
Matcher matcher = pattern.matcher(((Employee)list.get(i)).getName());
if(matcher.matches()){
results.add(list.get(i));
上面那个是大小写敏感的,如果要求大小写不敏感,改成:Pattern&pattern&=&Pattern.compile(name,Pattern.CASE_INSENSITIVE);
并且上面那个是精确查询,如果要模糊匹配,matcher.find()即可以进行模糊匹配
public List search(String name,List list){
List results = new ArrayList();
Pattern pattern = Pattern.compile(name);
for(int i=0; i & list.size(); i++){
Matcher matcher = pattern.matcher(((Employee)list.get(i)).getName());
if(matcher.find()){
results.add(list.get(i));
public class ListLike {
//定义员工类
public class Employee {
private int
public int getAge() {
public void setAge(int age) {
this.age =
public String getName() {
public void setName(String name) {
this.name =
public List list=new ArrayList();
//增加员工
public List addList(String name,int age){
Employee employee1 = new Employee();
employee1.setName(name);
employee1.setAge(age);
list.add(employee1);
//显示所有员工
public void ShowList(){
for(int i=0;i&list.size();i++){
System.out.println(((Employee)(list.get(i))).getName()+" "+((Employee)(list.get(i))).getAge());
//模糊查询
public List likeString(String likename){
for(int i=0;i&list.size();i++){
if(((Employee)(list.get(i))).getName().indexOf(likename)&=-1)
list.remove(i);
public static void main(String arg[]){
ListLike ll=new ListLike();
ll.addList("wuxiao",13);
ll.addList("wangwang",11);
ll.addList("wanghua",12);
ll.addList("xiaowang",13);
ll.addList("xiaoxiao",13);
ll.likeString("wang");
ll.ShowList();
阅读(...) 评论()
哈哈,页脚部分。博客分类:
利用反射机制完成所有hibernate的模糊、非模糊查询。可以按条件查询
有的时候我们会遇到这样的情况,比如图书馆有很多本书,这时候我们要按照书名查询,按照类别查询,按照作者查询,或者按照ISBN查询,并且有可能一次按照多个条件查询,这时候通常会需要如下的hql或者sql语句。
① from Book b
where b.bookName=”红楼梦“ and b.bookAuthor=”施耐庵” ……
② Select * from tb_book b where
b.bookName=”红楼梦“ and b.bookAuthor=”施耐庵” ……
并且在写servlet或者使用struts写action的时候需要针对不同的查询调用不同的DAO层,因此往往servlet或者dao需要写多个类似处理代码,他们几乎相同。
其实针对查询这些信息的时候我们完全可以利用反射机制来自动生成一条hql或者sql语句执行,不需要每次都写出新的语句,这样既不利于维护,也不利于开发。
我的设想就是,不管是否使用ORM框架,都需要有实体类对应数据库的表,而这些实体类的属性就对应了表的字段。
我们如果能利用一个实体类来进行针对自身不为null的属性生成hql或者sql语句,那么就可以利用一个查询的dao完成所有类型的查询了。
下面给出我写的hqlModel,这个类是一个用来生成查询语句的。
此类的中心思想就是自动生成查询语句,只要给定一个Object类型,就可以“自动”根据类的属性调用getter方法来获取值。如果值不为空,就按照该值来进行条件查询,如果没有任何属性被赋值,那么他将认为要生成form Book 这样的查询语句。
这样不管是查询所有数据,查询指定数据,多条件查询指定数据,都可以用同一个方法来执行。
至于模糊或者非模糊,只要给定一个boolean,然后判断就可以了。这样用setter作为其是否开启模糊查询的开关。
package com.leaves.daoU
import java.beans.PropertyD
import java.lang.reflect.F
import java.lang.reflect.M
* 此类用来创建hql查询语句,能自动生成如下格式hql语句。&br&
* from BookInfo where bookNameId='null' and bookName='《三国演义》' and
* bookAuthor='施耐庵' ;&br&
* 使用getHql()方法来创建hql语句,此方法调用会抛出异常。&br&
* 此类需要你为其提供一个带有get和set方法的bean,类会根据其get的方法获得其值,如果get属性不为null则添加where条件。&br&
* 如果没有设置任何方法,则默认生成from BookInfo形式HQL语句。
* @version 1.0.0.0
* @author leaves叶知泉,&a href="http://www.c5ms.com"&官方网站www.c5ms.com&/a&
public class HqlModel {
* 是否开启模糊查询
private boolean likeS
public boolean isLikeSel() {
return likeS
* 设置属性是否开启模糊查询
* @param likeSel
public void setLikeSel(boolean likeSel) {
this.likeSel = likeS
public Object getObject() {
public void setObject(Object object) {
this.object =
* 允许不带参数实例化
private HqlModel() {
* 使用指定的对象来获取一个HqlModel实例
* @param object
实例化时所需要的DTO对象
public static HqlModel newInstanceByObj(Object object) {
HqlModel hqlModel = new HqlModel();
hqlModel.setObject(object);
return hqlM
* 用来进行创建hql语句的方法, 此方法可能抛出异常
* @return 根据传入对象的get方法构建的hql语句
public String getHql() throws Exception {
// 预准备好的hql语句。
StringBuffer sbf = new StringBuffer("from Object where ");
// 得道给定实例的类型。
Class&?& theClass = this.getObject().getClass();
// 使用类名替换Object字符串。
sbf.replace(5, 11, theClass.getSimpleName());
// 活的该类所有属性。
Field[] fields = object.getClass().getDeclaredFields();
// 遍历所有属性
for (Field field : fields) {
PropertyDescriptor pd = new PropertyDescriptor(field.getName(),
theClass);
// 获得所有属性的读取方法
Method getMethod = pd.getReadMethod();
// 执行读取方法,获得属性值
Object objTemp = getMethod.invoke(object);
// 如果属性值为null,就略过
if (objTemp == null) {
// 如果不为空。
// 判断是否开启模糊查询,添加查询条件,并且加上%%符号。
if (isLikeSel()) {
sbf.append(field.getName() + " like '%" + objTemp + "%'");
sbf.append(" and ");
}//同理添加查询条件,不添加%%符号。
sbf.append(field.getName() + "='" + objTemp + "'");
sbf.append(" and ");
//最后一个属性设置完成之后取出残余的and和尾部的空格。
if (sbf.toString().endsWith("and ")) {
sbf.delete(sbf.length() - "and".length() - 1, sbf.length());
//如果没有设置任何属性,则取出尾部的where字符串和后面的空格。
if (sbf.toString().endsWith("where ")) {
sbf.delete(sbf.length() - "where".length() - 1, sbf.length());
//返回生成好的语句。
return sbf.toString();
目前属于1.0版本,还不支持sql语句生成,其实都是一个道理,只要在类中修改 StringBuffer sbf = new StringBuffer(“from Object where ”);这一句就能完成。
希望朋友们修改出更好的生成器之后能跟小弟一起分享,多多指教。
此类不足之处:
·没有sql、hql切换的开关
·理论上还可以生成update和save这样的语句,只是小弟还没有想到设计。
论坛回复 /
(19 / 7633)
leavesforeye
浏览: 63722 次
来自: 大连
[i][i][i][i]sdfdsfsdfds
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'求助sql的模糊查询在eclipse里怎么写?【java吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:715,703贴子:
求助sql的模糊查询在eclipse里怎么写?收藏
String sql="select * from question
where subjectname like '%?%'";
我是这样写的
测试的时候报错
绑定变量不存在
subjectname
是不是这个列不存在?
String sql="select * from question where subjectname like ?";setP*("%" + 需要模糊查找的内容 + "%");
登录百度帐号

我要回帖

更多关于 java模糊查询sql语句 的文章

 

随机推荐