【发布时间】:2013-04-11 08:19:17
【问题描述】:
我正在编写一个汽车租赁应用程序,我的数据库中有两个表,Cars 和 Bookings。以下是每个字段:
Cars
CarID | Make | Model | Year
Bookings
BookingID | CarID | UserID | StartDate | EndDate | Paid
我正在编写一个名为getCars() 的方法,它返回Car 类型的ArrayList。在我的Car 类中,我有另一个ArrayList,名为bookings,它保存了该车的所有预订。我可以在Car 的构造函数中插入预订,如下所示:
public Car(Integer carId, String make, String model, Integer year, ArrayList<Booking> bookings) {
this.carId = carId;
this.make = make;
this.model = model;
this.year = year;
this.bookings = bookings;
}
但是,我无法从我的数据库中获取汽车和预订信息,然后从结果中构造正确的 Car 对象。我正在尝试这个:
String query = "SELECT * FROM Cars INNER JOIN Bookings ON Bookings.CarID = Cars.CarID";
PreparedStatement pstmt = conn.prepareStatement(query);
results = pstmt.executeQuery();
ArrayList<Booking> bookings = new ArrayList<Booking>();
while(results.next()) {
bookings.add(new Booking(
results.getDate("StartDate"),
results.getDate("EndDate"),
results.getBoolean("Paid"),
results.getString("HouseName"),
results.getString("AddrFirstLine"),
results.getString("AddrSecondLine"),
results.getString("PostCode")
));
cars.add(new Car(
results.getInt("CarID"),
results.getString("Make"),
results.getString("Model"),
results.getInt("Year"),
bookings
));
}
它有点工作,但它会产生重复的结果。如果一辆车有两个预订,它将为同一辆车创建两个Car 实例,而不是一个具有多个Car.bookings 的实例。它还将为每个Car 提供数据库中的每个预订,如下所示:
在这种情况下如何正确构造Car 对象?
谢谢!
【问题讨论】: