2. SQLite. Что требуется?
●
Описание моделей и проектирование базы
данных на их основе
●
Описание классов для управления данными
в базе
●
Привязка данных к представлению
(пользовательскому интерфейсу)
4. SQLiteDatabase. Методы.
void execSQL(String sql) // выполнение sql-запроса, который не является
выборкой (т.е. без select). Это CREATE TABLE, INSERT, DELETE и так
далее.
Cursor query(String table, String[] columns, String selection, String[]
selectionArgs, String groupBy, String having, String orderBy, String limit) //
важный метод. Используется для выборки.
Cursor rawQuery(String sql, String[] selectionArgs) // обычный sql-запрос.
5. Методы.
insert() // возвращает id вставленной строки
update() // возвращает количество обновленных
строк
replace() // замена (редко использовал)
delete() // возвращает количество удаленных строк
6. Методы.
IsOpen() // true, если база была не закрыта
IsReadOnly() // true, если база была открыта
только для чтения
7. Методы. Транзакция.
beginTransaction() // начало
endTransaction() // конец
inTransaction() // true, если открыта транзакция
setTransactionSuccessful() // только после вызова
этого метода транзакция будет закомичена.
8. Создание. Способ №1.
static SQLiteDatabase openDatabase(String path,
SQLiteDatabase.CursorFactory factory, int flags)
//Пример
SQLiteDatabase mDatabase =
SQLiteDatabase.openDatabase("/data/data/com.example.app/datab
ases/my.db", null, SQLiteDatabase.CREATE_IF_NECESSARY);
9. Способ №1. Парамтеры.
path // путь к файлу базы данных. Путь для любой базы данных имеет вид:
«/data/data/<package_name>/databases. <package_name> – имя пакета, которое вы
указывали при создании проекта.
factory // По умолчанию стоит null.
flags // флаги или константы, определенные внутри класса SQLiteDatabase. Их
всего четыре: CREATE_IF_NECESSARY (создавать базу, если это нужно),
OPEN_READONLY (открыть только для чтения), OPEN_READWRITE (читать и
писать), NO_LOCALIZED_COLLATORS (открыть без поддержки локализации)
11. Способ №2. Парамтеры.
name // имя базы данных, уникальное в рамках приложения
mode // константа, для указания режима (MODE_PRIVATE
или 0 – по умолчанию, MODE_WORLD_READABLE для
чтения, MODE_WORLD_WRITEABLE для записи)
factory // пока не трогаем, ставим null
12. Способ №2. Методы.
boolean deleteDatabase(String name) // удаляет базу
по имени. True, если завершилось успешно.
File getDatabasePath(String name) // возвращает
абсолютный путь по имени базы
14. Способ №3. Методы.
void close() // закрыть все открытые соединения
SQLiteDatabase getReadableDatabase() //
возвращает базу для чтения
SQLiteDatabase getWritableDatabase() // база для
чтения и записи
onOpen(SQLiteDatabase db) // вызывается после
того, как база будет открыта
15. Способ №3. Методы.
onCreate(SQLiteDatabase db) // вызывается после
того, как база создана в первый раз. Здесь
создаются необходимые таблицы.
onUpgrade(SQLiteDatabase db) // вызывается,
когда базе нужен апгрейд. Здесь удаляются
таблицы, создаются новые, добавляются поля и
так далее.
17. Способ №3. Параметры.
context // контекст приложения. Именно через его метод
openOrCreateDatabase() и работает SQLiteOpenHelper
name // имя базы
factory // null
version // версия базы. Используется, когда схему базы
данных нужно обновить.
18. Способ №3.
class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "data";
private static final String DATABASE_CREATE = "create table test_table (_id integer primary key
autoincrement, some_test text not null);";
DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); }
@Override
public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE); }
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS notes");
onCreate(db);
}
}
19. Способ №3.
// Получение базы
DatabaseHelper mDbHelper = new DatabaseHelper(mCtx);
SQLiteDatabase mDb = mDbHelper.getWritableDatabase();
20. Проблемы
database is locked // возникает при многопоточной записи в базу.
database is closed // может возникнуть при работе с базой из разных
частей программы, например, Activity и Service.
corrupted database // возникает, если файл базы данных был испорчен
либо пользователем, либо при неожиданном прерывании записи в базу
(выключение телефона, ошибка OS, нехватка пространства, битые
сектора на SD карте и т.д.)
низкая производительность при работе с базой данных // может
возникнуть из-за внутренних блокировок, конкурирующих транзакциях,
высоком уровне журналирования, отсутствии пакетной обработки.
21. Домашнее задание
1. Реализовать свою базу телефонного
справочника.
2. Реализовать базу, которая будет
применяться в вашем проекте.