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

Как организовать класс для работы с несколькими таблицами - Android

Войти
Регистрация
Восстановить пароль
 
Flash_2oo9
3 / 3 / 0
Регистрация: 31.10.2012
Сообщений: 142
23.09.2014, 23:26     Как организовать класс для работы с несколькими таблицами #1
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private class DbOpenHelper extends SQLiteOpenHelper{
 
        public DbOpenHelper(Context context, final String DB_NAME, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, DB_NAME, factory, version);
        }
 
        @Override
        public void onCreate(SQLiteDatabase db) {
            final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " + FIRST_TABLE_NAME + " ( _id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + FIRST_WORD + " TEXT, " +
                    SECOND_WORD + " TEXT, " + CORRECT_FIRST_WORDS + " INTEGER, " + CORRECT_SECOND_WORDS + " INTEGER, " + FIRST_COMMENT + " TEXT, " + SECOND_COMMENT + " TEXT )";
            db.execSQL(CREATE_TABLE);
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            final String DROP_TABLE = "DROP TABLE IF EXISTS " + FIRST_TABLE_NAME ;
            db.execSQL(DROP_TABLE);
            onCreate(db);
        }
    }
Есть класс DbOpenHelper для работы с БД, все работает отлично. В другом классе создаю экземпляр данного и дальше работаю. Но вот возник вопрос, появилось вторая таблица в бд, а в onCreate() и onUpgrade() я работаю только с FIRST_TABLE_NAME. Как мне работать с другой таблицей?
Мне кажется создавать для каждой таблицы свой класс - плохой вариант. Ведь как я понимаю если данные методы пустые, то читать с бд можно, но писать в нее нельзя.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2014, 23:26     Как организовать класс для работы с несколькими таблицами
Посмотрите здесь:

Как по уму организовать циклическую работу службы? Android
Android Основной класс, для наследования от него данных для всех остальных классов
Android Подскажите как правильно организовать работу с БД
Как организовать фоновую задачу Android
Как организовать сервис? Android
Как лучше организовать напоминалку? Android
Android CustomView как организовать скрол?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
24.09.2014, 08:59     Как организовать класс для работы с несколькими таблицами #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Допишите сразу после инициализации первой таблицы, вторую.
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
24.09.2014, 09:44     Как организовать класс для работы с несколькими таблицами #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
private class DbOpenHelper extends SQLiteOpenHelper{
 
        public DbOpenHelper(Context context, final String DB_NAME, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, DB_NAME, factory, version);
        }
 
        @Override
        public void onCreate(SQLiteDatabase db) {
            final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " + FIRST_TABLE_NAME + " ( _id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + FIRST_WORD + " TEXT, " +
                    SECOND_WORD + " TEXT, " + CORRECT_FIRST_WORDS + " INTEGER, " + CORRECT_SECOND_WORDS + " INTEGER, " + FIRST_COMMENT + " TEXT, " + SECOND_COMMENT + " TEXT )";
            db.execSQL(CREATE_TABLE);
 
        final String CREATE_SECOND_TABLE = "CREATE TABLE IF NOT EXISTS " + SECOND_TABLE_NAME + " ( _id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + FIRST_WORD + " TEXT, " +
                    SECOND_WORD + " TEXT, " + CORRECT_FIRST_WORDS + " INTEGER, " + CORRECT_SECOND_WORDS + " INTEGER, " + FIRST_COMMENT + " TEXT, " + SECOND_COMMENT + " TEXT )";
            db.execSQL(CREATE_TABLE);
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            final String DROP_TABLE = "DROP TABLE IF EXISTS " + FIRST_TABLE_NAME ;
            db.execSQL(DROP_TABLE);
 
            final String DROP_TABLE = "DROP TABLE IF EXISTS " + SECOND_TABLE_NAME ;
            db.execSQL(DROP_TABLE);
            onCreate(db);
        }
    }
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
24.09.2014, 11:47     Как организовать класс для работы с несколькими таблицами #4
Встречный вопрос: А можно так с двумя БАЗАМИ работать? В описании команд SQLite встречал что можно, но примеров на яве/андроид не встречал...
Иногда нужно сделать сводную выборку или перекинуть данные между таблицами разных баз одним запросом...
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
24.09.2014, 11:53     Как организовать класс для работы с несколькими таблицами #5
если я не ошибаюсь, то в одном приложении ты можешь создать только одну базу. Чтобы работать с таблицами в базах других приложений, то тебе надо root
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
24.09.2014, 13:43     Как организовать класс для работы с несколькими таблицами #6
Цитата Сообщение от DevExp Посмотреть сообщение
в базах других приложений
Речь не об этом! База - это файлик. При открытии базы он захватывается. Но один SQLiteOpenHelper "по учебнику" работает только с одним файликом. А у меня их несколько - для разных целей. Хочу брать данные из одной и другой и получать сводную таблицу...
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
24.09.2014, 15:34     Как организовать класс для работы с несколькими таблицами #7
Цитата Сообщение от Tester64 Посмотреть сообщение
Хочу брать данные из одной и другой и получать сводную таблицу...
А если просто получить данные из первой, запомнить их, открыть вторую БД, получить данные из нее и сбросить оба результата в виртуальную таблицу?)
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
24.09.2014, 16:30     Как организовать класс для работы с несколькими таблицами #8
Цитата Сообщение от Spelcrawler Посмотреть сообщение
А если просто получить данные из первой, запомнить их, открыть вторую БД, получить данные из нее и сбросить оба результата в виртуальную таблицу?
Предлагаете сделать выборку из первой базы размером в несколько тысяч записей(или миллионов), а потом поштучно добавить эти записи в виртуальную таблицу второй базы для работы... Идея была работь с двумя базами как с одной! А не только односторонняя выгрузка. В документации SQLite на сайте видел подобные инструкции, но не пробовал!
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
24.09.2014, 16:52     Как организовать класс для работы с несколькими таблицами #9
Что-то даже не могу представить зачем вообще приложению две БД. Создайте лучше еще 100 таблиц в первой)
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
24.09.2014, 16:54     Как организовать класс для работы с несколькими таблицами #10
ему левые sqlite бд файлы надо открывать
смотрелку хочет сделать похоже
dmitre
 Аватар для dmitre
10 / 10 / 3
Регистрация: 02.11.2013
Сообщений: 53
24.09.2014, 16:59     Как организовать класс для работы с несколькими таблицами #11
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Что-то даже не могу представить зачем вообще приложению две БД. Создайте лучше еще 100 таблиц в первой)
На самом деле лучше так сделать (для себя "разделить" такие-то таблицы относятся к такой "базе", а другие-то таблицы - к такой-то).
Либо, когда надо с одной базы переключиться в другую делать чтото типа DBName.close().
Смысл делать две базы?
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
25.09.2014, 08:07     Как организовать класс для работы с несколькими таблицами #12
Цитата Сообщение от dmitre Посмотреть сообщение
Смысл делать две базы?
Что-бы иметь возможнось их разнести при желании. Или наоборот, вторую обновлять пакетом через сеть.

1) на устройстве работают 2 юзера - для каждого своя база. По желанию директора база юзера№2 переносится на другое устройство без потерь и сложностей - просто архивом через сеть. 3я база - это настройки обоих юзеров под ЭТО устройство.

2) Одна для настроек и пометок юзера, а вторая - справочник высылаемый сервером (лекарства больницы, сборники рецептов, поварская книга). Справочник большой, упаковывается и высылается целиком заменяя все старые данные. Высылать его в xml для дальнейшего импорта - долго.

Пока мне это не надо, но теоретически ВЗМОЖНА такая ситуация...
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
25.09.2014, 08:15     Как организовать класс для работы с несколькими таблицами #13
Не пробовал не импортировать в базу из xml, а просто подгружать xml
Таким образом проблема с долгой загрузкой решится. Ведь твои базы только ты видишь юзерам всё равно лишь бы работало...

Добавлено через 1 минуту
а при передаче через сеть помещай xml в zip архив
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
25.09.2014, 10:06     Как организовать класс для работы с несколькими таблицами #14
Цитата Сообщение от DevExp Посмотреть сообщение
подгружать xml
Это как? Особый метод отправить данные из xml в sqlite? Если база в несколько мегабайт все равно долго импорт будет происходить. Да и зачем? Сжимаются примерно одинаково. Но SQLite файл сразу готов для работы.

Допустим Вы хотите сделать СОВМЕСТНУЮ выборку - рецепт из одной базы (внешней), а "пожелания" из другой (юзерской). Результат в одну красивую таблицу-курсор для адаптера... А через неделю-месяц получате архив с более полной книгой рецептов, частично исправленную (сразу sqlite базой). И не нужена своя обработка для импорта "только новых" данных. Или ожидания 15-60 минут на полный экспорт изменений в "единую базу".

Если поискать, всегда можно придумать применение для подобной технологии... Пока альтернативой вижу только одновременное удержание двух баз, выборки в обоих и "слив их вместе" в виртуальную таблицу для быстрых запросов. Но это потребует очень много памяти.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
25.09.2014, 10:14     Как организовать класс для работы с несколькими таблицами #15
А база рецептов где? Если на сервере, то можно выгружать только то что изменилось и добавлять в базу. А базу для пользователя тоже можно "отделить" написав пару методов для выборки всех данных и записи в тот же xml, и для считывания этих данных на другом устройстве что-то написать. Это конечно трудозатратнее, но и работать все будет быстрее.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2014, 20:17     Как организовать класс для работы с несколькими таблицами
Еще ссылки по теме:

Android Подскажите, как организовать свое обучения
Android Как лучше организовать массив String[] из 60 элементов?
Android Как подключить библиотеки для работы с файлами?
Android Как организовать еще одно место для обрабатывания процедур?
Как организовать повторение будильника через setExact()? Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
25.09.2014, 20:17     Как организовать класс для работы с несколькими таблицами #16
Цитата Сообщение от Spelcrawler Посмотреть сообщение
А база рецептов где? Если на сервере, то можно выгружать только то что изменилось и добавлять в базу. А базу для пользователя тоже можно "отделить" написав пару методов для выборки всех данных и записи в тот же xml, и для считывания этих данных на другом устройстве что-то написать. Это конечно трудозатратнее, но и работать все будет быстрее.
Я же вроде обьяснил! Есть (допустим) база рецептов. Заполняется операторами (шеф поворами) на сервере и выгружается в SQLite базу, готовую для подключения к андроиду. Иногда она непредсказуемо меняется (любая запись может быть исправлена на сервере). Твое устройство может быть с базой любой "старости". Твоя программа ее только читает для совместных курсоров с твоими личными пожеланиями (в холодильнике есть: морковка, петрушка и лед - получить возможные рецепты на этих компонентах). На любом моменте можно обновить базу рецептов с сервера скачав с нуля все 5-50 мегабайт с новой базой, а не только 250 новых записей и 3000 исправленых. ИМХО это иногда проще чем искать отличия и их поштучно добавлять в базу. Особенно если изменений слишком много. При больших изменениях скачивание займет 5 минут, а интеграция по одной займет 50 минут. Плюс методика хранения и поиска отличий в базе для выгрузки юзерам только их изменений.

ИМХО было бы проще подключить обновленный "спрвочник" рецептов (в виде 2й базы) после скачивания более новой версии без лишних телодвижений... И сделать что-то вроде Select * From base1.holodilnik, base2.rezept where base1.holodilnik.product_id=base2.rezept.product_id.

А еще я приводил пример с личными базами юзеров, Которые можно просто перекинуть файликами чем играться с выгрузкой личных записей из общей базы.
Yandex
Объявления
25.09.2014, 20:17     Как организовать класс для работы с несколькими таблицами
Ответ Создать тему
Опции темы

Текущее время: 22:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru