2014-03-03 61 views
3

我正在用Java編寫代碼,用戶可以在名爲lastname的JTextField中輸入姓氏,然後在MySQL數據庫中搜索可能的匹配項。例如,用戶開始鍵入字母「M」(不區分大小寫且不帶雙引號),所有以字母「M * 」開頭的姓氏將顯示在JTable上。如果用戶輸入第二個字母,例如「A」,則JTable上的結果將僅顯示帶有「MA」的姓氏,然後如果用戶鍵入第三個字母,例如「N」,則JTable將僅顯示所有以 「MAN ***」 等姓氏..在Java和MySQL數據庫中搜索篩選器

我看了一下

SELECT * FROM表WHERE姓氏LIKE值

,並試圖用我的程序但是,我收到一個錯誤。

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxError.Exception:你有 在您的SQL語法錯誤;檢查對應於您 MySQL服務器版本在線路附近使用「%」正確的語法手冊1

這是我在事件部分代碼,當有鍵的JTextField姓氏按:

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); 
} 
} 

現在我搜索了一兩天,然而,我被卡住了。我在使用MySQL中的LIKE方面有點新鮮。非常感謝任何形式的幫助!先謝謝你!

+0

打印的'終值sql'變量請。 –

+0

考慮使用SQL獲取整個數據,然後使用['RowSorter'](http://docs.oracle.com/javase/7/docs/api/javax/swing/RowSorter.html)過濾表格 - *「 RowSorter爲排序**和篩選提供了基礎**「 –

+0

LIKE'%」+ lastname.getText()+「'%」 - > LIKE'%「+ lastname.getText()+」 %'「 –

回答

3

最後'字符的位置是錯誤的:

String sql = "SELECT studentno, lastname, firstname, middlename FROM student 
       WHERE lastname LIKE '% " + lastname.getText() + " '% "; 

應該是:

String sql = "SELECT studentno, lastname, firstname, middlename FROM student 
       WHERE lastname LIKE '% " + lastname.getText() + " %' "; 
+0

嗨,我試過了,並沒有給我錯誤。謝謝!但是,它顯示了我的SQL數據庫中的所有數據,並沒有過濾。 – ashlrem

-2

把一個文本框爲了使u型

String sql = "SELECT studentno, lastname, firstname, middlename FROM student 
       WHERE lastname=?"; 
pst = conn.prepareStatement(sql); 
pst.setString(1,jTextField1.getText()); 
result = pst.executeQuery();