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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Flash_2oo9
3 / 3 / 0
Регистрация: 31.10.2012
Сообщений: 142
#1

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

23.09.2014, 23:26. Просмотров 1018. Ответов 15
Метки нет (Все метки)

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

Создание класса для работы с несколькими таблицами БД - C#
Добрый вечер форумчане. Помогите с такой как я думаю не большой(но у меня к сожалению не как не выходит) проблемой. Нужно сделать так...

Какой класс в qt nредназначен для работы с таблицами? - C++ Qt
ребят, какой класс в qt nредназначен для работы с таблицами , что то я не могу нигде найти , . И можете скинуть документацию nо этому...

Как правильно организовать отношение между таблицами(тематика: График работы сотрудника). - SQL Server
Добрый день! Народ есть такая проблема, с которой я изменяю жене, работе и жизни в целом. Но ничего не поделаешь, как уперлось в...

Как организовать добавление в один класс элементов другого в ходе работы программы - C++
есть 2 класса Страна и континент. Подскажите, как организовать добавление страны в список в ходе работы программы (функция CreateCountry). ...

Как создать базу данных в Sql с несколькими таблицами - MySQL
Срочно нужно было сделать в sql свою бд,состоящую из трех-четырех таблиц..помгитее плииззз кому не лень..совсем не знаю,подскажите как по...

Как работать с несколькими связанными между собой таблицами? - C++ Builder БД
Доброго время суток, форумчяни! Я вот пытаюсь разобраться как можно работать с несколькими таблицами которые между собой связаны (база...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 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,518
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,518
24.09.2014, 13:43 #6
Цитата Сообщение от DevExp Посмотреть сообщение
в базах других приложений
Речь не об этом! База - это файлик. При открытии базы он захватывается. Но один SQLiteOpenHelper "по учебнику" работает только с одним файликом. А у меня их несколько - для разных целей. Хочу брать данные из одной и другой и получать сводную таблицу...
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
24.09.2014, 15:34 #7
Цитата Сообщение от Tester64 Посмотреть сообщение
Хочу брать данные из одной и другой и получать сводную таблицу...
А если просто получить данные из первой, запомнить их, открыть вторую БД, получить данные из нее и сбросить оба результата в виртуальную таблицу?)
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
24.09.2014, 16:30 #8
Цитата Сообщение от Spelcrawler Посмотреть сообщение
А если просто получить данные из первой, запомнить их, открыть вторую БД, получить данные из нее и сбросить оба результата в виртуальную таблицу?
Предлагаете сделать выборку из первой базы размером в несколько тысяч записей(или миллионов), а потом поштучно добавить эти записи в виртуальную таблицу второй базы для работы... Идея была работь с двумя базами как с одной! А не только односторонняя выгрузка. В документации SQLite на сайте видел подобные инструкции, но не пробовал!
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
24.09.2014, 16:52 #9
Что-то даже не могу представить зачем вообще приложению две БД. Создайте лучше еще 100 таблиц в первой)
DevExp
6 / 6 / 2
Регистрация: 27.05.2013
Сообщений: 59
24.09.2014, 16:54 #10
ему левые sqlite бд файлы надо открывать
смотрелку хочет сделать похоже
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,518
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,518
25.09.2014, 10:06 #14
Цитата Сообщение от DevExp Посмотреть сообщение
подгружать xml
Это как? Особый метод отправить данные из xml в sqlite? Если база в несколько мегабайт все равно долго импорт будет происходить. Да и зачем? Сжимаются примерно одинаково. Но SQLite файл сразу готов для работы.

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

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

Как обратиться к слайду (т.е. сделать активным следующий слайд для работы с таблицами на нём)? - MS Powerpoint
Добрый день! Подскажите, пожалуйста, как обратиться к следующему слайду для работы с таблицами на нём Т.е. таблицы назвал на...

Как организовать страничку с несколькими видюшками? - Flash
У меня есть страничка на флеше следующего формата: Смысл ее работы в следующем: В участках с 2 по 7 будут изображения, обозначающие...

Как грамотно организовать связь между таблицами - MS Access
Здравствуйте, у меня такое задание создать БД в Access. Проблема в том что я не знаю как опимально мэто сделать. База содержит в...

Как можно организовать иерархию классов для работы с графами - C#
Подскажите варианты того, как можно организовать иерархию классов для работы с графами (или создать интерфейс)? (полный, пустой,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.09.2014, 10:14
Ответ Создать тему
Опции темы

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