Съхраняване на данни в SQL база данни, Урок за разработка на приложения за Android

Този урок ще ви научи

Вие също трябва да прочетете

Запазването на данни в база данни е идеално за повтарящи се или структурирани данни, като например информация за контакт. Този курс предполага, че сте запознати с SQL базите данни като цяло и ще ви помогне да започнете с SQLite бази данни на Android. API-тата, които ще използвате за работа с база данни на Android, са налични в пакета android.database.sqlite.

Дефинирайте схеми и договори

Един от основните принципи на SQL базите данни е схемата: официално описание на това как е организирана базата данни. Схемата се отразява в SQL изразите, които използвате за създаване на базата данни. Може да намерите за полезно да създадете придружаващ клас, известен като договор, който изрично дефинира оформлението на вашата схема по систематичен и самодокументиращ се начин.

Договорният клас е контейнер за константи, които дефинират имена за URI, таблици и колони. Договорният клас позволява същите константи да се използват във всички други класове в същия пакет. Това ви позволява да промените името на колоната на едно място и да разпространите промяната във вашия код.

Един добър начин за организиране на договорен клас е да поставите дефиниции, които са глобални за цялата база данни на основното ниво на класа. След това създайте вътрешни класове за всяка от таблиците, които изброяват своите колони.

Забележка: Чрез прилагане на интерфейса BaseColumns, вашият вътрешен клас може да наследи поле за първичен ключ, наречено _ID, което някои класове на Android, като например курсори на адаптери, ще очакват. Това не е задължително, но може да помогне вашата база данни да работи в хармония с библиотеките на Android.

Например този фрагмент дефинира името на таблицата и имената на колоните за една от таблиците:

Създаване на база данни с SQL помощник

След като сте определили как изглежда вашата база данни, трябва да приложите методите, които създават и поддържат базата данни и таблиците. Ето някои типични заявки, които създават и премахват таблици:

Точно както файловете, които съхранявате на вашето устройство във вътрешна памет, Android съхранява вашата база данни в частна част от пространството за съхранение, свързано с приложението. Вашите данни са добре защитени, тъй като по подразбиране тази област не е достъпна за други приложения.

Полезен набор от API функции е наличен в класа SQLiteOpenHelper. Когато използвате този клас, за да получите препратка към база данни, системата изпълнява само потенциално отнемащи време операции за създаване и актуализиране на база данни, когато е необходимо, а не по време на стартиране на приложението. Всичко, което трябва да направите, е да извикате getWritableDatabase() или getReadableDatabase().

Забележка: те могат да бъдат дълги, уверете се, че извиквате getWritableDatabase() или getReadableDatabase() във фонова нишка, например като използвате AsyncTask или IntentService.

За да използвате SQLiteOpenHelper, създайте подклас, който претоварва методите за обратно извикване onCreate(), onUpgrade() и onOpen(). Можете също така да приложите onDowngrade(), но това не е задължително.

Например, тук е реализация на SQLiteOpenHelper, която използва някои от командите, показани по-горе:

За достъп до базата данни създайте екземпляр на подклас на SQLiteOpenHelper:

Поставете информация в базата данни

Вмъкнете данни в базата данни чрез предаване на обект ContentValues ​​на метода insert():

Първият аргумент заinsert() е само името на таблицата. Вторият аргумент съдържа името на колоната, в която библиотеката може да вмъкне нулева стойност, ако ContentValues ​​е празна (ако вместо това я зададете на "null", библиотеката няма да може да вмъкне ред, когато няма стойност).

Прочетете информация от базата данни

За да прочетете от базата данни, използвайте метода query(), като му предадете вашите критерии за избор и желани колони. Методът комбинира елементите на insert() и update(), но списъкът с колони дефинира данните, които искате да извлечете, а не да вмъкнете. Резултатите от заявката се връщат в обект Cursor.

За да видите стойностите на ред от данни в курсор, използвайте един от методите за преместване на курсора, който винаги трябва да извиквате, преди да започнете да четете стойности. Обикновено трябва да започнете с извикване на moveToFirst(), което поставя "прочетената позиция" в първия запис на резултата. За всеки ред можете да прочетете стойността на колоната, като извикате един от методите на курсора, за да получите стойностите, като getString() или getLong(). За всеки от гетерите трябва да подадете индекса на желаната позиция на колона, която можете да получите, като извикате getColumnIndex() или getColumnIndexOrThrow(). Например:

Премахване на информация от базата данни

За да премахнете ред от таблица, трябва да предоставите критерии за избор, които идентифицират редовете. API на базата данни предоставя механизъм за създаване на критерии за избор, който предпазва от SQL инжектиране. Механизмът разделя спецификацията за избор на заявка за избор и нейните аргументи. Заявката определя колоните, по които ще бъдат избрани записите, а също така ви позволява да зададете стойности за проверка по полета. Стойностите на аргумента за валидиране са свързани със заявката. защото резултатът не се обработва по същия начин като нормалнияSQL заявка, това предпазва от SQL инжектиране.

Актуализация на база данни

Когато трябва да промените подмножество от стойности в база данни, използвайте метода update().

Актуализирането на стойностите на таблицата комбинира синтаксиса insert() със синтаксиса where delete().