2013-12-09 118 views
-1

我遇到了一些麻煩,我使用SQL編碼來管理通過Java的數據庫(通過發送數據庫執行查詢)。通過'連接表'(包含其他表的ID)從數據庫檢索信息?

我們的項目的目標是建立一個航班預訂系統,以防萬一我希望通過他/她的電子郵件搜索客戶來獲取與某個客戶相關的一些出發物品。

在我們的數據庫中,我們的Seat表具有用於出發(其僅包含數據庫中的時間和日期)和客戶的外鍵標識。我的想法是使用這些ID來連接我的搜索,最終將客戶連接到相關的出發信息。

這裏是我的代碼截至目前:

@Override 
public ArrayList<Departure> getCustomerDepartures(String email) 
{ 
    try 
    { 
     ArrayList<Departure> departures = new ArrayList<>(); 

     String query = "SELECT DISTINCT fr.DepartureLocation, fr.Destination, 
d.Date, d.Time FROM Departure d, Customer c, Seat s, FlightRoute fr WHERE 
c.Id = s.CustomerId AND d.Id = s.DepartureId AND c.Email = ?;"; 
     PreparedStatement ps = con.prepareStatement(query); 
     ps.setString(1, email); 

     ResultSet rs = ps.executeQuery(); 
     while(rs.next()) { 
      String departureLocation = rs.getString("DepartureLocation"); 
      String destination = rs.getString("Destination"); 
      int date = rs.getInt("Date"); 
      String time = rs.getString("Time"); 
      departures.add(new Departure(departureLocation, destination, date, time)); 
     } 
     return departures; 
    } catch (SQLException ex) 
    { 
     System.out.println("Could not collect departure data, associated with customer."); 
    } 
    return null; 
} 

我從這個收穫是什麼,當我嘗試在GUI中顯示在JList爲出發的選項(在作出離開的對象的ArrayList成一個離隊對象數組和一串字符串(用於顯示出發信息)),它總是給我9個不同的選項JList(因此,返回的ArrayList包含9個離境對象),具有不同的值。

+0

我認爲這個問題更適合http://codereview.stackexchange.com/ –

回答

0

FlightRoute未正確連接到您的查詢中,因此您正在獲得與其交叉的產品。添加適當的連接條件(即和fr.something = s.something

+0

這樣做是有道理的,是的。我在我的代碼中的其他地方也有類似的搜索,它列出了基於特定搜索條件的偏離,但是在那個例子中,我沒有d.FlightRouteId = Departure.Id條件,它似乎完美地工作,我不知道這是否至少是唯一的問題。你能想到別的嗎?一旦手頭有代碼,我會在明天嘗試一下您的建議,並確認此帖,如果它解決了我遇到的問題。 感謝您的回覆。 :) – Kirluu

+0

好吧,我進入了你所建議的狀態,它確實似乎已經使所有的工作都應該如此!非常感謝! :) – Kirluu

相關問題