java - 过滤MySQL数据到JTable

标签 java mysql netbeans

我的 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..

我的问题是,即使我输入字母 MMA 中的所有数据也会出现在我的 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/

相关文章:

Java持久化框架

java - 如何使用采用 String 参数的自定义异常来扩展 Java Exception 类?

php - PDO 和 MySQL 存储过程。不返回参数

mysql - 如何显示 MySQL 中查询的行数?

java - 显示图像网格

java - 在 Bukkit 的骷髅马周围生成生物刷怪器粒子

java - 提取两个字符串之间的字符串

database - 分组依据 - 多个条件 - MySQL

java - NetBeans 的 GCJ

java - 基于预定义代码构建的 Netbeans GUI