Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

cách tốt nhất để gọi hai máy chủ cơ sở dữ liệu

Giả sử user_id là một 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)
}

CHỈNH SỬA :một truy vấn cho tất cả người dùng thay vì một truy vấn cho mỗi người dùng:

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

Hãy nhớ rằng điều này có thể không thành công / hoạt động sai vì hầu hết DB có giới hạn cho số lượng mục của một SQL IN mệnh đề có thể bao gồm. Ngoài ra, phương pháp thứ hai này có thể cho phép chèn SQL vào %a thay thế.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phần 1:jQuery -> MySQL -> jQuery -> HTML

  2. Urlencode () có đủ tốt để ngăn chặn tất cả các cuộc tấn công SQL injection trong năm 2011 không

  3. MySQL composite duy nhất trên FK's

  4. Làm cách nào để sử dụng phần trăm (%) trong LIKE mà không bị coi là ký tự đại diện?

  5. MYSQL tránh chèn cùng một hàng hai lần