2014-03-03 23 views
0

我有一個表,我SQL在下面的結構,稱爲學生:過濾MySQL的數據的JTable

+-----------+-----------+-----------+------------+ 
| studentno | lastname | firstname | middlename | 
+-----------+-----------+-----------+------------+ 
| 2001-0001 | Matrix | John  | G  | 
| 2001-0002 | Mata  | Evan  | A  | 
| 2001-0003 | Melly  | Carmelo | P  | 
| 2001-0004 | Hamburger | Hardy  | P  | 
+-----------+-----------+-----------+------------+ 

我有一個JTable,在我的Java程序一個JTextField。我想要做的是,如果我在JTextField中輸入字母M(不區分大小寫),則所有姓氏以M開頭的學生將顯示在我的JTable上。如果我輸入了第二封信,說,例如,A,所有誰的姓學生與MA開始顯示,直到我在我的JTable有一個特定的名字..

我的問題是,即使我類型信M,所有的數據在我MA出現在我的JTable,而不僅僅是所有誰的姓學生開頭字母M .. 而我JTable即使我清空JTextField ...

不放晴

我使用的是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); 
} 

} 

回答

1

首先,你需要添加一個監聽器監聽文本中的變化,那麼該文本發送到您的查詢檢索基礎上,通過文本的新數據。

// 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() + "%'"; 
+0

謝謝!我實際上使用netbeans,所以不是使用KeyPressed,而是使用KeyReleased。我認爲這與您建議的DocumentListener類似。對於我的查詢,我省略了給我這個查詢的第一個'%'。 'String sql =「SELECT studentno,lastname,firstname,middlename FROM student WHERE firstname LIKE'」+ jtextfield.getText()+「%'」;' – ashlrem

+0

@ashlrem恭喜。 – Salah