Java模糊查询方法详解
当我们需要开发一个方法用来查询数据库的时候,往往会遇到这样一个问题:就是不知道用户到底会输入什么条件,那么怎么样处理sql语句才能让我们开发的方法不管接受到什么样的条件都可以正常工作呢?这时where'1'='1'加上list就可以完美解决这个问题了,废话少说,上代码:
//模糊查询方法
publicList<person>query(){
List<person>list=newArrayList<>();
Connectioncon=null;
Scannersc=newScanner(System.in);
System.err.println("entername:");
Stringname=sc.nextLine();
System.err.println("enterid:");
Stringid=sc.nextLine();
System.err.println("entertel:");
Stringtel=sc.nextLine();
System.err.println("entersex:");
Stringsex=sc.nextLine();
Stringsql="selectid,name,tel,sexfromstudents"
//技巧在此,合理拼接字符串
+"where1=1";
List<Object>list1=newArrayList<Object>();
//使用commons-lang包
if(StringUtils.isNotEmpty(name)){
sql+="andtitlelike?";
list1.add("%"+name+"%");
}
if(!StringUtils.isEmpty(id)){
sql+="andcontentlike?";
list1.add("%"+id+"%");
}
if(!StringUtils.isEmpty(tel)){
sql+="andaddrlike?";
list1.add("%"+tel+"%");
}
try{
con=DSUtlis.getConnection();
//SQL语句组成完成以后,就生成pst对象
PreparedStatementpst=con.prepareStatement(sql);
//设置?的值
for(inti=0;i<list1.size();i++){
pst.setObject(i+1,list.get(i));
}
ResultSetrs=pst.executeQuery();
while(rs.next()){
personp=newperson();
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(Exceptione){
e.printStackTrace();
}finally{
try{
con.close();
}catch(SQLExceptione){
e.printStackTrace();
}
}
returnlist;
}
注解:
1、以上代码操作一个Oracle数据库:
createtablestudents( idvarchar(32), namevarchar(30), telvarcher(15), sexchar(1), constraintstud_pkprimarykey(id) );
2、使用工具类获取Connection
3、proson是一个javabean
下面教大家如何用Java做模糊查询结果
importjava.io.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.event.*;
importjavax.swing.filechooser.*;
importjava.util.*;
importjava.util.regex.*;
//模糊查询
publicclassMedia
{
publicstaticvoidmain(Stringargs[])
{
JFrameframe=newMediaFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
classMediaFrameextendsJFrameimplementsActionListener,ListSelectionListener
{
privateJListlist;
privateDefaultListModelm;
privateJButtonbtn;
privateJButtonbtn1;
privateJButtonbtn2;
privateJButtonbtn3;
privateJButtonbtn4;
privateJFileChooserchooser;
privateJTextFieldtextField;
Maphashtable=newHashtable();
privateinti=0;
ints=0;
publicMediaFrame()
{
setTitle("Media");
setSize(600,500);
JMenuBarmenu=newJMenuBar();
setJMenuBar(menu);
JLabellabel=newJLabel("查询的歌曲名:");
textField=newJTextField();
menu.add(label);
menu.add(textField);
JToolBarTB=newJToolBar();
m=newDefaultListModel();
list=newJList(m);
list.setFixedCellWidth(100);
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
list.addListSelectionListener(this);
JScrollPanepane=newJScrollPane(list);
chooser=newJFileChooser();
btn=newJButton("添加歌曲");
btn.addActionListener(this);
btn1=newJButton("删除歌曲");
btn1.addActionListener(this);
btn2=newJButton("清空列表");
btn2.addActionListener(this);
btn3=newJButton("查找曲目");
btn3.addActionListener(this);
btn4=newJButton("排序");
btn4.addActionListener(this);
JPanelpanel=newJPanel();
panel.setLayout(newGridLayout(5,1));
panel.add(btn);
panel.add(btn1);
panel.add(btn2);
panel.add(btn3);
panel.add(btn4);
TB.setLayout(newGridLayout(1,2));
TB.add(pane);
TB.add(panel);
add(TB,BorderLayout.WEST);
}
publicvoidactionPerformed(ActionEventevent)
{
if(event.getSource()==btn)
{
i++;
chooser.setCurrentDirectory(newFile("."));
intresult=chooser.showOpenDialog(MediaFrame.this);
if(result==JFileChooser.APPROVE_OPTION)
{
System.out.println(i);
Stringname=chooser.getSelectedFile().getPath();
Stringstr1=name;
intstr2=name.lastIndexOf("//");
Stringname1=name.substring(str2+1,str1.length());
//截取最后一个"/"之前的所有字符串
intstr3=name1.lastIndexOf(".");
Stringname2=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=newint[m.getSize()];
try
{
intj;
Stringname=textField.getText();
System.out.println(m.getSize());
for(j=1;j<=m.getSize();j++)
{
Patternp=Pattern.compile("^"+name+"+");//正则表达式选取以你填的单词为首的所有查询结果
Matchermatch=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(Exceptione)
{
}
}
if(event.getSource()==btn4)
{
//intj;
//for(j=0;j<m.length();j++)
//{
//if(hashtable.containsValue(Integer.parseInt(j)+"*")
//hashtable.put(j,
//}
}
}
publicvoidvalueChanged(ListSelectionEventevent)
{
System.out.println(list.getSelectedIndex());
}
}
通过这两个实例大家是否对java模糊查询方法有了一定的了解,希望大家喜欢小编的文章,继续关注哦!