1. Mobil qurilmalar uchun dasturlar Ishlab chiqish muhiti


Mavzu: Mobile SDK-da ma'lumotlar bazalari sinflariga umumiy nuqtai



Download 27,79 Mb.
bet11/18
Sana24.09.2022
Hajmi27,79 Mb.
#850101
1   ...   7   8   9   10   11   12   13   14   ...   18
Bog'liq
Amaliyot mobil qurulmalarni dasturlash

Mavzu: Mobile SDK-da ma'lumotlar bazalari sinflariga umumiy nuqtai 
1. Mobile SDK-da
2. Ma'lumotlar bazalari sinflari
SQLite har qanday Android qurilmasida mavjud va alohida o'rnatilishi shart emas.
SQLite TEXT (Java-dagi String-ga o'xshash), INTEGER (Java-da uzunga o'xshash) va REAL (Java-da ikki barobarga o'xshash) turlarini qo'llab-quvvatlaydi. Qolgan turlar ma'lumotlar bazasida saqlashdan oldin o'zgartirilishi kerak. SQLite o'zi ma'lumotlar turlarini tasdiqlamaydi, shuning uchun qator ustuniga butun son yozishingiz mumkin va aksincha.

turi

Tavsif

NULL

bo'sh qiymat

INTEGER

butun qiymat

HAQIQIY

suzuvchi nuqta qiymati

MATN

UTF-8, UTF-16BE yoki UTF-16LE da kodlangan satrlar yoki belgilar







SON

Bu erda mantiqiy qiymatlarni, shuningdek vaqt va sanani saqlash mumkin

BLOB

ikkilik ma'lumotlar

Bu yerda sana turini topa olmaysiz. Siz 2013-03-28 (2013-yil 28-mart) kabi qator qiymatlaridan foydalanishingiz mumkin . Vaqt bilan sana uchun 2013-03-27T07: 58 formatidan foydalanish tavsiya etiladi . Bunday hollarda siz kunlarni qo'shish, oy boshini belgilash va h.k. uchun SQLite funksiyalaridan foydalanishingiz mumkin. E'tibor bering, SQLite vaqt zonalarini qo'llab-quvvatlamaydi.
Boolean turi ham qo'llab-quvvatlanmaydi . Noto'g'ri uchun 0 va rost uchun 1 raqamlaridan foydalaning .
Androidda ma'lumotlarni (tasvirlarni) saqlash uchun BLOB turidan foydalanmang . Tasvirlarga yo'lni ma'lumotlar bazasida saqlash va tasvirlarni fayl tizimida saqlash yaxshiroqdir.
E'tibor bering, bu erda qator uzunligini cheklovchi mashhur MySQL varchar (n) turi ishlatilmaydi .
Ma'lumotlar bazasi bilan ishlashni boshlash uchun faqat ma'lumotlar bazasini yaratish yoki yangilash uchun kerakli sozlamalarni sozlash kerak.
SQLite ma'lumotlar bazasining o'zi fayl bo'lganligi sababli, aslida ma'lumotlar bazasi bilan ishlashda siz fayl bilan o'zaro aloqada bo'lasiz. Shuning uchun o'qish va yozish operatsiyalari juda sekin bo'lishi mumkin. Asinxron operatsiyalardan foydalanish tavsiya etiladi, masalan, AsyncTask sinfidan foydalanish.
Ilovangiz ma'lumotlar bazasini yaratganda, u DATA / data / package_name / databases / database_name.db katalogida saqlanadi .
Environment.getDataDirectory () usuli DATA katalogiga yo'lni qaytaradi .
Ma'lumotlar bazasi bilan ishlash uchun asosiy paketlar - android.database va android.database.sqlite .
SQLite ma'lumotlar bazasi faqat uni yaratgan dastur uchun mavjud. Agar siz boshqa ilovalarga maʼlumotlarga kirish huquqini berishni istasangiz, kontent provayderlaridan (ContentProvider) foydalanishingiz mumkin.
Emulyatorda SQLite-ni ishga tushiring
ADB yordam dasturidan foydalanib, siz SQLite-ni emulyatorda ishga tushirishingiz va to'g'ridan-to'g'ri ma'lumotlar bazalari bilan ishlashingiz mumkin.
Sizga shuni eslatib o'tamanki , ro'yxatdagi ma'lumotlar bazalaridan biri uchun sqlite3 buyrug'ini quyidagi buyruqni kiritish orqali faollashtirishingiz mumkin :
#sqlite3 /data/data/com.android.providers.contacts/databases/contacts.db
Sqlite3 bilan ishlashni tugatish uchun quyidagilarni yozing:

sqlite> .exit


E'tibor bering, adb so'rovi # va sqlite3 so'rovi sqlite> dir .
Mavjud sqlite3 buyruqlari quyidagi veb-saytda tasvirlangan : http://www.sqlite.org/sqlite.html. Mana bir nechta muhim buyruqlar.
Jadvallar ro'yxatini ko'rish uchun:

sqlite> .tables


Asosiy jadvalga tezkor kirish:
SELECT name FROM sqlite_master
WHERE type IN ('table', 'view') AND name NOT LIKE 'sqlite %'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('tаblе', 'view')
ORDER ВY 1
Sqlite_master stol ma'lumotlar bazasida mavjud jadvallar va fikr izlar ustasi jadvali. Quyidagi buyruq contacts.db ma'lumotlar bazasidagi odamlar jadvali uchun yaratish bayonotini chop etadi :

.schema people


Bu ma'lumotlar bazasi jadvalidagi barcha ustunlar nomlarini bilish usullaridan biridir. Siz ma'lumotlar bazasini mahalliy kompyuterga nusxalashingiz va uni qulayroq muhitda o'rganishingiz mumkin. contacts.db faylini ko'chirish uchun siz quyidagi buyruqni berishingiz mumkin:

adb pull /data/data/com.android.providers.contacts/databases/contacts.db d:/somelocaldir/contacts.db


SQLite bilan ishlash uchun darslar
SQLite bilan bevosita ishlash endi eskirgan yondashuv hisoblanadi. Google I / O 2017 ko'rgazmasida ma'lumotlar bazasiga maxsus Room wrapper orqali kirishning yangi mexanizmi taqdim etildi.
Ma'lumotlar bazasi bilan ishlash quyidagi vazifalarni bajaradi:
Ma'lumotlar bazasini yaratish va ochish
Jadval yaratish
Ma'lumotlarni kiritish uchun interfeys yaratish (qo'shish)
So'rovlarni bajarish uchun interfeys yaratish (ma'lumotlarni olish)
Ma'lumotlar bazasini yopish
ContentValues ​​klassi
ContentValues klassi jadvalga yangi qatorlar qo'shish uchun ishlatiladi. Ushbu sinfning har bir ob'ekti jadvalning bitta qatorini ifodalaydi va ularga mos keladigan ustun nomlari va qiymatlari bilan assotsiativ massivga o'xshaydi.
Kursorlar
Android-da ma'lumotlar bazasi so'rovlari Cursor sinfining ob'ektlarini qaytaradi . Kursorlar ma'lumotlarni olish va qiymatlarning nusxasini qaytarish o'rniga, olingan manba ma'lumotlar to'plamiga havola qiladi. Kursorlar so'rov orqali qaytarilgan natijalar ma'lumotlar to'plamidagi joriy pozitsiyani (qatorni) boshqarishga imkon beradi.
SQLiteOpenHelper klassi: ma'lumotlar bazasini yaratish
Android kutubxonasida ma'lumotlar bazalarini yaratish, ochish va yangilash uchun foydalanishingiz mumkin bo'lgan mavhum SQLiteOpenHelper klassi mavjud. Bu sizning loyihalaringizda ishlashingiz kerak bo'lgan asosiy sinfdir. Ushbu yordamchi sinfni amalga oshirish ma'lumotlar bazasini ochishdan oldin uni yaratish yoki yangilash qarorining mantiqini yashiradi. SQLiteOpenHelper klassi ikkita talab qilinadigan mavhum usullarni o'z ichiga oladi:
onCreate () - ma'lumotlar bazasi birinchi yaratilganda chaqiriladi
onUpgrade () - ma'lumotlar bazasi o'zgartirilganda chaqiriladi
Sinfning boshqa usullari ham qo'llaniladi:
onDowngrade(SQLiteDatabase, int, int)
onOpen(SQLiteDatabase)
getReadableDatabase()
getWritableDatabase()
SQLiteOpenHelper dan meros bo'lib qolgan ilovangizda o'z sinfingizni yaratishingiz kerak . Ushbu sinfda siz ma'lumotlar bazasini yaratish va o'zgartirish mantiqini tavsiflab, belgilangan majburiy usullarni amalga oshirishingiz kerak.
Xuddi shu sinfda yaratilayotgan ma'lumotlar bazasidagi jadvallar va maydonlar nomlari uchun umumiy satr konstantalarini e'lon qilish odatiy holdir, bu mijozlar ma'lumotlar bazasi so'rovlarini bajarishda ustunlarni aniqlash uchun foydalanishlari mumkin. Masalan, CONTACT jadvali uchun konstantalarni shunday e'lon qilishingiz mumkin :
umumiy statik yakuniy satr TABLE_NAME = "CONTACT";
umumiy statik yakuniy String NAME = "FIRST_NAME";
umumiy statik final String PHONE = "TELEFON";
Jadval bilan ishlashni ko'rsatadigan darhol tushunarli nomlarni bersangiz yaxshi bo'ladi. Agar TABLE_NAME o‘zgaruvchisining nomi hali ham qolishi mumkin bo‘lsa, boshqalar uchun ko‘proq tavsiflovchi nomlardan foydalanish yaxshidir, masalan, KEY_NAME va KEY_PHONE yoki COLUMN_NAME , COLUMN_PHONE .
SQLiteOpenHelper-ni kengaytiruvchi sinfingiz, shuningdek , yozuv identifikatorlari uchun maydon nomini ifodalovchi _ID qator konstantasini belgilaydigan BaseColumns interfeysini bilvosita meros qilib oladi . Yangi yaratilgan ma'lumotlar bazasi jadvallarida _ID maydoni INTEGER PRIMARY KEY AUTOINCREMENT turida bo'lishi kerak . AUTOINCREMENT belirticisi ixtiyoriy bo'ladi. Ko'pincha boshqa misollarda identifikator qo'lda yaratiladi, qaysi biri siz uchun qulayroq ekanligini ko'ring. Har doim uni _id deb nomlang . Bu nom Android-da kursorlar bilan ishlash uchun ishlatiladi, shuning uchun ushbu qoidaga rioya qiling.
OnCreate () usulida siz jadvallarni yaratish mantiqini amalga oshirishingiz kerak va agar kerak bo'lsa, ularni SQL buyrug'i yordamida dastlabki ma'lumotlar bilan to'ldirishingiz kerak, masalan:

@Override


public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE + TABLE_NAME
(_id INTEGER PRIMARY KEY AUTOINCREMENT,
COLUMN_NAME TEXT,
COLUMN_PHONE TEXT);");
}
Bu erda shartli buyruq ko'rsatilgan, haqiqiy kodda to'g'ri SQL buyruq qatorini olish uchun doimiylar orasidagi bo'shliqlarni hisobga olishingiz kerak.
Bundan tashqari, 1 qiymatidan boshlab ma'lumotlar bazasining versiya raqamini ko'rsatishingiz kerak. Bu raqam orqali o'rash sinfi ma'lumotlar bazasi strukturasi yangilanishi kerakligini tushunadi.

private static final int DATABASE_VERSION = 1;


OnUpgrade () usulida siz, masalan, jadvalni yo'q qilish uchun ma'lumotlar bazasiga so'rovni amalga oshirishingiz mumkin (DROP TABLE) va keyin jadvalning yangilangan tuzilmasi bilan versiyasini yaratish uchun yana onCreate () usulini chaqirishingiz mumkin. misol, bu kabi:

@Override


public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSQL("DROP TABLE IF EXISTS + TABLE_NAME);
onCreate(db);
}
Usul parametrlari ma'lumotlar bazasi versiya raqamlaridan foydalanadi - eski va yangi. Versiya raqami yuqorida aytib o'tilgan.
Ma'lumotlar bazasi strukturasi quyidagicha yangilanadi. Birinchidan, biz seriya raqamini o'zgartiramiz.

private static final int DATABASE_VERSION = 2;


Ilovani birinchi marta o'rnatganingizda, ma'lumotlar bazasi hali mavjud emas. Bu erda hali tekshiriladigan hech narsa yo'q. Ilovaning yangi versiyasini o'rnatishda tizim ma'lumotlar bazasining versiya raqamini tekshiradi. Agar u avvalgisidan ko'p bo'lsa, onUpgrade () usuli chaqiriladi . Aksincha, onDowngrade () usuli chaqiriladi (odatda bu kamdan-kam hollarda bo'ladi).
Qanday ishlatish? Biz shunchaki chekga shart qo'ydik.

@Override


public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion == 1) {
// Код для работы с базой данных с версией 1
}
if (oldVersion < 3) {
// Код для работы с базой данных с версией 1 или 2
}
}
Aytaylik, mavjud NAME, DESCRIPTION va IMAGE_RESOURCE_ID ustunlariga qo‘shimcha ravishda jadvalga yangi ustun qo‘shilishi kerak. Jadvalni o'zgartirish uchun ALTER kalit so'zi bilan SQL operatoridan foydalaniladi.

ALTER TABLE DATABASE_TABLE ADD COLUMN AGE INTEGER


Jadval nomini almashtirish uchun iboradan foydalaning (DOG jadval nomini CAT ga o'zgartiring):

ALTER TABLE DOG RENAME TO CAT


Jadvalni tushirish uchun:

DROP TABLE DOG


Shunga ko'ra, siz qo'ng'iroq qilishingiz kerak SQLiteDatabase.execSQL () usuli , unga kerakli SQL buyrug'ini topshiring.
Qulaylik uchun, yordamchi usulni yarataylik updateDatabase () .

private void updateDatabase(SQLiteDatabase db, int oldVersion, int newVersion) {


if (oldVersion < 1) {
db.execSQL("CREATE TABLE DATABASE_TABLE (_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "NAME TEXT, "
+ "DESCRIPTION TEXT, "
+ "IMAGE_RESOURCE_ID INTEGER);");
insertCat(db, "Barsik", "Very clever cat", R.drawable.barsik);
insertCat(db, "Murzik", "Beautiful cat", R.drawable.murzik);
insertCat(db, "Vaska", "Always hungry", R.drawable.vaska);
}
if (oldVersion < 2) {
//Код для добавления новой колонки
myDatabase.execSQL("ALTER TABLE CONTACT ADD COLUMN AGE INTEGER;");
}
}
Yaratilgan usul endi kodda quyidagi tarzda ishlatilishi mumkin.

// Поменяли номер версии базы данных


private static final int DATABASE_VERSION = 2;

@Override


public void onCreate(SQLiteDatabase db){
updateDatabase(db, 0, DB_VERSION);
}

@Override


public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
updateDatabase(db, oldVersion, newVersion);
}
Yordamchi sinfni amalga oshirishdan foydalanish uchun yangi namuna yarating, kontekstni, ma'lumotlar bazasi nomini, joriy versiyani va CursorFactory (agar siz foydalanayotgan bo'lsangiz) konstruktorga o'tkazing . Biz ishlayotgan ma'lumotlar bazasining nusxasini ochish va qaytarish uchun getReadableDatabase () yoki getWritableDatabase () usulini chaqiring (u ham o'qilishi, ham yozilishi mumkin). getWritableDatabase () usuli chaqiruvi ruxsat berish muammolari yoki diskda etarli joy yo'qligi sababli muvaffaqiyatsiz bo'lishi mumkin, shuning uchun getReadableDatabase () usuliga qaytishni o'ylab ko'rgan ma'qul .

DbHelper dbHelper = new DbHelper(context, DATABASE_NAME, null, DATABASE_VERSION);


SQLiteDatabase db;
try {
db = dbHelper.getWritableDatabase();
}
catch (SQLiteException ex){
db = dbHelper.getReadableDatabase();
}
Agar ma'lumotlar bazasi mavjud bo'lmasa, yordamchi sinf o'zining onCreate () ishlov beruvchisini chaqiradi ; agar ma'lumotlar bazasi versiyasi o'zgargan bo'lsa, onUpgrade () ishlov beruvchisi chaqiriladi . Ikkala holatda ham getWritableDatabase / getReadableDatabase usullarini chaqirish, mos ravishda, hozirgina yaratilgan yoki yangilangan mavjud ma'lumotlar bazasini qaytaradi.
Ikkala usul ham turli nomlarga ega, lekin ular bir xil ob'ektni qaytaradi. Faqat o'qish uchun getReadableDatabase () usuli birinchi navbatda o'qish / yozish imkoniyatini tekshiradi. Xato bo'lsa, usul o'qilishi mumkinligini tekshiradi va shundan keyingina istisno qiladi. Ikkinchi usul darhol o'qish/yozish ruxsatini tekshiradi va agar kirish rad etilsa, istisno qiladi.
Agar siz bir nechta jadvallardan foydalanishni rejalashtirmoqchi bo'lsangiz, har bir jadval uchun alohida sinf yaratish tavsiya etiladi.
SQLiteMa'lumotlar bazasi
SQLite ma'lumotlar bazasini boshqarish uchun SQLiteDatabase klassi mavjud . SQLiteDatabase klassi ma'lumotlarni o'qish, qo'shish, o'chirish, o'zgartirish uchun so'rov () , kiritish () , o'chirish () va yangilash () usullarini belgilaydi. Bundan tashqari, execSQL () usuli , agar siz ushbu (yoki boshqa) operatsiyalarni qo'lda bajarishni istasangiz, ma'lumotlar bazasi jadvallariga qo'llaniladigan har qanday joriy SQL kodini bajarishga imkon beradi.
Har safar ma'lumotlar bazasidan keyingi qiymatni tahrir qilganingizda, tahrirlangan jadvalga tegishli barcha kursorlar uchun refreshQuery () usulini chaqirishingiz kerak .
So'rovni tuzish uchun ikkita usul qo'llaniladi: rawQuery () va query () , shuningdek SQLiteQueryBuilder klassi .
So'rov () usuli
Ma'lumotlarni o'qish uchun so'rovga qo'ng'iroq qilish () usulidan foydalaning :

Cursor query (String table,


String[] columns,
String selection,
String[] selectionArgs,
String groupBy,
String having,
String sortOrder)
Yetti parametr so'rov () usuliga o'tkaziladi . Agar so'rovning biron bir parametri sizni qiziqtirmasa, null ni qoldiring :
jadval - so'rov yuboriladigan jadvalning nomi;
String [] columnNames - qaytarilgan maydon nomlari ro'yxati (massiv). O'tib kuchini barcha ustunlar qaytaradi;
String whereClause - WHERE bandini tashkil etuvchi parametr (WHERE bandining o'zi bundan mustasno). Null barcha qatorlarni qaytaradi. Masalan: _id = 19 va xulosa =?
String [] selectionArgs - filtr argumentlarining qiymatlari. Uni yoqa olasizmi? "whereClause" da "Bergan massivdagi so'rovga almashtirildi;
String [] groupBy — GROUP BY bandini yaratuvchi guruhlash filtri (GROUP BY bandining oʻzi bundan mustasno). Agar GROUP BY kerak bo'lmasa, null beriladi;
Satr [] ega - HAVING ifodasini tashkil etuvchi guruhlash uchun filtr (HAVING operatorining o'zidan tashqari). Agar kerak bo'lmasa, null o'tkaziladi;
String [] orderBy — ORDER BY ifodasini hosil qiluvchi parametr (ORDER BY operatorining oʻzidan tashqari). Saralashda sukut bo'yicha null o'tkaziladi.
So'rov () usuli bilan qaytarilgan Kursor ob'ekti yozuvlar natijalari to'plamiga kirishni ta'minlaydi. Qaytarilgan ma'lumotlarni qayta ishlash uchun Kursor ob'ektida har bir ma'lumot turini o'qish usullari to'plami mavjud - getString () , getInt () va getFloat () .
Kerakli ustunlardan barcha yozuvlarni shartlarsiz olish uchun birinchi parametrda jadval nomini, ikkinchisida esa qator qatorini belgilash kifoya. Qolgan parametrlar uchun null qoldiring :

Cursor cursor = db.query("CAT",


new String[] {"NAME", "DESCRIPTION"},
null, null, null, null, null);
Shartli so'rov uchun uchinchi va to'rtinchi parametrlar qo'llaniladi. Masalan, bizga mushukning ismi Barsik bo'lgan yozuvlar kerak:

Cursor cursor = db.query("CAT",


new String[] {"NAME", "DESCRIPTION"},
"NAME = ?",
new String[] {"Barsik"},
null, null, null);
Parametr "NAME =?" NAME ustuni keyingi parametr tomonidan belgilangan qiymatni o'z ichiga olishi kerakligini anglatadi .
Bir nechta shartlar. Bu yuqorida muhokama qilingan.

Cursor cursor = db.query("CAT",


new String[] {"NAME", "DESCRIPTION"},
"NAME = ? OR DESCRIPTION = ?",
new String[] {"Murzik", "Nice"},
null, null, null);
Birlamchi kalit identifikatori kabi raqamli qiymatlardan foydalanishga misol (bu ham aytib o'tilgan)

Cursor cursor = db.query("CAT",


new String[] {"NAME", "DESCRIPTION"},
"_id = ?",
new String[] {Integer.toString(1)},
null, null, null);
Oxirgi parametr saralash uchun ishlatiladi. Saralash amalga oshiriladigan kerakli ustunni belgilashingiz kerak. A harfidan alifbo tartibida - ASC, aksincha - DESC

Cursor cursor = db.query("CAT",


new String[] {"_id", "NAME", "AGE"},
null, null, null, null,
"NAME ASC");
Bir nechta ustunlar bo'yicha saralash mumkin.

Cursor cursor = db.query("CAT",


new String[] {"_id", "NAME", "DESCRIPTION"},
null, null, null, null,
"DESCRIPTION DESC, NAME");
So'rovlarni tuzish uchun siz SQL funksiyalaridan foydalanishingiz mumkin: AVG (), COUNT (), SUM (), MAX (), MIN () va boshqalar.

// Возвращает число котов в столбце count


// Аналог SELECT COUNT(_id) AS COUNTER FROM CAT
Cursor cursor = db.query("CAT",
new String[] {"COUNT(_id) AS counter"},
null, null, null, null, null);
O'rtacha miqdorni hisoblashning yana bir mavhum misoli:

Cursor cursor = db.query("MILK",


new String[] {"AVG(PRICE) AS price"},
null, null, null, null, null);
rawQuery()
Xom SQL so'rovini qabul qiladigan rawQuery () usuli ham mavjud .
rawQuery () usuli xom so'rov bo'lgani kabi, ya'ni. so'rovlar qatori odatda SQL da bajarilganidek yoziladi. Misol quyidagicha ko'rinadi:

Cursor cursor = getReadableDatabase().


rawQuery("select * from todo where _id = ?", new String[] { id });
SQLiteQueryBuilder klassi so'rovlarni yaratishning qulay usulidir. Tanlov sizniki!
Insert () usuli
Insert () usuli SQLite ma'lumotlar bazasiga yangi yozuv kiritish uchun ishlatiladi :
uzun insert (String jadvali, String nullColumnHack, ContentValues ​​qiymatlari);
Insert () usuliga uchta parametr o'tkazilishi kerak:
jadval - yozuv kiritiladigan jadval nomi;
nullColumnHack - SQLite ma'lumotlar bazasiga to'liq bo'sh qator qo'shishga yo'l qo'yilmaydi va agar kontent provayder mijozidan olingan qator bo'sh bo'lsa, u holda faqat ushbu ustunga aniq nol qiymat beriladi;
qiymatlar - kalit-qiymat juftliklarini o'z ichiga olgan kontent provayderi mijozi tomonidan uzatiladigan xaritalar xaritasi ( Xarita sinfi va uning avlodlari). Xaritadagi kalitlar jadvaldagi ustunlarning nomlari bo'lishi kerak, qiymatlar kiritilishi kerak bo'lgan ma'lumotlar bo'lishi kerak.
Insert () usuli kiritilgan qatorning _identifikatorini qaytaradi yoki xatoda -1 ni qaytaradi.
Yangi qator yaratish uchun har bir ustunga ma'lumotlarni taqdim etish uchun ContentValues ob'ekti , aniqrog'i uning put () usuli kerak. ContentValues obyekti ma'lumotlarning nom/qiymat juftligidir . Bizga kerak bo'lgan ma'lumotlar bazasi, jadval nomi va ContentValues ob'ekti kontekstida chaqirilgan insert () usulidan o'tib, yangi qatorni qo'shing.

// Создайте новую строку со значениями для вставки.


ContentValues newValues = new ContentValues();
// Задайте значения для каждой строки.
newValues.put(COLUMN_NAME, newValue);
[ ... Повторите для каждого столбца ... ]
// Вставьте строку в вашу базу данных.
myDatabase.insert(DATABASE_TABLE, null, newValues);
Yangilash () usuli
Ma'lumotlar bazasidagi yozuvlarni yangilash va o'chirish uchun mos ravishda yangilash () va o'chirish () usullaridan foydalaning :
int yangilanishi (String jadvali, ContentValues ​​qiymatlari, String whereClause, String[] whereArgs)
int delete (String jadvali, String whereClause, String[] whereArgs)
Ushbu usullarda oxirgi ikkita parametr ma'lumotlarni o'qish uchun ko'rib chiqilgan so'rov () usuliga o'xshash SQL WHERE bandini tashkil qiladi . Ushbu usullar o'zgartirilgan yoki o'chirilgan qatorlar sonini qaytaradi.
Satrlarni yangilash ContentValues sinfi yordamida ham amalga oshiriladi . Yangilamoqchi bo'lgan har bir ustunga qiymatlarni kiritish uchun put () usuli yordamida yangi ContentValues ob'ektini yarating . Ma'lumotlar bazasi kontekstida yangilash () usulini chaqiring, unga jadval nomini, yangilangan ContentValues ob'ektini va yangilanadigan qator (lar)ga ishora qiluvchi WHERE bandini bering.

// Определите содержимое обновленной строки.


ContentValues updatedValues = new ContentValues();

// Назначьте значения для каждой строки.


newValues.put(COLUMN_NAME, newValue);
[ ... Повторите для каждого столбца ... ]
String where = KEY_ID + "=" + rowId;

// Обновите строку с указанным индексом, используя новые значения.


myDatabase.update(DATABASE_TABLE, newValues, where, null);
WHERE bandidan foydalangan yana bir misol :

ContentValues barsikValues = new ContentValues();


// Помещаем значение "Clever" в колонку DESCRIPTION
barsikValuesValues.put("DESCRIPTION", "Clever");
// Обновляем колонку DESCRIPTION с новым значением "Clever"
// в таблице WHERE NAME = "Barsik"
myDatabase.update(DATABASE_TABLE,
barsikValues,
"NAME = ?",
new String[] {"Barsik"});
Usulning birinchi parametrida biz yangilamoqchi bo'lgan jadval nomini belgilaymiz.
Ikkinchi parametrda biz yangilamoqchi bo'lgan qiymatni ko'rsatamiz. Misol uchun, "TASVIR" ustunida siz qiymatni "Aqlli" ga yangilashingiz kerak.
Uchinchi parametr yangilanish shartini belgilaydi. "NAME =?" iborasi NAME ustuni belgilangan qiymatga teng bo'lishi kerakligini anglatadi . Savol belgisi joker belgi bo'lib, kerakli qiymat to'rtinchi parametrdan olinadi.
E'tibor bering, oxirgi parametr massivdir. So'rovingiz uchun bir nechta shartlardan foydalanishingiz mumkin. Masalan, shartni tuzish uchun bir vaqtning o'zida ikkita ustun yordamida jadvaldagi yozuvni yangilashimiz kerak.

myDatabase.update(DATABASE_TABLE,


murzikValues,
"NAME = ? OR DESCRIPTION = ?",
new String[] {"Murzik", "Nice"});
Bu kod mos keladi qaerda NAME = "Murzik" yoki DESCRIPTION = "Yaxshi" .
Satrlar har doim shartlar uchun ishlatiladi, shuning uchun ba'zi hollarda konvertatsiya qilish kerak bo'lishi mumkin. Misol uchun, siz 1 qiymatiga ega jadval identifikatoridan foydalanishingiz kerak.

myDatabase.update(DATABASE_TABLE,


newValues,
"_id = ?",
new String[] {Integer.toString(1)});
Agar siz oxirgi ikkita parametrda null dan foydalansangiz , jadvaldagi barcha yozuvlar yangilanadi.

myDatabase.update(DATABASE_TABLE,


barsikValues,
null,
null);
O'chirish () usuli
int delete (String jadvali, String whereClause, String[] whereArgs)
Qatorni o'chirish uchun jadval nomi va WHERE bandini ko'rsatgan holda ma'lumotlar bazasi kontekstida o'chirish () usulini chaqirish kifoya . Natijada siz o'chirmoqchi bo'lgan qatorlarni olasiz:

myDatabase.delete(DATABASE_TABLE, KEY_ID + "=" + rowId, null);


Usul yangilash () usuli bilan deyarli bir xil .
Keling, WHERE NAME = "Murzik" sharti bilan yozuvni o'chiramiz.

myDatabase.delete(DATABASE_TABLE,


"NAME = ?",
new String[] {"Murzik"});
Yuqoridagi usullardan tashqari, bu sinf boshqa umumiy ma'lumotlar bazasini boshqarish vazifalarini bajarish uchun turli usullarni ham belgilaydi.
OpenOrCreateDatabase usuli: SQLiteOpenHelper-dan foydalanmasdan ma'lumotlar bazalarini oching va yarating
Ilovangiz Kontekst ob'ektining openOrCreateDatabase () usulidan foydalanib, SQLiteOpenHelper sinfidan foydalanmasdan ma'lumotlar bazalarini ochishingiz va yaratishingiz mumkin . Ma'lumotlar bazasiga ikki bosqichda kiring. Birinchidan, yangi ma'lumotlar bazasini yaratish uchun openOrCreateDatabase () usulini chaqiring . Keyin, olingan ma'lumotlar bazasi misolidan jadvallarni yaratadigan va ular o'rtasida aloqalarni o'rnatadigan SQL buyruqlarini bajarish uchun execSQL () ni chaqiring .

private static final String DATABASE_NAME = "myDatabase.db";


private static final String DATABASE_TABLE = "mainTable";
private static final String DATABASE_CREATE =
"create table " + DATABASE_TABLE + " ( _id integer primary key autoincrement," +
"column_one text not null);";
SQLiteDatabase myDatabase;
private void createDatabase() {
myDatabase = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE,
null);
myDatabase.execSQL(DATABASE_CREATE);
}
Kontent provayderlari
Kontent provayderlari ma'lumotlarni o'qish, o'zgartirish, kiritish va o'chirish uchun standart so'rovlar sintaksisini qo'llab-quvvatlaydi. Agar maʼlumotlaringizni boshqa ilovalar bilan baham koʻrishingiz kerak boʻlsa, sizda ikkita variant bor:
ContentProvider sinfining pastki sinfi sifatida o'z kontent provayderingizni yaratish;
mavjud provayderga ma'lumotlarni qo'shish - agar bir xil ma'lumotlarni boshqaradigan provayder mavjud bo'lsa va siz ushbu ma'lumotlar bilan ishlashga ruxsatingiz bo'lsa.
Rasmlarni bazaga joylashtiring
Rasmlarni ma'lumotlar bazasiga kiritish yaxshi fikr emas. Men buni faqat ma'lumot uchun qoldiraman. SQLite to'g'ridan-to'g'ri tasvirlar bilan ishlamagani uchun tasvirni bayt massiviga aylantirishingiz kerak. Va chiqarishda siz teskari vazifani bajarishingiz kerak - bayt massividan tasvirni qayta yarating. Keling, yordamchi sinf yarataylik.

package ru.alexanderklimov.test;


import java.io.ByteArrayOutputStream;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap.CompressFormat;
public class Utilities {
// convert from bitmap to byte array
public static byte[] getBytes(Bitmap bitmap) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0, stream);
return stream.toByteArray();
}
// convert from byte array to bitmap
public static Bitmap getImage(byte[] image) {
return BitmapFactory.decodeByteArray(image, 0, image.length);
}
}
Quyidagi kabi jadval tuzamiz. DATABASE_TABLE o'zgaruvchisi satr konstantasidir.

CREATE TABLE DATABASE_TABLE (


_id INTEGER PRIMARY KEY AUTOINCREMENT,
image_data BLOB
);
Adapter sinfiga kiritish usuli:

public long insert(byte[] image) {


return mDb.insert(DATABASE_TABLE, null, createContentValues(image));
}
private ContentValues createContentValues(byte[] image) {
ContentValues cv = new ContentValues();
cv.put(COLUMN_DATA, image);
return cv;
}



Download 27,79 Mb.

Do'stlaringiz bilan baham:
1   ...   7   8   9   10   11   12   13   14   ...   18




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©www.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