我的 SQL
中有一个名为 Student 的表,其结构如下:
+-----------+-----------+-----------+------------+
| studentno | lastname | firstname | middlename |
+-----------+-----------+-----------+------------+
| 2001-0001 | Matrix | John | G |
| 2001-0002 | Mata | Evan | A |
| 2001-0003 | Melly | Carmelo | P |
| 2001-0004 | Hamburger | Hardy | P |
+-----------+-----------+-----------+------------+
我的 Java 程序中有一个 JTable
和一个 JTextField
。我想做的是,如果我在 JTextField
中输入字母 M(不区分大小写),所有姓氏以字母 M
开头的学生都会显示在我的 JTable
。如果我输入第二个字母,例如 A
,所有姓氏以 MA
开头的学生都会显示,直到我在 上得到特定的姓氏>JTable
..
我的问题是,即使我输入字母 M
,MA
中的所有数据也会出现在我的 JTable
上而不仅仅是所有姓氏以字母 M
开头的学生..
即使我清空 JTextField
,我的 JTable
也不会清除..
我正在使用 Netbeans
,到目前为止,我的 JTextFieldKeyPressed
中有此代码:
private void lastNameKeyPressed(java.awt.event.KeyEvent evt) {
Connection conn = null;
String url = "jdbc:mysql://localhost:3306/";
String dbName = "students_dbs";
Statement stmt = null;
ResultSet result = null;
String driver = "com.mysql.jdbc.Driver";
String databaseUserName = "user1";
String databasePassword = "test";
PreparedStatement pst = null;
try{
conn = DriverManager.getConnection(url + dbName, databaseUserName, databasePassword);
stmt = conn.createStatement();
System.out.println("Connected to the database.");
}catch(Exception e){
System.out.println("Failed to connect ot the database.");
}
try{
String sql = "SELECT studentno, lastname, firstname, middlename FROM student WHERE lastname LIKE '%" + lastname.getText() + "%'";
pst = conn.prepareStatement(sql);
result = pst.executeQuery();
studentsTable.setModel(DbUtils.resultSetToTableModel(result));
}
catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}
}
最佳答案
首先,您需要添加一个监听器来监听文本中的更改,然后将该文本发送到您的查询以根据传递的文本检索新数据。
// Listen for changes in the text
textField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
warn();
}
public void removeUpdate(DocumentEvent e) {
warn();
}
public void insertUpdate(DocumentEvent e) {
warm();
}
public void warn() {
// fire the execute statement.
}
});
那么您需要将查询更改为如下所示:
String sql = "SELECT studentno, lastname, firstname, middlename FROM student WHERE firstname= '" + jtextfield.getText() + "%'";
关于java - 过滤MySQL数据到JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22148450/