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

Обсуждение уроков
Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

ID = 42

Сообщение doter.ua » 23 ноя 2013, 16:13

Почему индексация начинается не с 1 (или 0) а сразу с 42?

Изображение
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: ID = 42

Сообщение trew » 23 ноя 2013, 16:19

doter.ua писал(а):Почему индексация начинается не с 1 (или 0) а сразу с 42?

Изображение
Потому что для поля ID указан автоинкремент (авто прибавление).
Поэтому, даже после очистки таблицы, счетчик по-прежнему прибавляется.
Если хотите, чтобы начинался с 1, удалите и создайте таблицу заново.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

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

Сообщение Digetix » 26 ноя 2013, 01:08

Foenix писал(а):весь лог приведи, это у тебя лишь последствия ошибки
Это лог с эмулятора. На реальном устройстве пока нет возможности проверить
11-25 21:59:04.889: E/SQLiteLog(1195): (14) os_unix.c:30191: (2) open(/sdcard/data/myDB) -
11-25 21:59:05.108: E/SQLiteDatabase(1195): Failed to open database '/sdcard/data/myDB'.
11-25 21:59:05.108: E/SQLiteDatabase(1195): android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:709)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at com.project.test.MainActivity$DBHelper.<init>(MainActivity.java:385)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at com.project.test.MainActivity.onCreate(MainActivity.java:226)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.app.Activity.performCreate(Activity.java:5133)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.app.ActivityThread.access$600(ActivityThread.java:141)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.os.Handler.dispatchMessage(Handler.java:99)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.os.Looper.loop(Looper.java:137)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.app.ActivityThread.main(ActivityThread.java:5103)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at java.lang.reflect.Method.invokeNative(Native Method)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at java.lang.reflect.Method.invoke(Method.java:525)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-25 21:59:05.108: E/SQLiteDatabase(1195): at dalvik.system.NativeStart.main(Native Method)
11-25 21:59:05.438: E/AndroidRuntime(1195): FATAL EXCEPTION: main
11-25 21:59:05.438: E/AndroidRuntime(1195): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.project.test/com.project.test.MainActivity}: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.app.ActivityThread.access$600(ActivityThread.java:141)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.os.Handler.dispatchMessage(Handler.java:99)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.os.Looper.loop(Looper.java:137)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.app.ActivityThread.main(ActivityThread.java:5103)
11-25 21:59:05.438: E/AndroidRuntime(1195): at java.lang.reflect.Method.invokeNative(Native Method)
11-25 21:59:05.438: E/AndroidRuntime(1195): at java.lang.reflect.Method.invoke(Method.java:525)
11-25 21:59:05.438: E/AndroidRuntime(1195): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-25 21:59:05.438: E/AndroidRuntime(1195): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-25 21:59:05.438: E/AndroidRuntime(1195): at dalvik.system.NativeStart.main(Native Method)
11-25 21:59:05.438: E/AndroidRuntime(1195): Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:709)
11-25 21:59:05.438: E/AndroidRuntime(1195): at com.project.test.MainActivity$DBHelper.<init>(MainActivity.java:385)
11-25 21:59:05.438: E/AndroidRuntime(1195): at com.project.test.MainActivity.onCreate(MainActivity.java:226)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.app.Activity.performCreate(Activity.java:5133)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
11-25 21:59:05.438: E/AndroidRuntime(1195): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
11-25 21:59:05.438: E/AndroidRuntime(1195): ... 11 more

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

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

Сообщение trew » 26 ноя 2013, 10:23

Digetix писал(а):
Foenix писал(а):весь лог приведи, это у тебя лишь последствия ошибки
Это лог с эмулятора. На реальном устройстве пока нет возможности проверить
11-25 21:59:04.889: E/SQLiteLog(1195): (14) os_unix.c:30191: (2) open(/sdcard/data/myDB) -
11-25 21:59:05.108: E/SQLiteDatabase(1195): Failed to open database '/sdcard/data/myDB'.
11-25 21:59:05.108: E/SQLiteDatabase(1195): android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
11-25 21:59:05.108: E/SQLiteDatabase(1195): at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
Failed to open database '/sdcard/data/myDB'
Т.е. не находит базу данных.
Вам знакома команда:
String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
а в коде пишите путь руками, а он на разный устройствах android - разный!

вместо этого
'/sdcard/data/myDB'
должно быть
'/mnt/sdcard/data/myDB' ---- но этот путь нужно получать из строки extStorageDirectory (см. выше)
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

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

Сообщение Digetix » 26 ноя 2013, 12:17

trew писал(а):Вам знакома команда:
Нет, не знакома. Как ей пользоваться в моем случае?

Уже нашёл, буду пробовать

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

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

Сообщение trew » 26 ноя 2013, 12:45

Digetix писал(а):
trew писал(а):Вам знакома команда:
Нет, не знакома. Как ей пользоваться в моем случае?

Уже нашёл, буду пробовать
Это строка была взята из вашего кода :)
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

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

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

Сообщение Foenix » 26 ноя 2013, 12:57

Digetix писал(а):
trew писал(а):Вам знакома команда:
Нет, не знакома. Как ей пользоваться в моем случае?

Уже нашёл, буду пробовать
Failed to open database '/sdcard/data/myDB'.

Суть в том, что сам путь неправильный. Данные находятся в папке data/data/имя_твоего_приложения/databases
R.id.team

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

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

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

Сообщение trew » 26 ноя 2013, 13:07

Foenix писал(а):
Digetix писал(а):
trew писал(а):Вам знакома команда:
Нет, не знакома. Как ей пользоваться в моем случае?

Уже нашёл, буду пробовать
Failed to open database '/sdcard/data/myDB'.

Суть в том, что сам путь неправильный. Данные находятся в папке data/data/имя_твоего_приложения/databases
Если посмотреть предыдущее сообщение пользователя
viewtopic.php?f=3&t=124&start=400
видно, что он свою базу разместил на SD.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

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

Сообщение Digetix » 26 ноя 2013, 14:08

trew писал(а):но этот путь нужно получать из строки extStorageDirectory
trew писал(а):Это строка была взята из вашего кода :)
Вот я у вас спрашивал как правильно мне указать место куда сохранить базу на карту памяти
И ещё возник вопрос: как быть с устройствами, у которых есть карта памяти и устройствами, у которых есть внутренняя память?

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

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

Сообщение Foenix » 26 ноя 2013, 14:25

http://developer.android.com/guide/topi ... esExternal
вот тут подробно описано как аутентично работать с карточкой
R.id.team

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

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

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

Сообщение Digetix » 26 ноя 2013, 14:34

Ничего толкового для себя там не нашёл.

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

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

Сообщение trew » 26 ноя 2013, 14:37

Digetix писал(а):
trew писал(а):но этот путь нужно получать из строки extStorageDirectory
trew писал(а):Это строка была взята из вашего кода :)
Вот я у вас спрашивал как правильно мне указать место куда сохранить базу на карту памяти
И ещё возник вопрос: как быть с устройствами, у которых есть карта памяти и устройствами, у которых есть внутренняя память?
Можно взять из урока 75 фрагмент кода для sd-карты.
как быть с устройствами, у которых есть карта памяти и устройствами, у которых есть внутренняя память?
В этой теме, пользователь Foenix
написала: "Если есть карта, то этот путь ведет к ней, если нету - то на локальный."
(я не проверял)
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

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

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

Сообщение Foenix » 26 ноя 2013, 14:47

Digetix писал(а):Ничего толкового для себя там не нашёл.
ну что поделаешь? значит тебя уже не спасти
R.id.team

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

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

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

Сообщение Digetix » 26 ноя 2013, 15:09

Foenix писал(а):ну что поделаешь? значит тебя уже не спасти
Ну а вы можете привести цитату из статьи, которая пригодиться в моем случае?

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

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

Сообщение Foenix » 26 ноя 2013, 15:13

английский знаешь?
R.id.team

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

Аватара пользователя
kifir
Сообщения: 11
Зарегистрирован: 06 окт 2013, 19:03

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

Сообщение kifir » 03 дек 2013, 20:24

table.addView(row); - добавляем в таблицу новую строку. Но это добавление в конец таблицы, а как добавить после или перед нужно строкой?

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

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

Сообщение Foenix » 03 дек 2013, 21:27

откуда данная цитата? Что значит добавление в конец таблицы? Сортировать нужно в запросе. При таких вопросах сразу видно, что вам нужно начинать с самого начала - теория баз данных.
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 » 09 дек 2013, 15:11

Возник вопрос. А можно как то скрестить SQLiteDatabase.query и команду Analyze, что бы понять, где запрос тормозит?
Как лучше всего производить оптимизацию запросов, смотреть, что именно тормозит в нём (у меня например поиск по таблице, которая связана со второй таблицей через JOIN, а потом ещё и по двум столбцам сортируется), строить индексы?
Последний раз редактировалось Newbilius 11 дек 2013, 11:08, всего редактировалось 2 раза.

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

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

Сообщение rezak90 » 09 дек 2013, 15:31

лучше покажи структуру таблиц и сам запрос, думаю мы сможем подсказать
R.id.team
Политика на форуме запрещена

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

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

Сообщение Foenix » 09 дек 2013, 16:10

нет, для этого нужно отработать запрос на каком-нибудь менеджере и реальных данных отдельно.
А вообще, правила построения индексов не секрет, смотрите в интернете. Только имей ввиду, что индексирование влияет и на другие запросы (может тормозить)
R.id.team

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

Ответить