通过“连接表”(包含其他表的id)从数据库中检索信息?

时间:2013-12-09 17:44:16

标签: java sql database

我的SQL编码遇到了一些麻烦,我用它来通过Java管理数据库(通过发送数据库执行查询)。

我们项目的目标是建立一个航班预订系统,如果我想通过他/她的电子邮件搜索客户,我想获得一些与某个客户相关的离境对象。< / p>

在我们的数据库中,我们的座位表具有出发(仅包含数据库中的时间和日期)和客户的外键ID。我的想法是使用这些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放入离境对象数组中,我从中获得了什么)字符串数组(用于显示出发信息)),它总是在JList中为我提供了9个不同的选项(因此,返回的ArrayList包含9个离开对象),具有不同的值。 / p>

1 个答案:

答案 0 :(得分:0)

表格FlightRoute未在您的查询中正确加入,因此您将获得一个交叉产品。添加适当的连接条件(即fr.something = s.something