欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java模糊查询方法详解

程序员文章站 2024-03-09 17:09:53
当我们需要开发一个方法用来查询数据库的时候,往往会遇到这样一个问题:就是不知道用户到底会输入什么条件,那么怎么样处理sql语句才能让我们开发的方法不管接受到什么样的条件都可...

当我们需要开发一个方法用来查询数据库的时候,往往会遇到这样一个问题:就是不知道用户到底会输入什么条件,那么怎么样处理sql语句才能让我们开发的方法不管接受到什么样的条件都可以正常工作呢?这时where '1'='1'加上list就可以完美解决这个问题了,废话少说,上代码:

// 模糊查询方法
  public list<person> query() {
    list<person> list = new arraylist<>();
    connection con = null;
    scanner sc = new scanner(system.in);
    system.err.println("enter name:");
    string name = sc.nextline();
    system.err.println("enter id:");
    string id = sc.nextline();
    system.err.println("enter tel:");
    string tel = sc.nextline();
    system.err.println("enter sex:");
    string sex = sc.nextline();
    string sql = "select id,name,tel,sex from students "
        // 技巧在此,合理拼接字符串
        + "where 1=1";
    list<object> list1 = new arraylist<object>();
    //使用 commons-lang包
    if (stringutils.isnotempty(name)) {
      sql += " and title like ?";
      list1.add("%" + name + "%");
    }

    if (!stringutils.isempty(id)) {
      sql += " and content like ?";
      list1.add("%" + id + "%");
    }

    if (!stringutils.isempty(tel)) {
      sql += " and addr like ?";
      list1.add("%" + tel + "%");
    }
    try {
      con = dsutlis.getconnection();
      // sql语句组成完成以后,就生成pst对象
      preparedstatement pst = con.preparestatement(sql);
      // 设置?的值
      for (int i = 0; i < list1.size(); i++) {
        pst.setobject(i + 1, list.get(i));
      }
      resultset rs = pst.executequery();
      while (rs.next()) {
        person p = new person();
        p.setid(rs.getstring("id"));
        p.setname(rs.getstring("name"));
        p.settel(rs.getstring("tel"));
        p.setsex(rs.getstring("sex").equals("1") ? "男" : "女");
        list.add(p);
      }
      rs.close();
      pst.close();
    } catch (exception e) {
      e.printstacktrace();
    } finally {
      try {
        con.close();
      } catch (sqlexception e) {
        e.printstacktrace();
      }
    }
    return list;
  }

注解:
1、以上代码操作一个oracle数据库:

create table students(
id varchar(32),
name varchar(30),
tel varcher(15),
sex char(1),
constraint stud_pk primary key(id)
);

2、使用工具类获取connection
3、proson是一个javabean

下面教大家如何用java做模糊查询结果

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.filechooser.*;
import java.util.*;
import java.util.regex.*;

 

//模糊查询

public class media
{
public static void main(string args[])
{
jframe frame=new mediaframe();
frame.setdefaultcloseoperation(jframe.exit_on_close);
frame.setvisible(true);
}
}

class mediaframe extends jframe implements actionlistener,listselectionlistener
{
private jlist list;
private defaultlistmodel m;
private jbutton btn;
private jbutton btn1;
private jbutton btn2;
private jbutton btn3;
private jbutton btn4;
private jfilechooser chooser;
private jtextfield textfield;
map hashtable=new hashtable();
private int i=0;
int s=0;

public mediaframe()
{
settitle("media");
setsize(600,500);

jmenubar menu=new jmenubar();
setjmenubar(menu);

jlabel label=new jlabel("查询的歌曲名:");
textfield=new jtextfield();
menu.add(label);
menu.add(textfield);

jtoolbar tb=new jtoolbar();

m=new defaultlistmodel();

list=new jlist(m);
list.setfixedcellwidth(100);
list.setselectionmode(listselectionmodel.multiple_interval_selection);
list.addlistselectionlistener(this);

jscrollpane pane=new jscrollpane(list);

chooser=new jfilechooser();

btn=new jbutton("添加歌曲");
btn.addactionlistener(this);

btn1=new jbutton("删除歌曲");
btn1.addactionlistener(this);

btn2=new jbutton("清空列表");
btn2.addactionlistener(this);

btn3=new jbutton("查找曲目");
btn3.addactionlistener(this);

btn4=new jbutton("排序");
btn4.addactionlistener(this);

jpanel panel=new jpanel();

panel.setlayout(new gridlayout(5,1));

panel.add(btn);
panel.add(btn1);
panel.add(btn2);
panel.add(btn3);
panel.add(btn4);

tb.setlayout(new gridlayout(1,2));

tb.add(pane);
tb.add(panel);

add(tb,borderlayout.west);
}

public void actionperformed(actionevent event)
{

if (event.getsource()==btn)
{
i++;
chooser.setcurrentdirectory(new file("."));

int result=chooser.showopendialog(mediaframe.this);

if (result==jfilechooser.approve_option)
{
system.out.println(i);

string name=chooser.getselectedfile().getpath();

string str1=name;

int str2=name.lastindexof("//");

string name1=name.substring(str2+1,str1.length());

//截取最后一个"/"之前的所有字符串

 

int str3=name1.lastindexof(".");

string name2=name1.substring(0,str3);

//截取"."后面所有字符串后缀

 

hashtable.put(i,name2);

m.add(0,hashtable.get(i));

system.out.println(hashtable);
}
}

if (event.getsource()==btn1)
{
m.removeelement(list.getselectedvalue());
system.out.println(m);
}

if (event.getsource()==btn2)
{
system.out.println(m);
i=0;
hashtable.clear();
m.clear();
}

if (event.getsource()==btn3)
{
int [] a=new int[m.getsize()];

try
{
int j;
string name=textfield.gettext();

system.out.println(m.getsize());

for (j=1;j<=m.getsize();j++)
{
pattern p=pattern.compile("^"+name+"+");//正则表达式选取以你填的单词为首的所有查询结果
matcher match=p.matcher((string)hashtable.get(j));

if (match.find())
{
s++;

 

//记录索引结点到数组中a[]中
a[s]=a[s]+m.getsize()-j;
system.out.println(hashtable.get(j));
system.out.println(a[s]);
}

}

 

//可以选择不多个选项(因为前面设置了jlist可以多项选择)

list.setselectedindices(a);

}
catch (exception e)
{

}

}

if (event.getsource()==btn4)
{

//int j;
//for (j=0;j<m.length();j++)
//{
//if (hashtable.containsvalue(integer.parseint(j)+"*")
//hashtable.put(j,
//}

}

}

public void valuechanged(listselectionevent event)
{
system.out.println(list.getselectedindex());
}

}

通过这两个实例大家是否对java模糊查询方法有了一定的了解,希望大家喜欢小编的文章,继续关注哦!