ANDROID: ЗБЕРЕЖЕННЯ ДАНИХ В БАЗАХ ДАНИХ SQLЗбереження даних в базі даних ідеально підходить для структурованих або повторюваних даних, наприклад, контактної інформації. Даний урок припускає, що ви знайомі з базами даних SQL в цілому і допоможе почати роботу з базами даних SQLite на Android. API-інтерфейси, які треба буде використовувати з базами даних на Android доступні в пакеті android.database.sqlite. ВИЗНАЧЕННЯ SCHEMA ТА CONTRACTОдним з основних принципів баз даних SQL є schema: офіційна заява про те, як організована база даних. Schema відображається у звітності SQL, яку ви використовуєте для створення бази даних. Ви можете знайти це корисним для створення класу компаньйона, відомого як клас contract, який явно вказує розташування вашої schema систематичним і само-документованим чином. Примітка: При реалізації інтерфейсу BaseColumns ваш внутрішній клас може успадковувати поля первинного ключа під назвою _ID, тому деякі класи Android, такі як адаптери курсору, будуть чекати, щоб його отримати. Це не обов'язково, але може допомогти вашій базі даних гармонійно працювати з фреймворком Android. Приклад фрагменту, який визначає ім’я таблиці та імена стовпців для однієї таблиці: public final class FeedReaderContract { СТВОРЕННЯ БАЗИ ДАНИХ З ВИКОРИСТАННЯМ SQL HELPERПісля того, як визначили, як виглядає ваша база даних, необхідно реалізувати методи, які створюють і підтримують бази даних і таблиць. Ось деякі типові визначення для створення і видалення таблиці: private static final String TEXT_TYPE = " TEXT"; Так само, як файли, які ви зберігаєте на внутрішньому сховищі пристрою, Android зберігає бази даних на приватному дисковому просторі, який пов'язаний з додатком. Дані будуть в безпеці, тому що за замовчуванням ця ділянка не доступна для інших додатків. Примітка: Тому, що вони можуть бути тривалими, переконайтеся, що викликаєте getWritableDatabase() або getReadableDatabase() у фоновому потоці, наприклад, з AsyncTask або IntentService. Щоб використовувати SQLiteOpenHelper, створіть підклас, який перекриває методи зворотного виклику onCreate(), onUpgrade() і onOpen(). Ви також можете здійснити onDowngrade(), але це не обов'язково. public class FeedReaderDbHelper extends SQLiteOpenHelper { Щоб отримати доступ до бази даних, створіть екземпляр підкласу SQLiteOpenHelper: FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(getContext()); РОЗМІЩЕННЯ ІНФОРМАЦІЇ В БАЗІ ДАНИХВставка даних в базу даних здійснюється передаванням об'єкта ContentValues в метод insert(): // Отримуємо сховище даних в режимі запису Перший аргумент для insert() є просто ім'я таблиці. Другий аргумент містить ім'я стовпця, в якому фреймворк можете вставити NULL у випадку, якщо ContentValues порожнє (якщо ви вставляєте "null", то фреймворк не буде вставляти рядок, коли немає значення). ЧИТАННЯ ІНФОРМАЦІЇ З БАЗИ ДАНИХЩоб прочитати з бази даних, використайте метод query(), передавши йому свої критерії відбору та потрібні стовпці. Метод поєднує в собі елементи insert() і update(), за винятком списку стовпців, визначаючи дані, які хочете отримати, а не дані для вставки. Результати запиту повертаються в об'єкті Cursor: SQLiteDatabase db = mDbHelper.getReadableDatabase(); Щоб подивитися на рядок у cursor, використовуйте один з методів кроку Cursor, який ви повинні завжди викликати, перш ніж почати читати значення. Як правило, ви повинні почати з виклику moveToFirst(), який поміщає "положення читання" на перший запис в результатах. Для кожного рядка можете прочитати значення стовпця, викликавши один з методів get Cursor, таких як getString() або getLong(). Для кожного з методів get ви повинні пройти позицію індексу стовпця, який бажаєте, яку можете отримати, викликавши getColumnIndex() або getColumnIndexOrThrow(). Наприклад: cursor.moveToFirst(); ВИДАЛЕННЯ ІНФОРМАЦІЇ З БАЗИ ДАНИХДля видалення рядків з таблиці необхідно надати критерії відбору, які ідентифікують рядки. API бази даних надає механізм для створення критеріїв відбору, який захищає від ін'єкції SQL. Механізм ділить специфікацію вибору на вибір пункту і вибір аргументів. Пункт визначає стовпці для перегляду, а також дозволяє об'єднати тести стовпців. Аргументи – це значення для перевірки того, з чим пов'язані в пункті. Тому, що результат не обробляється так само, як звичайне визначення SQL, це буде імунітетом до ін'єкції SQL. // Визначити 'where' частину запиту. ОНОВЛЕННЯ БАЗИ ДАНИХЯкщо вам необхідно змінити підмножину значень бази даних, використайте метод update(). SQLiteDatabase db = mDbHelper.getReadableDatabase(); (Джерело: developer.android.com) |