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

ध्यान रखें कि यह विफल हो सकता है/गलत काम कर सकता है क्योंकि अधिकांश डीबी की एक सीमा होती है कि कितने आइटम SQL IN खंड शामिल हो सकता है। साथ ही यह दूसरी विधि %a . पर SQL इंजेक्शन की अनुमति दे सकती है प्रतिस्थापन।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. इस कनेक्शन के साथ पहले से ही एक खुला डेटा रीडर जुड़ा हुआ है जिसे पहले बंद किया जाना चाहिए + asp.net mvc

  2. स्थापना के बाद mysql sql मोड को कैसे बदलें

  3. QMYSQL क्वेरी विफल

  4. क्लाउड फायरस्टोर डेटाबेस में डेटा जोड़ना

  5. क्या COUNT(*) हमेशा परिणाम देता है?