2015-12-15 261 views
1
package userProfile; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.ArrayList; 

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 

public class Database extends JFrame implements ActionListener { 

     JFrame frame; 
     JButton search, mainMenu; 
     JComboBox fromLoc, toLoc, fromDate, fromTime; 
     JLabel fromLabel, toLabel, fromDateLabel, fromTimeLabel; 
     PreparedStatement ps = null; 
     Connection link; 
     ResultSet rs = null; 

    public Database() { 

     frame = new JFrame("Make a Reservation"); 
     frame.getContentPane().setLayout(null);  

     //Arrival date/time comboBoxes and labels 
     fromDateLabel = new JLabel("Departure Date"); 
     fromDateLabel.setBounds(50,230,100,30); 
     fromDate = new JComboBox(new String[]{"12/15/2015", 
        "12/21/2015", "12/21/2015", "12/24/2015"}); 
     fromDate.addActionListener(this); 
     fromDate.setBounds(50,200,100,30); 
     /* 
     fromTimeLabel = new JLabel("Departure Time"); 
     fromTimeLabel.setBounds(160,230,100,30); 
     fromTime = new JComboBox(new String[]{"13:00","15:00", "15:30", "08:00"}); 
     fromTime.addActionListener(this); 
     fromTime.setBounds(160,200,100,30); 
     */ 
     //Departure label and comboBox 
     fromLabel = new JLabel("Departure"); 
     fromLabel.setBounds(50,300,100,30); 
     fromLoc = new JComboBox(new String[]{"Atlanta", "Charleston", "New York", "Los Angeles", "Orlando", "San Francisco"}); 
     fromLoc.addActionListener(this); 
     fromLoc.setBounds(50,270,100,30); 

     toLabel = new JLabel("Arrival"); 
     toLabel.setBounds(160,300,100,30); 
     toLoc = new JComboBox(new String[]{"Atlanta", "Charleston", "New York", "Los Angeles", "Orlando", "San Francisco"}); 
     toLoc.addActionListener(this); 
     toLoc.setBounds(160,270,100,30); 

     search = new JButton("Ok"); 
     search.addActionListener(this); 
     search.setBounds(270,270,100,30); 

     //adding the buttons in frame 
     frame.getContentPane().add(fromDateLabel); 
     frame.getContentPane().add(fromDate); 
     frame.getContentPane().add(fromTimeLabel); 
     frame.getContentPane().add(fromTime); 
     frame.getContentPane().add(fromLabel); 
     frame.getContentPane().add(fromLoc); 
     frame.getContentPane().add(toLabel); 
     frame.getContentPane().add(toLoc); 
     frame.getContentPane().add(search); 

     frame.setSize(400,400); 
     frame.setVisible(true); 

      try { 
       // Driver for mysql 
       Class.forName("com.mysql.jdbc.Driver"); 
       // connection link obj 
       link = DriverManager.getConnection("jdbc:mysql://localhost:3306/world", "root", "root"); 
       // query statement obj 
      } catch (SQLException sqle) { 
       System.out.println("An error occurred.Maybe user/password is invalid"); 
       sqle.printStackTrace(); 
      } catch (ClassNotFoundException cfne) { 
       cfne.printStackTrace(); 
      } 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     JComboBox fromLoc = (JComboBox)e.getSource(); 
     String fromL = fromLoc.getSelectedItem().toString(); 
     JComboBox fromDate = (JComboBox)e.getSource(); 
     String fromD = fromDate.getSelectedItem().toString(); 
     JComboBox toLoc = (JComboBox)e.getSource(); 
     String toL = toLoc.getSelectedItem().toString(); 

     ArrayList<Flights> results = new ArrayList<>(); 

     try { 
     ps = link.prepareStatement("select * from flights where from_date = ? and from_loc = ? and to_loc = ?"); 
     ps.setString(1, fromD); 
     ps.setString(2, fromL); 
     ps.setString(3, toL); 
     rs = ps.executeQuery(); 

      while(rs.next()) { 

      Flights flight = new Flights(); 
      flight.setFromD(rs.getString("from_date")); 
      flight.setFromL(rs.getString("from_loc")); 
      flight.setToL(rs.getString("to_loc")); 

      results.add(flight); 
      } 

     } catch (SQLException sqle) { 
      System.out.println("An error occurred.Maybe user/password is invalid"); 
      sqle.printStackTrace(); 
     } 


    } 

} 

我在运行时遇到NullPointerException。该程序应该使用3个组合框中的数组中的硬编码字符串查询数据库,并将返回的字符串作为对象保存到ArrayList中。 请帮帮忙,再次感谢 Java:如何从JcomboBox返回JDBC查询

+0

查询结果不是在组合框中。它们在您的程序中,作为ResultSet的连续值。不清楚你在问什么。 – EJP

+0

感谢您的回复。我想我的第一个问题是如何在执行preparedStatement之后检索结果。 这是我第一次使用GUI和JDBC,并且我不完全熟悉我可以在ResultSet上调用的所有方法。 因此,如果我想从结果集中检索这些值,我可以在while循环中的ResultSet中调用toString吗? – Giolla

回答

0

我将建立一个飞行模型类,并使用它作为DTO。所以,在你的while(rs.next)我会使用结果实例化Flight对象并将它们添加到ArrayList<Flight>,这可以返回到您需要使用它的地方。 你的第三个问题我不太确定,因为我没有和Swing一起工作过很多。 希望我的回复对你有帮助。如果我误解了你的问题,请告诉我。

编辑:

甲DTO是用于包含和传输数据的数据传输对象。因此,一个飞行类看起来是这样的:

public class Flight{ 
public String fromD; 
public String fromL; 
public String toL;... 
//And so on 
//You also need setters and getters 
} 

然后在您的数据库类:

ArrayList<Flight> results = new ArrayList<>(); 
while(rs.next){ 
Flight flight = new Flight(); 
flight.setFromD(rs.getString("columnname")); 
//Same method for the other variables you need to set. 
results.add(flight); 
} 
+0

感谢您的回复。 DTO是一种中间元素吗?我想更具体地说,我正在寻找Syntax。我不知道我可以在ResultSet上调用哪些方法来创建可放入ArrayList的对象。 谢谢 – Giolla

+0

添加代码到原始回复而不是评论:)希望它澄清我的意思 –

+0

再次感谢你给我一个明确的方向。一个问题...我的方法从comboBox获取字符串是否正确? 我有一个字符串变量分配给comboBox.getSelectedItem()。toString() – Giolla