sql >> Databasteknik >  >> RDS >> Mysql

bästa sättet att anropa två databasservrar

Antag user_id är en 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)
}

REDIGERA :en fråga för alla användare istället för en fråga per användare:

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

Tänk på att detta kan misslyckas/fungera fel eftersom de flesta DB har en gräns för hur många objekt en SQL IN klausul kan innehålla. Även denna andra metod kan tillåta en SQL-injektion på %a ersättare.



  1. Få Json-nycklar i en MySQL för ett visst värde

  2. Hur renderar man postgresql-resultat i ejs med nod pg?

  3. Vad och när ska jag ange setFetchSize()?

  4. Hur mycket minne kommer att upptas av ett nollvärde i en DB?