Java If-else函数无法正常工作

时间:2015-03-31 13:35:37

标签: java mysql function if-statement

我是Java和MySQL的新手,我目前正在尝试完成我的任务,尽管我遇到了IF功能问题。我想根据客户ID将MySQL的查询结果打印到控制台,如果客户ID不存在,则显示错误消息。

如果在数据库中找到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();
 } 
}

2 个答案:

答案 0 :(得分:0)

如果结果对象为空,则必须在while(result.next()){之前检查(非空)。 正如Java Docs所述:

boolean next()
             throws SQLException
     

将光标从当前位置向前移动一行。一个   ResultSet游标最初位于第一行之前;该   首先调用方法接下来使第一行成为当前行;该   第二次调用使第二行成为当前行,依此类推。

事实上,如果发现执行查询的任何结果,您将永远无法访问else 部分。

答案 1 :(得分: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.");
}