Java模糊查詢方法詳解
當(dāng)我們需要開發(fā)一個(gè)方法用來查詢數(shù)據(jù)庫的時(shí)候,往往會(huì)遇到這樣一個(gè)問題:就是不知道用戶到底會(huì)輸入什么條件,那么怎么樣處理sql語句才能讓我們開發(fā)的方法不管接受到什么樣的條件都可以正常工作呢?這時(shí)where '1'='1'加上list就可以完美解決這個(gè)問題了,廢話少說,上代碼:
// 模糊查詢方法 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對(duì)象 PreparedStatement pst = con.prepareStatement(sql); // 設(shè)置?的值 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、以上代碼操作一個(gè)Oracle數(shù)據(jù)庫:
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是一個(gè)javabean
下面教大家如何用Java做模糊查詢結(jié)果
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("http://"); String name1=name.substring(str2+1,str1.length()); //截取最后一個(gè)"/"之前的所有字符串 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+"+");//正則表達(dá)式選取以你填的單詞為首的所有查詢結(jié)果 Matcher match=p.matcher((String)hashtable.get(j)); if (match.find()) { s++; //記錄索引結(jié)點(diǎn)到數(shù)組中a[]中 a[s]=a[s]+m.getSize()-j; System.out.println(hashtable.get(j)); System.out.println(a[s]); } } //可以選擇不多個(gè)選項(xiàng)(因?yàn)榍懊嬖O(shè)置了JList可以多項(xiàng)選擇) 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()); } }
通過這兩個(gè)實(shí)例大家是否對(duì)java模糊查詢方法有了一定的了解,希望大家喜歡小編的文章,繼續(xù)關(guān)注哦!
相關(guān)文章
Java基于虹軟實(shí)現(xiàn)人臉識(shí)別、人臉比對(duì)、活性檢測(cè)等
本文主要介紹了Java基于虹軟實(shí)現(xiàn)人臉識(shí)別、人臉比對(duì)、活性檢測(cè)等,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02使用InputStream的available()能否用來判斷當(dāng)前流是否讀取到文件
這篇文章主要介紹了使用InputStream的available()能否用來判斷當(dāng)前流是否讀取到文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06SpringBoot實(shí)現(xiàn)token登錄的示例代碼
在進(jìn)行登錄驗(yàn)證時(shí),我們需要session或cookie會(huì)話進(jìn)行驗(yàn)證,當(dāng)我們脫離瀏覽器用app等向服務(wù)端發(fā)請(qǐng)求就沒有session和cookie機(jī)制,這時(shí)我們就需要使用token令牌進(jìn)行登錄驗(yàn)證,本文就詳細(xì)的介紹一下,感興趣的可以了解一下2022-03-03Java動(dòng)態(tài)代理實(shí)現(xiàn)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
動(dòng)態(tài)代理作為代理模式的一種擴(kuò)展形式,廣泛應(yīng)用于框架(尤其是基于AOP的框架)的設(shè)計(jì)與開發(fā),本文將通過實(shí)例來講解Java動(dòng)態(tài)代理的實(shí)現(xiàn)過程2017-08-08springboot項(xiàng)目配置context path失效的問題解決
本文主要介紹了springboot項(xiàng)目配置context path失效的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04