Mysql
 sql >> Baza danych >  >> RDS >> Mysql

najlepszy sposób na wywołanie dwóch serwerów bazodanowych

Załóżmy, że user_id jest 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)
}

EDYTUJ :jedno zapytanie dla wszystkich użytkowników zamiast jednego zapytania na użytkownika:

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

Należy pamiętać, że może się to nie powieść/działać niepoprawnie, ponieważ większość DB ma limit liczby elementów w IN SQL klauzula może zawierać. Również ta druga metoda może pozwolić na wstrzyknięcie SQL na %a wymiana.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę przerobić moje hasło do MySQL, abym mógł rake db:create on rails?

  2. Znaczenie n:m i 1:n w projekcie bazy danych

  3. Uwaga:Niezdefiniowana właściwość:stdClass::$user_id w C:\wamp\www\social\includes\class-query.php w wierszu 134

  4. Java PreparedStatement narzeka na składnię SQL podczas wykonywania()

  5. PHP/SQL:Używając tylko jednego zapytania, WYBIERZ wiersze z dwóch tabel, jeśli dane znajdują się w obu tabelach, lub po prostu WYBIERZ z jednej tabeli, jeśli nie