gpt4 book ai didi

java - 使用 JOIN 从单个 SQL 查询将汽车预订添加到汽车对象

转载 作者:行者123 更新时间:2023-12-01 04:45:28 25 4
gpt4 key购买 nike

我正在编写一个汽车租赁应用程序,我的数据库中有两个表:CarsBookings。以下是每个字段:

Cars
CarID | Make | Model | Year

Bookings
BookingID | CarID | UserID | StartDate | EndDate | Paid

我正在编写一个名为 getCars() 的方法,它返回 Car 类型的 ArrayList。在我的 Car 类中,我有另一个名为 bookingsArrayList,它保存该车的所有预订。我可以在 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 提供每个预订,如下所示:

Screenshot

在这种情况下如何正确构造 Car 对象?

谢谢!

最佳答案

我假设carsList<Car> 。对于第一个问题,您有两种解决方案:

  • 替换List<Car>Map<Integer, Car>并在将汽车添加到 map 之前检查汽车是否已经存在:

Integer carId = results.getInt("CarID");

if (!cars.containsKey(carId)) {
cars.put(carId, new Car(...));
}
  • 替换List<Car>Set<Car>并实现equals()hashCode()Car ,这样 Set不会添加第二个 Car如果它已经包含另一个 Car等于您要添加的内容

对于你的第二个问题,我建议你使用第二个 Map<Integer, List<Booking>>其中包含每个 Car 的预订列表编号:

Map<Integer, List<Booking>> bookingsPerCar = ...;

// In your loop:
List<Booking> bookings = bookingsPerCar.get(results.getInt("CarID"));
if (bookings == null) {
bookings = new ArrayList<>();
bookingsPerCar.put(results.getInt("CarID"), bookings);
}

bookings.add(new Booking(...));

关于java - 使用 JOIN 从单个 SQL 查询将汽车预订添加到汽车对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15943886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com