Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Ускорение SELECT запроса в SQLite - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Как из одного потока вызвать метод таким образом, чтобы он выполнялся в другом потоке http://www.cyberforum.ru/android-dev/thread1008717.html
Значит имеется некая активность, которая запускает сервер по нажатии кнопки, этот сервер в свою очередь запускает выполнение своей фоновой работы в отдельном потоке(при помощи AsyncTask), чтобы не...
Программирование Android Navigation Drawer или ViewPager Привет! Обращаюсь за советом. С помощью чего можно сделать аналог Navigation Drawer, но так чтобы при его закрытии DrawerLayout оставался частично открытым. Поясню, что хочется. Есть некая... http://www.cyberforum.ru/android-dev/thread1008685.html
GridView и ViewPager Программирование Android
Всем привет. У меня есть GridView, в котором можно, конечно же, тыкать на пункты списка и открывать новую активити: например, preview картинки в GridView, тыкаем, получаем новую активити с...
Программирование Android Звонилка, как заменить стандартное окно дозвона на собственное?
Написал звонилку типа: protected void onCreate(Bundle savedInstanceState) { Intent intent = getIntent(); String number = intent.getStringExtra("number"); Intent dial = new...
Программирование Android Проверка папки на изменения файлов http://www.cyberforum.ru/android-dev/thread1008256.html
Доброго времени суток.Хочу сделать мелкое приложения со следующими функциями. 1)Проверка папки на изменение файлов,создание или удаление 2)Если добавили то отправить этот файл на почту. Каким...
Программирование Android Eclipse, как изменить домен по умолчанию в имени пакета при создании проекта? При создании андроид проекта нужно указать имя пакета. По умолчанию там стоит com.example Можно ли изменить его на что-либо другое? подробнее

Показать сообщение отдельно
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110

Ускорение SELECT запроса в SQLite - Программирование Android

15.11.2013, 16:28. Просмотров 3635. Ответов 17
Метки (Все метки)

Добрый день! Имеется база на SQLite. Содержит следующую структуру таблиц:

Форум - Топик - Сообщения

При запросе одного форума, надо получить список топиков, и в каждом из топиком список сообщенией. В сумме таблицы содержат около 4 миллионов записей, но самая большая таблица "Сообщения".

Но при запросе хотя бы одного форума, программа обрабатывает это около 2х-3х минут, что очень долго. На компьютере на это уходит 3мс.

Вот мой код, может в нем что не так?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
    ArrayList<Forum> listForums = new ArrayList<Forum>();
        
        String[] whereArgs = new String[] {Long.toString(id)};
        String[] forums = new String[] {"id","name","deel"};
        Cursor cursor = database.query("forum", forums, "id = ?", whereArgs, null, null, null);
        cursor.moveToFirst();
        
        while (!cursor.isAfterLast()) 
        {
            Forum forum = new Forum();
            forum.setName(cursor.getString(1));
            forum.setOmschrijving(cursor.getString(2));
            
            ArrayList<Topic> listTopic = new ArrayList<Topic>();
            
                String[] whereArgsCat = new String[] {Integer.toString(cursor.getInt(0))};
                String[] topics = new String[] {"idTopic"};
                Cursor cursorCat = database.query("ForumTopic", topics, "idForum = ?", whereArgsCat, null, null, null);
                cursorCat.moveToFirst();
                while (!cursorCat.isAfterLast()) 
                {
                    Topic topic = new Topic();
                    topic.setName(cursorCat.getString(0));
                    ArrayList<Messages> listMessages = new ArrayList<Messages>();
                        String[] whereArgsVert = new String[] {Integer.toString(cursorCat.getInt(0))};
                        String[] vert = new String[] {"id","name","deel"};
                        Cursor cursorVert = database.query("message", vert, "id IN(SELECT idMessage FROM topicmessage where idtopic=?)", whereArgsVert, null, null, null);
                        cursorVert.moveToFirst();
                        
                        while (!cursorVert.isAfterLast()) 
                        {
                            Messages message = new Messages();
                            message.setVoorOmschrijving(cursorVert.getString(0));
                            message.setName(cursorVert.getString(1));
                            message.setOmschrijving(cursorVert.getString(2));
                            listBetekenis.add(message);
                            cursorVert.moveToNext();
                        }
                        cursorVert.close();
                        topic.setListBetekenis(listMessages);
                    listTopic.add(topic);
                    cursorCat.moveToNext();
                }
                cursorCat.close();
                forum.setListCategory(listTopic);
                listForums.add(forum);
            cursor.moveToNext();
            }
        cursor.close();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru