需求:在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,再在两边加上%,不就可以了,
拼凑的时候,注意单引号就可以了