Mysql
 sql >> Base de données >  >> RDS >> Mysql

meilleur moyen d'appeler deux serveurs de base de données

Supposons user_id est un 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)
}

MODIFIER  :une requête pour tous les utilisateurs au lieu d'une requête par utilisateur :

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

Gardez à l'esprit que cela peut échouer/fonctionner mal car la plupart des bases de données ont une limite pour le nombre d'éléments qu'un IN SQL clause peut inclure. De plus, cette deuxième méthode pourrait permettre une injection SQL sur le %a remplacement.