Giả sử user_id
là một long
.
PreparedStatement psUserLocation = conB.prepareStatement("SELECT location FROM B.users WHERE user_id = ?");
while(rs.next()) {
//call select statement for database B to get the location for each user id
long userId = rs.getLong(user_id);
psUserLocation.setLong(1, userId)
ResultSet userLocation = ps.executeQuery();
// Do whatever with the location(s)
}
CHỈNH SỬA :một truy vấn cho tất cả người dùng thay vì một truy vấn cho mỗi người dùng:
private final static String QUERY = "SELECT user_id, location FROM B.users WHERE user_id IN (%a)";
StringBuilder userList = new StringBuilder();
while(rs.next()) {
long userId = rs.getLong(user_id);
userList.append(userId);
if (!rs.isLast()) {
userList.append(",");
}
}
String usersLocationQuery = QUERY.replaceAll("%a", userList.toString());
PreparedStatement psUsersLocation = conB.prepareStatement(usersLocationQuery);
ResultSet usersLocation = psUsersLocation.executeQuery();
// Do whatever with the locations
Hãy nhớ rằng điều này có thể không thành công / hoạt động sai vì hầu hết DB có giới hạn cho số lượng mục của một SQL IN
mệnh đề có thể bao gồm. Ngoài ra, phương pháp thứ hai này có thể cho phép chèn SQL vào %a
thay thế.