我的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>
答案 0 :(得分:0)
表格FlightRoute
未在您的查询中正确加入,因此您将获得一个交叉产品。添加适当的连接条件(即fr.something = s.something
)