sql >> データベース >  >> RDS >> Mysql

2つのデータベースサーバーを呼び出すための最良の方法

    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)
    }
    

    編集 :ユーザーごとに1つのクエリではなく、すべてのユーザーに対して1つのクエリ:

    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にはSQLINのアイテム数に制限があるため、これは失敗/誤動作する可能性があることに注意してください。 句に含めることができます。また、この2番目の方法では、%aへのSQLインジェクションが可能になる場合があります。 交換。



    1. UnicodeDecodeError:'ascii'コーデックは位置47のバイト0x92をデコードできません:序数が範囲内にありません(128)

    2. 特定のタグを持つすべての投稿を取得し、SQLを使用して結果に他のすべてのタグを保持します

    3. Laravel 5でSQL結合クエリを作成するにはどうすればよいですか?

    4. Springを使用して出力パラメータとしてrefカーソルを使用してストアドプロシージャを呼び出すにはどうすればよいですか?