當我們需要開發一個方法用來查詢數據庫的時候,往往會遇到這樣一個問題:就是不知道用戶到底會輸入什么條件,那么怎么樣處理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("http://");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模糊查詢方法有了一定的了解,希望大家喜歡小編的文章,繼續關注哦!
新聞熱點
疑難解答