Урок 34. Хранение данных. SQLite

Обсуждение уроков
Newbilius
Сообщения: 12
Зарегистрирован: 26 авг 2013, 13:02

Re: Урок 34. Хранение данных. SQLite

Сообщение Newbilius » 11 дек 2013, 11:11

[удалено. мне стыдно.]
Последний раз редактировалось Newbilius 11 дек 2013, 14:37, всего редактировалось 1 раз.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 11 дек 2013, 12:00

о....
первое - у тебя какой опыт в БД? Если маленький - убери все свои индексы.
второе - структуру я не вижу, покажи СТРУКТУРУ таблиц.
третье - похоже, у тебя ID - строковая величина, а должна быть - целое, автоинкремент
пятое - бессмысленно делать индекс по ID, т.к. если это ID, то он автоматом primary key - индексируется!, а ты по нему еще один индекс зачем-то лепишь
шестое - в сложных запросах, где есть предложение where пробуют для ускорения делать ключи по...

хотя - все это не важно, у тебя, скорее всего, неправильная структура таблиц (раз) и неоптимизированный сам запрос (выдающий больше данных, чем необходимо).
ЗЫ седьмое - скорее всего, даже при идеальном запросе тормоза на старых телефонах останутся, т.к. телефоны на андроиде не предназначены для обработки баз данных, поэтому тут нельзя так "Разворачиваться" как на десктопе.
восьмое - у тебя БД где расположена? во внутренней памяти, или на карточке?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Newbilius
Сообщения: 12
Зарегистрирован: 26 авг 2013, 13:02

Re: Урок 34. Хранение данных. SQLite

Сообщение Newbilius » 11 дек 2013, 12:26

Выдающий больше данных, чем необходимо - данных ровно столько, сколько отображается в карточке, да и я проверял, число полей на скорость не влияет (в данном конкретном случае).

GUID указанный - это именно ID элемента на удаленном сервера, там используется ASP'шный UID, мне эти айдишники нужны для синхронизации, действительно нужны.
Уникальный id с автоинкрементом тоже есть, просто я его не использую, т.к. связи объектов он не отображает.

Вариант "совсем без индексов" тоже опробован, скорость работы ниже минимум в пару раз.

Каким образом структуру таблиц экспортировать в удобном для вас виде?

По индексам везде советы "помещайте в индекс поля, используемые в JOIN'ах, потом используемые в фильтре, и уже потом - для сортировки".

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 11 дек 2013, 13:11

используй свой GUID если они текстовые для синхронизации с сервером и только, а для запросов в локальной бд связывай по PK
8. если база на карте, то производительнсоти не жди.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 11 дек 2013, 13:13

число полей влияет на скорость, т.к. для любого доп. количества нужна память.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Newbilius
Сообщения: 12
Зарегистрирован: 26 авг 2013, 13:02

Re: Урок 34. Хранение данных. SQLite

Сообщение Newbilius » 11 дек 2013, 14:31

Посыпаю голову пеплом.
Уменьшение число получаемых полей (до 8 критичных) - скорость увеличилась с 600 мс до 100-150.
Причем все join'ы и прочее оставил на месте - не влияет более чем на 50 мс., и то в пределах погрешность. Только число вытягиваемых параметров влияет.
Самое обидное - я же проверял это уже! Видимо, проблема исключительно в кривых руках.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 11 дек 2013, 14:55

Скажу тебе, как только уберешь индексы свои и сделаешь нормальную связь по ID...
у меня 90 тыс записей сложным запросом из примерно 11 таблиц выбирается за мгновение (и отображается) на телефоне в том числе (правда андроид 4).
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение Nik » 11 дек 2013, 16:02

Foenix писал(а):Скажу тебе, как только уберешь индексы свои и сделаешь нормальную связь по ID...
у меня 90 тыс записей сложным запросом из примерно 11 таблиц выбирается за мгновение (и отображается) на телефоне в том числе (правда андроид 4).
Реально ли базу SQLite выкинуть в интернет и с нее обновлять данные приложения? Если да, как это реализовать?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 11 дек 2013, 16:33

нет, лучше использовать mySQL или какую-нибудь другую для таких целей.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение Nik » 11 дек 2013, 16:59

Foenix писал(а):нет, лучше использовать mySQL или какую-нибудь другую для таких целей.
А где про это почитать?На сколько отличается синтаксис?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 11 дек 2013, 17:10

да какой синтксис у баз данных? знание языка SQL с небольшими нюансами. А удаленная работа - одинаковая: отправить запрос, получить результат.
Где почитать - в гугле.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение rezak90 » 11 дек 2013, 17:25

Foenix писал(а):да какой синтксис у баз данных? знание языка SQL с небольшими нюансами. А удаленная работа - одинаковая: отправить запрос, получить результат.
Где почитать - в гугле.
ты не в духе сегодня? :?
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 11 дек 2013, 17:37

тут можно учебник расписать, только надо ли?
Я устала всех поддерживать, они сами в себя не верят.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

Re: Урок 34. Хранение данных. SQLite

Сообщение -Alex- » 12 дек 2013, 09:58

Добрый день!

Подскажите, пожалуйста, по следующему моменту: создал приложение, которое работает с БД. На эмуляторе всё хорошо, БД хранится в data/data и все данные считываются оттуда.
Но при конвертации проекта в файл apk и после установки на реальное устройсnво приложение пустое без БД и данные полностью отсутствуют.
Подскажите, пожалуйста, какой шаг я забыл сделать. Я так думаю, что необходимы дополнительные действия, которые вместе с файлом apk формируется и БД.

Заранее спасибо за помощь!

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 34. Хранение данных. SQLite

Сообщение KamiSempai » 12 дек 2013, 11:10

Возможно это поможет http://androidtutorials60.blogspot.ru/2013/03/1.html
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

Re: Урок 34. Хранение данных. SQLite

Сообщение -Alex- » 12 дек 2013, 12:21

KamiSempai писал(а):Возможно это поможет http://androidtutorials60.blogspot.ru/2013/03/1.html
к сожалению не помогло.
на эмуляторе все отлично, а на телефоне не видит программа значения из базы данных :(

может быть кто подскажет или может кто-нибудь сталкивался с такой проблемой?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 34. Хранение данных. SQLite

Сообщение KamiSempai » 12 дек 2013, 12:36

Что у вас в onCreate(SQLiteDatabase db)?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

Re: Урок 34. Хранение данных. SQLite

Сообщение -Alex- » 12 дек 2013, 12:54

KamiSempai писал(а):Что у вас в onCreate(SQLiteDatabase db)?
Но я ничего не создаю в самой программе. Я пользуюсь уже готовой базой данных, которую подгружаю вручную в data/data...
То есть я в программе только читаю данные.

Код: Выделить всё

		public void onCreate(SQLiteDatabase db) {
			// TODO Auto-generated method stub
			Log.d(LOG_TAG, "===Создаем новую ДБ===");

			db.execSQL("create table mytable ("
					+ "_id integer primary key autoincrement,"
					+ "engWord text," + "rusWord text, " + "indLearn text"
					+ ");");
		}
Интересно, вот в эклипсе данные БД лежат в data/data..., а вот на реальном устройстве, где лежат эти данные?
Может как-то эту БД надо дополнительно загружать на устройство?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 12 дек 2013, 13:42

-Alex- писал(а):
KamiSempai писал(а):Что у вас в onCreate(SQLiteDatabase db)?
Но я ничего не создаю в самой программе. Я пользуюсь уже готовой базой данных, которую подгружаю вручную в data/data...
То есть я в программе только читаю данные.

Код: Выделить всё

		public void onCreate(SQLiteDatabase db) {
			// TODO Auto-generated method stub
			Log.d(LOG_TAG, "===Создаем новую ДБ===");

			db.execSQL("create table mytable ("
					+ "_id integer primary key autoincrement,"
					+ "engWord text," + "rusWord text, " + "indLearn text"
					+ ");");
		}
Интересно, вот в эклипсе данные БД лежат в data/data..., а вот на реальном устройстве, где лежат эти данные?
Может как-то эту БД надо дополнительно загружать на устройство?
На устройстве у тебя "ничего", потому что рута нет. Ничего ты в этой папке не увидишь, потому что так устроена ос андроид.
Newbilius писал(а):[удалено. мне стыдно.]
:mrgreen: :mrgreen:
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

Re: Урок 34. Хранение данных. SQLite

Сообщение -Alex- » 12 дек 2013, 13:57

На устройстве у тебя "ничего", потому что рута нет
Подскажите, пожалуйста, в каком направлении мне стоит покопать (или почитать урок), чтобы решить эту проблему?

Как можно сделать, чтобы в apk-файл копировалась и БД (если это возможно)?
Или может мою БД надо как-то сохранять, например, на sdcard и оттуда читать данные в программу?

Спасибо.

Ответить