Java模糊查询方法详解

 更新时间:2016年04月29日 09:15:40   投稿:lijiao  
这篇文章主要为大家详细介绍了Java模糊查询方法的实现,实例教你如何用Java做模糊查询结果,感兴趣的小伙伴们可以参考一下

当我们需要开发一个方法用来查询数据库的时候,往往会遇到这样一个问题:就是不知道用户到底会输入什么条件,那么怎么样处理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模糊查询方法有了一定的了解,希望大家喜欢小编的文章,继续关注哦!

相关文章

  • 浅谈java中静态方法的重写问题详解

    浅谈java中静态方法的重写问题详解

    本篇文章是对java中静态方法的重写问题进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Storm框架整合springboot的方法

    Storm框架整合springboot的方法

    Storm框架中的每个Spout和Bolt都相当于独立的应用,Strom在启动spout和bolt时提供了一个open方法(spout)和prepare方法(bolt)。这篇文章主要介绍了Storm框架整合springboot的方法,需要的朋友可以参考下
    2018-11-11
  • java实现在性能测试中进行业务验证实例

    java实现在性能测试中进行业务验证实例

    这篇文章主要为大家介绍了java实现在性能测试中进行业务验证实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 详细分析Java中String、StringBuffer、StringBuilder类的性能

    详细分析Java中String、StringBuffer、StringBuilder类的性能

    在Java中,String类和StringBuffer类以及StringBuilder类都能用于创建字符串对象,而在分别操作这些对象时我们会发现JVM执行它们的性能并不相同,下面我们就来详细分析Java中String、StringBuffer、StringBuilder类的性能
    2016-05-05
  • java将XML文档转换成json格式数据的示例

    java将XML文档转换成json格式数据的示例

    本篇文章主要介绍了java将XML文档转换成json格式数据的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Java基础学习之实参和形参

    Java基础学习之实参和形参

    这篇文章主要介绍了Java基础学习之实参形参,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有一定的帮助,需要的朋友可以参考下
    2021-05-05
  • springboot集成camunda的实现示例

    springboot集成camunda的实现示例

    本文主要介绍了springboot集成camunda的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Spring项目运行依赖spring-contex解析

    Spring项目运行依赖spring-contex解析

    这篇文章主要介绍了Spring项目运行依赖spring-contex解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java反射技术详解

    Java反射技术详解

    这篇文章主要结合实例形式分析了介绍了Java反射技术,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助
    2021-11-11
  • spring-boot-klock-starter V1.1 主体功能重大更新内容介绍

    spring-boot-klock-starter V1.1 主体功能重大更新内容介绍

    这篇文章主要介绍了spring-boot-klock-starter V1.1 主体功能重大更新内容描述,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-01-01

最新评论