Нативная разработка мобильных приложений


Чтение данных из таблицы или хранимого объекта



Download 3,69 Mb.
Pdf ko'rish
bet88/228
Sana21.07.2022
Hajmi3,69 Mb.
#834838
1   ...   84   85   86   87   88   89   90   91   ...   228
Bog'liq
Нативная разработка мобильных приложений

Чтение данных из таблицы или хранимого объекта
Метод 
SqliteDatabase.query
предлагает наиболее прямолинейный способ полу
-
чить информацию из базы данных. Но сигнатура наиболее практичной пере
-
груженной версии включает восемь параметров! Однако давайте притворим
-
ся, что нас это не пугает, и посмотрим, как пользоваться этим методом.
Ниже демонстрируется самая простая версия метода (принимает всего семь 
параметров!). Она позволяет получить из таблицы все записи со всеми столб
-
цами в виде экземпляра 
Cursor
, поддерживающего навигацию по набору дан
-
ных. Фактически это запрос 
"SELECT
*
FROM
EVENTS"
:
Java
SqliteDatabase database = new DbHelper(this).getWritableDatabase();
database.query(DbHelper.TABLE_NAME, null, null, null, null, null, null);


Android 

131
Kotlin
val database = DbHelper(this).getWritableDatabase()
database.query(DbHelper.TABLE_NAME, null, null, null, null, null, null);
Заглянем внутрь, используя более реалистичный запрос:
Java
SqliteDatabase database = new DbHelper(this).getWritableDatabase();
database.query(
DbHelper.TABLE_NAME, // Строка с именем таблицы
new String[] { DbHelper.COLUMN_ID }, // Массив строк с именами столбцов
DbHelper.COLUMN_NAME + " = ?", // Строка для предложения WHERE
new String[] { "Request Data" }, // Массив строк со значениями для WHERE 
null, // GROUP BY
null, // HAVING
null, // ORDER BY
"1" // Строка для предложения LIMIT
);
Kotlin
val database = DbHelper(context).writableDatabase
database.query(
DbHelper.TABLE_NAME, // Строка с именем таблицы
arrayOf(DbHelper.COLUMN_ID), // Массив строк с именами столбцов
DbHelper.COLUMN_NAME + " = ?", // Строка для предложения WHERE
arrayOf("Request Data"), // Массив строк со значениями для WHERE
null, // GROUP BY
null, // HAVING
null, // ORDER BY
"1" // Строка для предложения LIMIT
)
Предыдущий код фактически выполняет запрос 
SELECT
ID
FROM
EVENTS
WHERE
NAME
=
\"Request
Dat
a\"
LIMIT
1
. Использование символа-заполнителя – распростра
-
ненный прием, помогающий предотвращать атаки типа «инъекция SQL». 
Но где хранятся данные, полученные в случае успешного выполнения за
-
проса? Он находится в наборе данных в памяти, доступ к которому можно по
-
лучить с помощью 
Cursor
; метод 
query
возвращает экземпляр 
Cursor
. Например:
Java
Cursor cursor = database.query(DbHelper.TABLE_NAME, null, null, null, null, 
null, null);
while (cursor.moveToNext()) {
Log.d("MyTag", "id: " + cursor.getString(0));
Log.d("MyTag", "name: " + cursor.getString(1));
Log.d("MyTag", "time: " + cursor.getLong(2));
}
cursor.close();
Kotlin
val cursor = database.query(DbHelper.TABLE_NAME, null, null, null, null, 
null, null)


132

Хранение данных
while (cursor.moveToNext()) {
Log.d("MyTag", "id: " + cursor.getString(0))
Log.d("MyTag", "name: " + cursor.getString(1))
Log.d("MyTag", "time: " + cursor.getLong(2))
}
cursor.close()
Как видите, курсор позволяет получить доступ к столбцам по их индексам, 
однако в классе 
Cursor
есть также метод 
getColumnByIndex
, возвращающий имя 
столбца по его индексу, который можно использовать примерно так:
Java
cursor.getString(cursor.getColumnByIndex(DbHelper.COLUMN_ID));
Kotlin
cursor.getString(cursor.getColumnByIndex(DbHelper.COLUMN_ID))
Существует также масса других доступных API (и сторонних механизмов 
объектно-реляционного отображения [Object-Relational Mapping, ORM]), и воз
-
можности, которые предлагает поддержка SQL, ограничены только вашей фан
-
тазией. Если вы работаете над приложением, которое регулярно обращается 
к базе данных, подумайте об использовании метода 
compileStatement
, который 
компилирует строку с запросом SQL и позволяет переопределять значения па
-
раметров при каждом вызове. Этот метод действует очень быстро и действи
-
тельно может улучшить воспринимаемую производительность при работе 
с большими наборами данных.
На момент написания этой книги компания Google рекомендовала исполь
-
зовать библиотеку Room. Вот выдержка из документации для разработчиков 
Android (
https://oreil.ly/rtG
9C
):
Все эти API (
SQLiteDatabase
и др.) обладают широкими возможностями, но 
они довольно низкоуровневые и требуют много времени и сил для ис
-
пользования:

запросы SQL не проверяются во время компиляции. При изменении 
схемы данных вам придется изменить соответствующие SQL-запросы. 
Этот процесс может занять много времени и чреват ошибками;

для преобразований между запросами SQL и объектами данных при
-
ходится писать много шаблонного кода.
По этим причинам мы настоятельно советуем использовать библиотеку 
Room Persistence Library в роли слоя абстракции для доступа к информа
-
ции в базах данных SQLite из вашего приложения.

Download 3,69 Mb.

Do'stlaringiz bilan baham:
1   ...   84   85   86   87   88   89   90   91   ...   228




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish