当前位置: 代码迷 >> J2SE >> 怎么实现模糊查询
  详细解决方案

怎么实现模糊查询

热度:115   发布时间:2016-04-23 19:45:11.0
如何实现模糊查询
需求:在JTextField 输入一个字符时   单击查询按钮   能实现模糊查询
PS:知道使用sql语句 select *  from personal where cleName like '%陈%';    但是不知道怎么做    求大侠赐教! 拜谢!
主界面


public class Test6 extends JFrame implements ActionListener{
//添加具体控件
JPanel jp1, jp2;
JLabel jlb;
JTextField jtf;
JButton jbt1, jbt2, jbt3, jbt4, jbt5;
JTable jt = null;
JScrollPane jsp;

MyModel mm;

public Test6() {
jp1 = new JPanel();
jlb = new JLabel("请输入名字:");
jtf = new JTextField(10);
jbt1 = new JButton("查询");
//但单击查询按钮时要有一个触发事件    所以要在这里注册监听
jbt1.addActionListener(this);
jbt1.setActionCommand("select");

//最后添加了一个jbt5按钮    来显示全部信息
jbt5 = new JButton("显示全部");
jbt5.addActionListener(this);
jbt5.setActionCommand("all");

//因为默认是流布局管理    故依次添加
jp1.add(jlb);
jp1.add(jtf);
jp1.add(jbt1);
jp1.add(jbt5);

jp2 = new JPanel();
jbt2 = new JButton("添加");
//注册监听
jbt2.addActionListener(this);
jbt2.setActionCommand("insert");

jbt3 = new JButton("修改");
//注册监听
jbt3.addActionListener(this);
jbt3.setActionCommand("update");

jbt4 = new JButton("删除");
//注册监听
jbt4.addActionListener(this);
jbt4.setActionCommand("delete");


jp2.add(jbt2);
jp2.add(jbt3);
jp2.add(jbt4);

mm = new MyModel();
String[] para = {"1"};
mm.findAll("select * from personal where 1 = ?", para);
jt = new JTable(mm);
jsp = new JScrollPane(jt);

this.add(jp1, BorderLayout.NORTH);
this.add(jsp);
this.add(jp2, BorderLayout.SOUTH);

this.setTitle("IT人事信息管理系统");
this.setBounds(500, 200, 500, 300);
this.setResizable(false);
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args) {
new Test6();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("select")) {
//从文本框中得到输入的信息
String name = jtf.getText().trim();
if ("".equals(name)) {
JOptionPane.showMessageDialog(this, "请输入要查询的人名!");
return;

//写一个sql语句
String sql = "select * from personal where cleName = ?";//精确查找
String[] para = {name};
//构建一个新的数据模型类   并更新
mm = new MyModel();//这是实例化new数据模型后就不会再做一次无用的查询了
mm.findAll(sql, para);

jt.setModel(mm);//JTable自身提供了一个setModel方法    更新model中的数据


if (e.getActionCommand().equals("all")) {
String sql = "select * from personal where 1 = ?";
String[] par = {"1"};
mm = new MyModel();
mm.findAll(sql, par);
jt.setModel(mm);

if (e.getActionCommand().equals("insert")) {//当单击添加按钮时     要弹出一个对话框
AddDilog ad = new AddDilog(this, "添加员工信息", true);//如果这里设置为false   则数据更新后在主窗体中不显示更新后的数据
mm = new MyModel();
String[] para2 = {"1"};
mm.findAll("select * from personal where 1 = ?", para2);
jt.setModel(mm);

if (e.getActionCommand().equals("delete")) {
//要删除必须得先得到选中行的id
int row = this.jt.getSelectedRow();
if (row == -1) {//如果该用户一行都没选择     就返回-1
JOptionPane.showMessageDialog(this, "请选中要删除的行");
return;
}
//只要得到id 就可以删除     因为是根据cleId删除   所以列名是第一个   但是第一列的列名是从0开始
String id = ((Integer) mm.getValueAt(row, 0)).toString();//System.out.println("id=" + id);//可以查看删除行的当前id

//首先得到一个sql语句     然后在调用模型数据MyModel中的deleInfo方法
String sq = "delete from personal where cleId = ?";
String[] para = {id};
MyModel mm = new MyModel();
if (!mm.updateInfo(sq, para)) {
JOptionPane.showMessageDialog(this, "删除失败!");
} else {
JOptionPane.showMessageDialog(this, "删除成功!");
}
mm = new MyModel();//再创建一个数据模型的实例    然后更新    否则一直是之前没有更新的数据    等于是实例化  new MyModel() 进入构造无参构造方法中就是显示全部信息
String[] para2 = {"1"};
mm.findAll("select * from personal where 1 = ?", para2);
jt.setModel(mm);//更新数据模型

if (e.getActionCommand().equals("update")) {//当选中一行单击修改时     要弹出一个对话框
//与上面删除的代码相同    因为要修改的话    必须要得到选中的行再进行修改操作
int row = this.jt.getSelectedRow();
if (row == -1) {
JOptionPane.showMessageDialog(this, "请选择要修改的行");
return;
}
new UpdateDilog(this, "修改职员信息", true,  mm, row);

//修改之后    还得从数据模型中更新修改后的数据
mm = new MyModel();
String[] para2 = {"1"};
mm.findAll("select * from personal where 1 = ?", para2);
jt.setModel(mm);
}
}
}


------解决思路----------------------
用通配符?
------解决思路----------------------
你精确查找都做好了,模糊查询是遇到什么问题?
------解决思路----------------------
精确查找复制一份,把对应的= 换成like,再在两边加上%,不就可以了,
拼凑的时候,注意单引号就可以了
  相关解决方案