मान लीजिए user_id
एक 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)
}
संपादित करें :प्रति उपयोगकर्ता एक क्वेरी के बजाय सभी उपयोगकर्ताओं के लिए एक क्वेरी:
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
ध्यान रखें कि यह विफल हो सकता है/गलत काम कर सकता है क्योंकि अधिकांश डीबी की एक सीमा होती है कि कितने आइटम SQL IN
खंड शामिल हो सकता है। साथ ही यह दूसरी विधि %a
. पर SQL इंजेक्शन की अनुमति दे सकती है प्रतिस्थापन।