Как оптимизировать выбор данных из sqlite? - PullRequest
0 голосов
/ 01 сентября 2018

Мне было интересно, почему мой запрос такой медленный.

// Getting all Messages from room
public JSONObject getMsgsFromRoom(String room, int limit) throws JSONException {
    JSONObject data = new JSONObject();
    JSONArray dataArray = new JSONArray();
    JSONObject wrapper = new JSONObject();
    wrapper.put(TBL_MESSAGES, dataArray);
    //Select All Query
    //        String selectQuery = "SELECT * FROM 
    "+DatabaseHandler.TBL_MESSAGES+ " WHERE "+TBL_MESSAGES_COL_PHONE_NO+" = 
    '"+room+"' LIMIT "+limit;
    String selectQuery = "SELECT * FROM "+DatabaseHandler.TBL_MESSAGES+ " 
    WHERE "+TBL_MESSAGES_COL_CHATROOM_ID+" = '"+room+"' LIMIT "+limit;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // Looping through all records and adding to list(Array List)
    if (cursor.moveToFirst()){

        JSONArray value = new JSONArray();
        JSONArray sender_id = new JSONArray();
        JSONArray sender = new JSONArray();
        JSONArray status = new JSONArray();
        for (int i=0; i < limit; i++){
            sender_id.put(cursor.getString(cursor.getColumnIndex(TBL_MESSAGES_COL_SENDER_ID)));
            if (cursor.getString(cursor.getColumnIndex(TBL_MESSAGES_COL_SENDER_ID)).equals(getAllPrefs().getString("objectId"))){
                sender.put("1");
            }else{
                sender.put("0");
            }
            value.put(cursor.getString(cursor.getColumnIndex(TBL_MESSAGES_COL_VALUE)));
            status.put(cursor.getString(cursor.getColumnIndex(TBL_MESSAGES_COL_STATUS)));
            //                Log.e(TAG, "Messages : "+ data);
            Log.e("Database Handler", "Array "+String.valueOf(i)+" : "+ value);
            cursor.moveToNext();
        }
        data.put("value", value);
        data.put("sender", sender);
        data.put("sender_id", sender_id);
        data.put("status", status);
    }
    //Closing connection
    cursor.close();
    db.close();

    // Returning Vals
    return data;
}

Как его оптимизировать, потому что на каждую итерацию уходит почти 500 мс.

Это метод в моем классе обработчиков баз данных, который отвечает за получение сообщений из базы данных путем фильтрации их по идентификатору комнаты и ограничению.

EDIT

Это было утверждение if! Так почему же это так, если заявления такие медленные?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...