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模糊查询方法有了一定的了解,希望大家喜欢小编的文章,继续关注哦!