410013796724260
• Webmoney
R335386147728
Z369087728698
Вернуться к описанию Хранение данных и файлов в Android
БД SQLite в AndroidПриложение Android может использовать базу данных SQLite для хранения больших объемов структурированных данных. SQLite — это лёгкая и очень быстрая система управления реляционными базами данных; это проект с открытыми исходными кодами, поддерживающий стандартные возможности обычного SQL (Structured Query Language). С помощью SQLite можно создавать для приложения независимые реляционные БД. По умолчанию все базы данных закрытые; доступ к ним могут получить только приложения, их создавшие. Физически каждая база данных состоит из двух файлов. Наименование первого файла, в котором хранятся все данные, соответствует имени базы данных. Второй файл — это журнал транзакций, включающий в наименование суффикс "-journal". В журнале хранится информация обо всех изменениях, внесенных в базу данных. Методы управления БД SQLiteНиже представлены методы взаимодействия приложения Android с базой данных SQLite. Пример использования SQLite в приложении Android рассмотрен здесь. В примере создается база данных, таблица, записи таблицы, а также удаляются записи таблицы, сама таблица и БД. При открытии БД, либо при создании с одновременным открытием методы возвращают объект типа SQLiteDatabase. Ниже в свернутом виде представлены методы создания и открытия БД. Методы создания и открытия БД // Методы открытия БД SQLiteDatabase openDatabase (path, factory, flags); SQLiteDatabase openDatabase (file, openParams ); SQLiteDatabase openDatabase (path, factory, flags, errorHandler); //--------------------------------------------------------- //----- Методы создания БД с одновременным открытием ------ /* * Equivalent to openDatabase(fpath, factory, * CREATE_IF_NECESSARY); */ SQLiteDatabase openOrCreateDatabase(file, factory); /* * Equivalent to openDatabase(path, factory, * CREATE_IF_NECESSARY, * errorHandler); */ SQLiteDatabase openOrCreateDatabase(path, factory, errorHandler); /* * Equivalent to openDatabase(path, factory, * CREATE_IF_NECESSARY) */ SQLiteDatabase openOrCreateDatabase(path, factory); В этих методах используются следующие параметры :
Методы создания БД с открытием эквивалентны методам открытия БД с флагом CREATE_IF_NECESSARY. Удаление БДПри удалении БД (файла базы данных) удаляется также и журнал протоколирования. Для удаления БД используется метод deleteDatabase объекта SQLiteDatabase : static boolean deleteDatabase(File file); Метод execSQLМетодом execSQL можно выполнить SQL-запрос, который не возвращает значений. Данный метод можно использовать для создания таблиц БД. При использовании execSQL для выполнения транзакций INSERT/UPDATE/DELETE результат выполнения будет неизвестен. void execSQL(String sql); void execSQL(String sql, Object[] bindArgs); // Выполнение SQL-запрос во всех соединениях с БД void execPerConnectionSQL(String sql, Object[] bindArgs); Пример создания таблицы БД и проверка наличия в БД созданной таблицы. SQLiteDatabase db; // Наименование БД String DB_NAME = "dbAPP"; // SQL-скрипт создания таблицы БД String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS users( " + "name varchar(128), " + "position varchar (64), " + "phone varchar (16))"; // SQL-скрипт проверки наличия таблицы String TABLE_CHECK = "select DISTINCT tbl_name " + "from sqlite_master " + "where tbl_name = '%s'"; // Создание БД с открытием db = openOrCreateDatabase(DB_NAME, MODE_PRIVATE, null); // Создание таблицы БД myDB.execSQL(CREATE_TABLE); // Проверка наличия таблицы Cursor cursor = db.rawQuery(TABLE_CHECK, null); boolean exists = cursor.getCount() > 0; Log.d("SQL", "Таблица существует : " + exists); Для проверки наличия таблицы в БД используется курсор android.database.Cursor, к рассмотрению которого мы и переходим. Извлечение информации с помощью android.database.CursorПри выполнении запросов типа SELECT сервер SQL возвращает набор записей. Для чтения одной или нескольких записей необходимо иметь некоторый указатель (pointer), которым определять требуемую для чтения запись. Таким указателем, позволяющим выбирать в наборе запись, является android.database.Cursor, который имеет соответствующие методы для перемещения по набору. Кроме этого, Cursor включает методы, для получения разнотипных значений в полях записей. Методы android.database.Cursor
Добавление, обновление и удаление записейДля выполнения транзакций, связанных с выполнением insert/update/delete, можно использовать метод execSQL(sql) объекта SQLiteDatabase с точным определением выполняемого sql-выражения. Но лучше использовать методы insert/update/delete объекта SQLiteDatabase. Данные методы имеют преимущество - в случае insert/update они возвращают идентификатор _id измененной записи, подтверждающий успешность выполнения операции, или -1 в случае неудачного завершения транзакции. В случае удаления одной или нескольких записей методом delete возвращается значение, соответствующее количеству затронутых записей, или -1. Для выполнения транзакций insert/update необходимо в качестве параметра использовать объект android.content.ContentValues, который определяет отдельную запись в таблице из набора полей. Конструкторы объекта ContentValues : public ContentValues(); public ContentValues(int size); public ContentValues(ContentValues from); Пример добавления записи. ContentValues record = new ContentValues(); record.put("name" , "Остап Бендер" ); record.put("position", "Менеджер" ); record.put("phone" , "+7(999) 888-77-66"); long rc = db.insert(TABLE_NAME, null, record); Log.d(LOG_TAG, "rc = " + rc); Методы ContentValues
Пример использования SQLite в Android рассмотрен здесь. |