sql >> Base de Datos >  >> RDS >> Mysql

mejor manera de llamar a dos servidores de base de datos

Suponiendo user_id es 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)
}

EDITAR :una consulta para todos los usuarios en lugar de una consulta por usuario:

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

Tenga en cuenta que esto puede fallar/funcionar mal porque la mayoría de las bases de datos tienen un límite para la cantidad de elementos que un SQL IN cláusula puede incluir. Además, este segundo método podría permitir una inyección SQL en el %a reemplazo.