可以說我有四個表,我想閱讀:合併使用1三個查詢:*關係到一個查詢
客戶
customer_id, customer_name
1 Joe Bolggs
customer_orders
customer_id, order_no
----------------------------
1 1
1 2
1 3
customer_addresses
customer_id address
----------------------------
1 11 waterfall road
1 23 The broadway
customer_tel_no
customer_id number
----------------------------
1 523423423432
1 234342342343
上面所示的客戶信息(與ID = 1的顧客)要被存儲在Java對象如下所示
public class Customer{
String customer_id;
String customerName;
ArrayList<String> customerOrders;
ArrayList<String> customerAddress;
ArrayList<String> customerTelephoneNumbers;
}
唯一我可以想到的方式來獲得上述信息是通過使用三個查詢。原因是客戶表和其他每個表之間存在1:*關係。要得到的數據我這樣做是這樣的:
Customer customer = new Customer()
String customerSQL = "Select * from customer where customer_id = ?";
statement = getConnection().prepareStatement(contactsQuery);
statement.setString(1,1);
resultSet = statement.executeQuery();
while (resultSet.next()){
customer.customer_id = resultSet.get(1); //No getters/setters in this example
customer.customerName = resultSet.get(2);
}
String customerOrdersSQL = "Select * from customer_orders where customer_id = ?";
statement = getConnection().prepareStatement(customerOrdersSQL);
statement.setString(1,1);
resultSet = statement.executeQuery();
customer.customerOrders = new ArrayList();
while (resultSet.next()){
customer.customerOrders.add(resultSet.getString(2); // all the order numbers
}
String customerAddressesSQL = "Select * from customer_addresses where customer_id = ?";
statement = getConnection().prepareStatement(customerAddressesSQL);
statement.setString(1,1);
resultSet = statement.executeQuery();
customer.customerAddresses = new ArrayList();
while (resultSet.next()){
customer.customerAddresses.add(resultSet.getString(2); // all the addresses
}
String customerTelSQL = "Select * from customer_tel_no where customer_id = ?";
statement = getConnection().prepareStatement(customerTelSQL);
statement.setString(1,1);
resultSet = statement.executeQuery();
customer.customerTelephoneNumbers = new ArrayList();
while (resultSet.next()){
customer.customerTelephoneNumbers.add(resultSet.getString(2); // all the order numbers
}
上述問題是,我正在對數據庫進行三次調用。有沒有辦法可以將上述內容合併到一個查詢中?
我不能看到一個連接如何工作,因爲例如,customer和customer_orders之間的連接將爲customer_orders中的每一行返回一個客戶行。無論如何,我可以將上述三個查詢合併爲一個?
齊格:你寫 「的問題......是我拍三級調用數據庫」。爲什麼這是一個問題?如果您擔心代碼的冗長,請使用ORM框架(如@enno所示)。如果您擔心長期維護,也可以使用ORM框架。如果您擔心_potential_性能問題,請等到您看到實際的性能問題,然後重構(預測性能問題會導致不必要的複雜性)。 – netjeff