簡體   English   中英

如何在java中將用戶輸入與我的數據庫進行比較

[英]How to compare user input with my database in 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");

問題與本節有關:

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()

注意:此答案演示了另一種檢查結果集是否包含行的方法。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM