2014-12-13 41 views
0

如標題所示,我已經盡力將用戶輸入與我的數據庫進行比較,它與真正的輸入一起工作。但是,當我的數據庫中不存在輸入時,我不知道我的下面的代碼中有什麼問題,請幫助。如何比較用戶輸入和我的數據庫在java

private class da implements ActionListener{ 
public void actionPerformed(ActionEvent e){ 
      Connection con = null; 

     String url = "jdbc:mysql://localhost:3306/المكتبة"; 
     String unicode = "?useUnicode=yes&characterEncoding=UTF-8"; 
    try{ 
con = DriverManager.getConnection(url+unicode,"root",""); 

PreparedStatement upd = con.prepareStatement("SELECT * FROM library WHERE author =?'"); 
upd.setString(1,name.getText()); 
ResultSet rs = upd.executeQuery(); 


while(rs.next()){ 
    String authorname = rs.getString("author"); 
    String bookname = rs.getString("bookname"); 
    String categort = rs.getString("category"); 
    int isbn = Integer.parseInt(rs.getString("ISBN")); 
    String data = "اسم المؤلف: "+authorname+"\n"+"اسم الكتاب: "+bookname+"\n"+"التصنيف: "+categort+"\n"+"ISBN: "+isbn; 


if(name.getText().equals(authorname)) 
    txt.setText(data); 
else 
    txt.setText("no matches"); 
+0

它工作時輸入相等,但不能輸入時不匹配 – Forenkazan 2014-12-13 03:08:41

回答

0

您應該在if/else之前關閉while()循環。

雖然它並不是最漂亮的代碼。

+0

它只是我的代碼的一個示例,錯誤不是與編譯器 – Forenkazan 2014-12-13 03:15:31

0

的問題是關係到本節:

while(rs.next()){ 

// ... other code 

if(name.getText().equals(authorname)) 
    txt.setText(data); 
else 
    txt.setText("no matches"); 

如果數據庫中沒有發現的name.getText()值,rs.next()永遠不會返回true。由於您已將if區塊包含在while循環的內部,因此如果在數據庫中找不到匹配項,它將永遠不會執行。你可以解決這個問題的一些辦法,一個辦法就是做這樣的事情,而不是:

boolean has_results = rs.next(); 

if(has_results){ 

    do { 
     // ... your loop code 
    }while(rs.next()); 

}else { 
    text.setText("No Matches"); 
} 

在這段代碼,如果rs.next()回報false第一個電話,我們什麼都不知道,我們從數據庫返回。否則,正常循環。在這種情況下,我將循環改爲後檢查do...while循環,因爲我們現在要在循環結束時檢查rs.next()

說明:This answer演示了另一種檢查結果集是否包含行的方法。

+0

謝謝,它的工作原理。但我無法爲其他領域做到,你知道該怎麼做嗎? – Forenkazan 2014-12-13 04:29:48

+0

爲其他領域做了什麼? – 2014-12-13 04:33:04

+0

這個工作只針對一個字段(「我的意思是」),當我嘗試對其他字段執行相同的功能時,它不執行。但是,當我將2個聽衆連接到一個按鈕時,它不起作用,但它對每個按鈕的單個聽衆都有效 – Forenkazan 2014-12-13 04:41:00