我是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();
}
}
答案 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.");
}