2015-03-31 54 views
0

我是新來的Java和MySQL,我目前正在努力完成我的任務,雖然我有一個IF函數的問題。我想根據客戶ID將查詢結果從MySQL打印到控制檯,如果客戶ID不存在,則顯示錯誤消息。Java如果 - 否則功能不能正常工作

如果在數據庫中找到ID,則顯示數據,但如果ID不存在,則不會發生任何情況。任何幫助將不勝感激!

package cos106_assignment_april2015; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import java.sql.*; 
import javax.swing.border.*; 


public class ProductSearch { 

JFrame f = new JFrame("Ray Sport Inc. | Product Search"); 
JTextField custIDF; 

public ProductSearch() { 
    JLabel search1, customer, empty; 
    search1 = new JLabel("Enter Customer ID number to search for a customer's product records. Results print to console."); 
    customer = new JLabel("Customer ID:"); 
    empty = new JLabel(""); 

    custIDF = new JTextField(); 

    JButton search, back; 
    search = new JButton("Search"); 
    back = new JButton("Back to Menu"); 

    search.addActionListener(new ActionListener() { 
    public void actionPerformed (ActionEvent e){ 

    String custID = custIDF.getText(); 

    try { 
    System.out.println("Establishing connection to the MySQL Database..."); 
    Connection conn = null; 
    Statement stmt =null; 
    String url = "jdbc:mysql://localhost:3306/raysportdb"; 
    String driver = "com.mysql.jdbc.Driver"; 
    String userName = "root"; 
    String password = "password"; 
    Class.forName(driver).newInstance(); 
    conn = DriverManager.getConnection(url,userName,password); 
    stmt = conn.createStatement(); 
    System.out.println("Connection established. Connected to the customer and item records."); 

     String sql = "select a.Customer_ID, c.Order_ID, b.Product_ID, \n" + 
        "b.Product_Name, b.Product_Type, c.Order_Quantity \n" + 
        "from customer a, product b, orders c \n" + 
        "where a.Customer_ID = '"+custID+"' and b.Product_ID = c.Product_ID \n" + 
        "and b.Product_Type = c.Product_Type_FK and a.Customer_ID = c.Customer_ID \n" + 
        "group by c.Order_ID order by a.Customer_ID"; 

     ResultSet result = stmt.executeQuery(sql); 
     while(result.next()){ 
      String cid = result.getString("a.Customer_ID"); 
      if (custID.equals (cid)) { 

       String f2 = result.getString("c.Order_ID"); 
       String f3= result.getString("b.Product_ID"); 
       String f4 = result.getString("b.Product_Name"); 
       String f5 = result.getString("b.Product_Type"); 
       String f6 = result.getString("c.Order_Quantity"); 

       System.out.println(""); 
       System.out.println("Customer ID\t:"+ cid); 
       System.out.println("Order ID\t:" + f2); 
       System.out.println("Product ID\t:" + f3); 
       System.out.println("Product Name\t:" + f4); 
       System.out.println("Product Type\t:" + f5); 
       System.out.println("Order Quantity\t:" + f6); 
       System.out.println(""); 
            } 
      else { 
       JOptionPane.showMessageDialog(null, "Customer ID does not exist!", "Error", JOptionPane.ERROR_MESSAGE); 
       System.out.println("Customer ID does not exist in the database."); 
       } 
      } 
     conn.close(); 
    } 

    catch (Exception err) { 
     System.err.println("Error:"+ err.getMessage()); 
          }}}); 


    back.addActionListener(new ActionListener() { 
    public void actionPerformed (ActionEvent e){ 
    new Menu(); 
    f.setVisible(false);}}); 

    JPanel p = new JPanel(); 
    p.setLayout(new GridLayout(6,2)); 
    p.setBorder(new TitledBorder("Product Search")); 
    p.add(search1); 
    p.add(empty); 
    p.add(customer); 
    p.add(custIDF); 
    p.add(search); 
    p.add(back); 

    f.getContentPane().add(p); 
    f.pack(); 
    f.setSize(585,284); 
    f.setLocationRelativeTo(null); 
    f.setVisible(true); 
    f.setResizable(false); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 



} 

public static void main(String ar[]){ 

new ProductSearch(); 
} 
} 
+1

您的'if'在循環中。如果你得到了多個結果,你的'else'將爲每個與你要查找的id不匹配的對象激發。 – khelwood 2015-03-31 13:39:57

+0

我懷疑if-else語句什麼都不做。它看起來更多,你沒有得到任何結果。另外,您應該在執行sql查詢時嘗試檢查[PreperedStatement](http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html) – SomeJavaGuy 2015-03-31 13:40:25

回答

0

你必須在你的while循環之外粘貼你的代碼。當你的查詢沒有返回結果時,它將永遠不會遍歷你的循環。您可以執行以下操作:

if (result.next()){ 
// your code goes here 
} else { 

JOptionPane.showMessageDialog(null, "Customer ID does not exist!", "Error", JOptionPane.ERROR_MESSAGE); 
System.out.println("Customer ID does not exist in the database."); 
} 
0

你如果結果對象爲空(NOT NULL)while(result.next()){前檢查。 如前所述通過Java文檔:

boolean next() 
      throws SQLException 

從當前位置向前移一行移動光標。 A ResultSet光標最初位於第一行之前;首先調用下一個方法使第一行成爲當前行;第二次調用 使第二行成爲當前行,依此類推。

事實上,如果發現任何結果執行查詢你永遠也做不到的else 部分。