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

(0)

相关推荐

  • 在java List中进行模糊查询的实现方法

    比如我有下面这样一个List,里面存放的是多个Employee对象.然后我想对这个List进行按照Employee对象的名字进行模糊查询.有什么好的解决方案么? 比如我输入的查询条件为"wang",那么应该返回只包含employee1的List列表. List list = new ArrayList(); Employee employee1 = new Employee(); employee1.setName("wangqiang"); employee1.s

  • java留言管理系统中模糊查询实例分享

    本文分享了一个基于MVC+DAO的留言管理系统,包含增删改查,其中查询,有全部查询和按关键字进行模糊查询的功能,具体内容如下 NoteDAO.Java package cn.mldn.lxh.note.dao ; import java.util.* ; import cn.mldn.lxh.note.vo.* ; public interface NoteDAO { // 增加操作 public void insert(Note note) throws Exception ; // 修改操作

  • Java模糊查询方法详解

    当我们需要开发一个方法用来查询数据库的时候,往往会遇到这样一个问题:就是不知道用户到底会输入什么条件,那么怎么样处理sql语句才能让我们开发的方法不管接受到什么样的条件都可以正常工作呢?这时where '1'='1'加上list就可以完美解决这个问题了,废话少说,上代码: // 模糊查询方法 public List<person> query() { List<person> list = new ArrayList<>(); Connection con = null

  • Java发送post方法详解

    总结一下java使用http发送post的方法: 1.post请求用于发送json 格式的参数: /** * post请求(用于请求json格式的参数) * * @param url 地址 * @param params json格式的参数 * @return */ public static String doPost(String url, String params) throws Exception { CloseableHttpClient httpclient = HttpClien

  • jdk安装、Java环境配置方法详解

    一.简介 jdk是Java语言的软件开发工具包,主要用于移动设备.嵌入式设备上的Java应用程序.jdk是整个Java开发的核心,包含了Java环境,Java工具和Java的基础类库. jre(Java Runtime Environment,Java运行环境),运行Java程序所必须的环境的集合 包含JVM标准实现及Java的核心类库 包含Java虚拟机(jvm) Java核心类库和支持文件 它不包含开发工具(jdk)–编译器.调试器和其他工具. 如果只需要运行Java程序或Applet,下载

  • java基础之方法详解

    一.什么是方法 Java方法是语句的集合,他们在一起执行一个功能. 1.方法是解决一类问题的步骤的有序组合 2.方法包含于类或对对象中 3.方法在程序中被创建,在其他地方被应用 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的结合.我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成一个功能,这样利于我们后期的扩展. 当然只读文字不能完全理解,下面的代码一定要自己一个个敲,仔细品味: //类 public class Demo01 { //mian方法,可理解为系统自定义的

  • Java枚举使用方法详解

    在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的"数据集",春夏秋冬四个数据元素组成了四季的"数据集". 在java中如何更好的使用这些"数据集"呢?因此枚举便派上了用场,以下代码详细介绍了枚举的用法. package com.ljq.test; /** * 枚举用法详解 * * @author jiqinli

  • PHP CURL与java http使用方法详解

    php curl 有时候我们的项目需要与第三方平台进行交互.举个例子. 现在有A.B两个平台. 甲方在最初一段时间由A实现了一部分关键业务(如用户信息等). 然后基于一部分原因,现在有一些业务需要B来实现,且实现程序调用了一些敏感的接口只能在B方服务器上跑,那么只能做两个平台之间的交互了.curl 就是这种问题的解决方案. curl 是一个php扩展,你可以看作一个可以访问其他网站的精简版浏览器. 要使用curl 你得在php.ini 中开启相关的配置才能使用. 常用的平台之间交互的数据格式 有

  • php调用自己java程序的方法详解

    本文实例讲述了php调用自己的java程序实现方法.分享给大家供大家参考,具体如下: 最开始要装jdk这个就不用说了,我装的是java ee 5+jdk 1.把下载的php-java-bridge_5.2.2_j2ee.zip解压出来,里面有个JavaBridge.war 直接用winrar打开,到WEB-INF/lib/JavaBridge.jar 把这个jar包拷到 你的php目录的ext/下. 2.打开war包,里面有个java的文件夹,把他全部拷到你的PHP项目下,如/demo/java

  • mybatis的动态SQL和模糊查询实例详解

    现在以一个例子来介绍mybatis的动态SQL和模糊查询:通过多条件查询用户记录,条件为姓名模糊匹配,并且年龄在某两个值之间. 新建表d_user: create table d_user( id int primary key auto_increment, name varchar(10), age int(3) ); insert into d_user(name,age) values('Tom',12); insert into d_user(name,age) values('Bob

  • mysql、mssql及oracle分页查询方法详解

    本文实例讲述了mysql.mssql及oracle分页查询方法.分享给大家供大家参考.具体分析如下: 分页查询在web开发中是最常见的一种技术,最近在通过查资料,有一点自己的心得 一.mysql中的分页查询 注: m=(pageNum-1)*pageSize;n= pageSize; pageNum是要查询的页码,pageSize是每次查询的数据量, 方法一: select * from table order by id limit m, n; 该语句的意思为,查询m+n条记录,去掉前m条,返

  • Java Process.waitFor()方法详解

    目录 Java Process.waitFor()方法 描述 声明 参数 返回值 异常 实例 process.waitFor()没有作用 Java Process.waitFor()方法 Process.waitFor()方法 将导致当前线程等待,直到该对象的进程结束,才返回调用. 描述 java.lang.Process.waitFor()方法将导致当前的线程等待,如果必要的话,直到由该Process对象表示的进程已经终止.此方法将立即返回,如果子进程已经终止.如果子进程尚未终止,则调用线程将

随机推荐