Правильное использование Sqlite на Android (SQLiteOpenHelper, подключения, основной поток и т.д.)
Я ищу информацию о SQLite на Android и прочитал некоторые главы некоторых книг по программированию на Android, но я не знаю, как правильно использовать SQLite на Android правильно.
Я разрабатываю приложение, в котором есть действия, службы и BroadcastReceivers, и все они должны читать и записывать данные в базе данных. Поэтому у меня есть несколько вопросов:
- Где лучше всего создать экземпляр
SQLiteOpenHelper
? Я читал об этом, и кажется, что лучший способ - иметь только SQLiteOpenHelper
для всего приложения.
- Когда и где мне нужно получить объект
SQLiteDatabase
, вызвав dbHelper.getReadableDatabase()
(или getWritableDatabase
)? Мне нужно сделать это по каждому запросу, закрыв его после каждого запроса?
- Я прочитал, что я никогда не должен выполнять операции с базой данных в основном потоке, поэтому я создаю задачу Async для каждой операции с базой данных, которую я делаю в Activity, это лучший способ?
Ответы
Ответ 1
Большая часть вопроса довольно субъективна. Но позвольте мне взять удар по нему
Где лучше всего создать экземпляр SQLiteOpenHelper? я читал об этом, и кажется, что лучший способ - это только SQLiteOpenHelper для всего приложения.
Вы можете создать класс в своем проекте, который расширяет SQLiteOpenHelper
. Это полезно, если вы будете получать доступ к одной и той же базе данных в нескольких Activities
в своем приложении.
Когда и где, мне нужно получить объект SQLiteDatabase, вызвав dbHelper.getReadableDatabase() (или getWritableDatabase)? мне нужно сделать он по каждому запросу, закрывая его после каждого запроса?
Это будет сделано в классе, который расширяет SQLiteOpenHelper. Например: (это выдержка из статьи Vogella, приведенной в конце этого сообщения)
public void open() throws SQLException {
database = dbHelper.getWritableDatabase();
}
И в Управлении, которое будет использовать класс:
CommentsDataSource datasource = new CommentsDataSource(this);
datasource.open();
И соединение Cursor
и Database
, сделанное из Activity
, должно быть закрыто, когда вы закончите с извлечением, модификацией, добавлением и т.д. с помощью Database
.
Приведенный выше код будет иметь смысл, если вы прочтете веб-страницу, связанную позже.
Я читал, что я никогда не должен делать операции с базой данных в основном thread, поэтому я создаю задачу Async для каждой операции с базой данных, которую я делаю в Деятельности это лучший способ?
В идеале, да. Я лично рекомендую использовать Asynctask, особенно когда вы будете иметь дело с большими наборами записей.
Наконец, я бы посоветовал вам прочитать в этом уроке Ларс Фогелла: http://www.vogella.com/articles/AndroidSQLite/article.html. Он рассмотрит большинство ваших проблем и запросов. Удачи.: -)
Ответ 2
1. Где лучше всего создать экземпляр SQLiteOpenHelper?
SQLiteOpenHelper помогает вам подключаться к таблицам, которые вы указали с помощью него. Таким образом, вы можете определить все свои таблицы в одном классе SQLiteOpenHelper.
2. Когда и где мне нужно получить объект SQLiteDatabase, вызвав dbHelper.getReadableDatabase() (или getWritableDatabase)?
Всякий раз, когда вы хотите записывать данные в определенных таблицах, вам нужно вызвать getWritableDatabase, и для чтения из них вам понадобится getReadableDatabase
Вы можете создавать функции CRUD (Создать, Восстановить, Обновить, Удалить) для этих целей.
3. Никогда не делайте операций с базой данных в основном потоке!
Я не уверен в этом.
ну вот ссылка для вас, чтобы начать с SQLite-
http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/