Mysql
 sql >> база данни >  >> RDS >> Mysql

най-добрият начин за извикване на два сървъра на бази данни

Да предположим, че 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

Имайте предвид, че това може да се провали/работи погрешно, защото повечето DB имат ограничение за това колко елемента SQL IN клаузата може да включва. Също така този втори метод може да позволи SQL инжектиране на %a замяна.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Точното значение на клаузата за външния ключ на MySQL „при ограничение за изтриване“.

  2. Производителност на MySQL в оператор OR

  3. MySQL група по идентификатор и последна дата и час

  4. Разширението mysql е отхвърлено и ще бъде премахнато в бъдеще:вместо това използвайте mysqli или PDO

  5. PHP MySql:Отпечатване на дърво - Отметка за родителско дете