Android 39: SQLite

Ötən yazımızda bir listimiz var idi, xatırlayırsınızsa. Əvvəldən üzərində hazır şagird informasiyaları qeyd edilmişdi. Sonra əlavə et düyməsininə basaraq yenlərini əlavə edirdik. Lakin bir problem vardı orda. Tədbiqetmədən çıxıb, yenidən başltdıqda əlavə etdiklərimiz harda olurdu? Heçarda. Silinib getmişdi. Nətər olur? O boyda əzyətlə əlavə etdiklərimiz hanı? Olmaz axı belə.

Demək elə bir şey etməliyik ki, həmin listimiz yaddaşda qalsın. İstədiyimiz vaxt istifadə edə, əalvələr edə bilək.

Bax elə bunun üçün də Android telefonların üzərində hazır gələn SQLite-dan istifadə edəcəyik.

Bunun üçün həmin layihə üzərindən yeni bir sinif yaradırıq. Mən adını DBHelper qoyuram, siz istədiyiniz adı qoya bilərsiniz. Əsas odu, adını görəndə nə məna verdiyi başa düşəsiniz. (“Asdfggh” – qoymayın yəni).

Sinfimiz’ “SQLiteOpenHelper” sinfini extends edirik. Sonra isə implement etməli olduğumuz konstruktor və onCreate()/onUpgrate() metodları var.

İndi bizə lazım olan dəyişənləri yaratmaq lazımdır.

Yaratdığımız metodalra və dəyişənlərə baxaq.

  • DBHelper(…) – bizim konstruktor metodumuzdur. Verilənlər bazası ilə necə əlaqə quracağımızı göstərir.
  • onCreate – Verilənlər bazası üçün cədvəlləri yaratmaq üçün istifadə edilir.
  • onUpgrade – versiyan yeniləmək üçün istifadə edilir. (Sizin 3 sətriniz var, versiya kodunuz 1dir, sonra sətirlərin sayını artırdıqda versiya kodunuzu dəyişməsəz SQLite işləməyəcək. Versiya kodu dəyişdirilərkən edilməli olan proseslər bu metodda yazılır).

 

  • DB_VERSION – Versiya kodumuzu saxlayır.
  • DB_NAME – Verilənlər bazasın adınıs axlayır
  • TB_STUDENT – cədvəlin adını saxlayır

Digər 4ü isə cədvəldə uyğun olaraq şagirlərin sırasını (id), adını, soyadını və sinif nömrısii saxlayır.

İndi konstruktorumuz üzərində kiçik dəyişiklik edək.

Qeyd: Kodları sonda verəcəm, indilik əliniz öyrəşsin deyə siz yazın. Bunun üçün də şəkilləri yerləşdirirəm.

Konstruktorumuzun arqumentlərini azaldıb, həmin informasiyaları öz dəyişənlərimizdən aldıq. Məncə indi konstrukdor daha aydın olar sizə (hansı arqument nədir deyə).

Gəlin indi Cədvəlimizi yaradaq. Verilənlər bazası ilə işləyənlər bilər, indi “CREATE TABLE” əmri ilə müvafiq sütunlarımızı yaradacağıq.

Kod sətirimiz string daxilində belə olmalıdır:

"CREATE TABLE TB_STUDENT(STUDENT_ID int primary key, STUDENT_NAME text, STUDENT_LAST_NAME text, STUDENT_CLASS text)"

Qeyd: burada “primary key” –  təkrarlanmayan dəyərlər üçün istifadə edilir, hər bir cədvəldə sadəcə bir sütun üçün işlədilə bilər.

İndi biz yuxarda görüdüyümüz stringin içində yazılan bəzi adları hazır dəyişənlərimizdən çağıracağıq. Çünki zamanla əgər cədvəldəki hər hansı bir sütunun adı dəyişdirilərsə o zaman bütün kodlardakı adları yox, sadəcə bir yerdən – təyin etdiyimiz yerdən dəyişdirmək kifayət etsin.

SQLiteDatabase-in execSQL metodundan istifadə edərək cədvəliizi yaradaq:

Yuxardakı execSQL metodu istifadə edərəm onUpgrade metodumuz üçün cədvəli silmə və yenidən yaratma prosesini yazaq:

Bu hissəsi hazır. Gəlin indi DBHelper sinfimizə “AddStudent” metodu əlavə edək, bu metod vasitəsiylə bazaya yeni sətirlər əlavə edəcəyik. Bu metod bizdən student obyekti tələb etsin.

getWritableDatabase() – metodu verilənlər bazasına məlumat əlavə etmək üçün istifadə olunur.

İndi qayıdaq MainActivity-yə. Listimizi, adapterimizi silək. DBHelper üçün qlobal obyektimizi yaradaq:

DBHelper dbHelper = new DBHelper(MainActivity.this);

Adapterimizi isə aşağdıdakı kimi təyin edək:

adapter = new Adapter(MainActivity.this, dbHelper.getAllStudent());

Burada getAllStudent metodun hələ yazmamışıq. Bu metod vasitəiylə verilənlər bazasından listimizi alacağıq. Bunun üçün DBHelper sinfinə keçid edək və bizə ArrayList qaytaracaq olan metodumuzu yazaq:

Verilənlər abzasına veriənlərimizi əlavə edərkən necə ki getWritableDatabas metodundan istifadə etdik, indi də getReadableDatabase() metodundan istifadə edəcəyik.

Cursordan istifadərək “rawQuery” metodun çağıraq. Bu metod verilənlər bazası üçün müəyyən əmirləri etməyimizə bizə kömək edəcək. Edəcəyimiz əmir şagirdlər cədvəlindəki bütün informasiyanı çağırmaq üçündür. Bayaq ArrayList-imizi (“ArrayList<Student> arrayList = new ArrayList<>();”) MainActivity-dən silmişdik, burada yazaq. Cursorun sonuncu sətirə düşənə qədər ediləcək prosesləri while içərisində yazaq. Belə ki, Şagird metodu yaradıb, getColumnIndex metodalrı ilə müvafiq dəyişənləri cursordan alıb yaratdığımız Şagird obyektinə ötürürük. Sonra həmin obyekti listə “add” edirik, cursoru növbətinə keçirirk. Dövr bitəndən sonra cursoru “close” etmək yaddan çıxmasın. Metodumuz yaratmış olduğumuz arraList-i “return” edəcək. Kod aşağıdakı kimidir:

İndi nə edirik? MainActivity-yə qayıdırıq, onActivityResult içərisində dəyişikliyimizi edək.

Burda nə etdik biz? Adapter daxilindəki “RefreshArray” metoduna dbHelperin obyektini ötürdük. Axı Adapterdə helə bir metod yox idi. Onda gedək yazaq:

Son iki dəyişikliyimizə bir daha baxaq. İstifadəçi “add” buttonuna basarkən həmin sinif açılacaq, istifadəçinin daxil etdiyi məlumatalr verilənlər bazasına ötürüləcək. Son iki dəyişikliyimizə görə: istifadəçi əsas səhifəyə qayıdarkən (əlavə etmə səhifəsində “finish”-ə basdıqdan sonra) avtomatik olaraq tədbiqetmə ilk yaradılarkən baş verdiyi kimi məlumat bazasına sorğu göndərib ordan informasiyaları alıb listimizdə göstərəcəyik.

Tədbiqetməmizi işə salaq: error verdi helə? Çünki AddActivity daxilindəki kodalrda dəyişiklik etməmişik axı.

Qlobal şəkildə dbHelper obyektini yaratmaq yaddan çıxmasın ()

İndi tədbiqetməmizi işə salaq:

Yazılar çox qarışıqdı. İnternetdə mənbələr boldu, lakin hamısı xırda fəqlərlə bir-birindən ayrı görünür. Türk dilində bir neçə mənbə tapmışam sizlər üçün, istəsəz onlara baxın. Əvvəl mən kodlarımı verim: buyrun.

Mənbələr:

[1] http://alicanakkus.com/2014/12/android-sqlite-1/
[2] https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-401/veritabani-kullanimi
[3] http://umiitkose.com/2015/09/android-studio-sqlite-giris/http://umiitkose.com/2015/09/android-studio-sqlite-veritabani-olusturma/http://umiitkose.com/2015/09/android-sqlite-ekleme-guncelleme-silme-kayit-getirme/
[4] https://www.youtube.com/watch?v=CVN2vY7fmeo&t=173s

 

Advertisements

Android 39: SQLite” üçün bir şərh

Bir cavab yazın

Sistemə daxil olmaq üçün məlumatlarınızı daxil edin və ya ikonlardan birinə tıklayın:

WordPress.com Loqosu

WordPress.com hesabınızdan istifadə edərək şərh edirsinz. Çıxış /  Dəyişdir )

Google+ foto

Google+ hesabınızdan istifadə edərək şərh edirsinz. Çıxış /  Dəyişdir )

Twitter rəsmi

Twitter hesabınızdan istifadə edərək şərh edirsinz. Çıxış /  Dəyişdir )

Facebook fotosu

Facebook hesabınızdan istifadə edərək şərh edirsinz. Çıxış /  Dəyişdir )

%s qoşulma

This site uses Akismet to reduce spam. Learn how your comment data is processed.