我正在创建一个简单的应用程序,让我搜索员工的信息到目前为止,我可以搜索名字,但我想在搜索中添加更多变量,如Date of由 JButton 上的单个动作事件提交的出生地,地址,专业等。
我该怎么做呢?我已经考虑过使用IF Else和Switch声明,但我不知道如何前进。
private void searchActionPerformed(java.awt.event.ActionEvent evt) {
String val1 = textFirstName.getText();
try {
String sql = "select * from employees where first_name = '"+val1+"'";
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
dataTable.setModel(DbUtils.resultSetToTableModel(rs));
}
catch ( SQLException err ) {
JOptionPane.showMessageDialog(Appointments.this, err.getMessage());
}
}
答案 0 :(得分:3)
您可以做的是创建一个动态面板,随着用户添加更多搜索选项而增长。基本上,你会有一个添加搜索词按钮,每按一次就会添加一个新的组合框和文本字段(例如,如果列表中的最后一个组合框不为空)
您需要创建一个类的类:
public class SearchTerm {
private int id;
private String column;
private String value;
//Getters and setters and the rest.
...
}
一旦你创建了组合框(它将包含用户可以搜索的所有字段)和文本框(包含文本),你可以在搜索列表中添加一个新的SearchTerm
对象条款。如果您希望允许用户删除和/或更改现有搜索字词,Id
字段就会派上用场。
下一步是创建一个基本上进行搜索的单独图层。这将使您的UI层包含UI功能。单一责任模式规定一个班级只做一件事。目前,您的班级负责UI和数据库操作。
这个新图层将有一个方法,该方法接收SearchTerm
项列表。从那里,您将通过迭代提供的SearchTerm
个对象及其相应的值来构建搜索查询。完成后,您可以返回与您数据库中的数据类似的User
个对象列表。所有这些都需要在一个单独的线程上执行。您需要查看后台工作人员。
其他一些要点:
请确保使用预准备语句而不是SQL连接。因此,您的应用程序很容易进行SQL注入。
目前,您正在对事件调度程序线程(EDT)执行搜索操作。建议不要这样做,因为此线程负责维护UI。因此,如果您对此线程执行任何密集操作,UI将受到影响(通过降低响应速度或明显冻结)。在单独的线程上启动搜索操作将确保EDT不会因非UI相关操作而陷入困境。然后,您可以通过SwingUtilities.invokeLater
机制从后台线程更新UI。