Anda di halaman 1dari 39

Android Database SQLite Tutorial (I) : Membuat Database SQLite

Langsung saja, pertama-tama kita buat sebuah project Android baru terlebih dahulu. Nama package nya terserah, tapi pada program ini nama package-nya adalah id.twooh.appinventory. Silahkan nanti disesuaikan. Kemudian, karena aplikasi ini menggunakan paradigma MV . Maka kita akan buat kelas modelnya, yaitu kelas Barang.java. Kelas barang ber!ungsi untuk mende!inisikan objek barang beserta !ungsi-!ungsi dan atributatributnya. "ah seperti barang pada umumnya, mereka mempunyai nama, #$, merk, dan sebagainya. #nilah kode untuk kelas Barang.java.
package id.twooh.appinventory; public class Barang { private private private private long id; String nama_barang; String merk_barang; String harga_barang;

public Barang() { } !! ! "return the id ! public long get#d() { return id; } !! ! "param id the id to set ! public void set#d(long id) { this.id $ id; } !! ! "return the nama_barang ! public String get%ama_barang() {

return nama_barang;

!! ! "param nama_barang the nama_barang to set ! public void set%ama_barang(String nama_barang) { this.nama_barang $ nama_barang; } !! ! "return the merk_barang ! public String get&erk_barang() { return merk_barang; } !! ! "param merk_barang the merk_barang to set ! public void set&erk_barang(String merk_barang) { this.merk_barang $ merk_barang; } !! ! "return the harga_barang ! public String get'arga_barang() { return harga_barang; } !! ! "param harga_barang the harga_barang to set ! public void set'arga_barang(String harga_barang) { this.harga_barang $ harga_barang; } "(verride public String toString() { return )Barang )* nama_barang *) )* merk_barang * ) )* harga_barang; } }

%ke, Model nya sekarang sudah ada. Sederhana bukan& Kelas tersebut hanya berisi atribut dan !ungsi-!ungsi getter dan setter. Setelah kelas barang selesai dibuat, kita akan melanjutkan dengan membuat kelas Database Helper.

Database Helper
Sesuai namanya, kelas ini ber!ungsi untuk memudahkan kita dalam membuat dan mengakses database S'Lite yang akan dipakai oleh aplikasi. Kelas ini kebanyakan berisi method-method berkaitan dengan manajemen database, seperti onUpgrade() dan on reate(). Database Helper sebenarnya sudah kita ada kelasnya pada Android, ini yaitu dari

bernama !"#ite$penHelper. Sehingga

tinggal

meng-e%tends kelas

kelas !"#ite$penHelper, atau dengan kata lain, melakukan pe(arisan. #nilah kode untuk kelas DBHelper.java )
package id.twooh.appinventory; deklarasi import package import android.content.+onte,t; import android.database.s-lite.S./ite0atabase; import android.database.s-lite.S./ite(pen'elper; import android.util./og; public class 0B'elper e,tends S./ite(pen'elper{ !! deklarasi konstanta1konstanta yang digunakan pada database2 seperti nama tabel2 nama1nama kolom2 nama database2 dan versi dari database !! public static 3inal String 45B/6_%5&6 $ )data_inventori); public static 3inal String +(/7&%_#0 $ )_id); public static 3inal String +(/7&%_%5&6 $ )nama_barang); public static 3inal String +(/7&%_&689 $ )merk_barang); public static 3inal String +(/7&%_'58:5 $ )harga_barang); private static 3inal String db_name $)inventori.db); private static 3inal int db_version$;; <erintah S./ untuk membuat tabel database baru private static 3inal String db_create $ )create table ) * 45B/6_%5&6 * )() * +(/7&%_#0 *) integer primary key autoincrement2 ) * +(/7&%_%5&6* ) varchar(=>) not null2 ) * +(/7&%_&689* ) varchar(=>) not null2 ) * +(/7&%_'58:5* ) varchar(=>) not null);); public 0B'elper(+onte,t conte,t) { super(conte,t2 db_name2 null2 db_version); 5uto generated }

mengeksekusi perintah S./ di atas untuk membuat tabel database baru "(verride public void on+reate(S./ite0atabase db) { db.e,ecS./(db_create); } di?alankan apabila ingin mengupgrade database "(verride public void on7pgrade(S./ite0atabase db2 int old@ersion2 int new@ersion) { /og.w(0B'elper.class.get%ame()2)7pgrading database 3rom version ) * old@ersion * ) to ) * new@ersion * )2 which will destroy all old data)); db.e,ecS./()08(< 45B/6 #A 6B#S4S ) * 45B/6_%5&6); on+reate(db); } }

%ke, seperti yang bisa kita lihat di atas. Kelas DBHelper.java kebanyakan berisi konstantakonstanta seperti nama tabel, nama database, nama kolom, dan sebagainya. *al ini untuk memudahkan kita nantinya. $imana ketika ingin menggunakan konstanta tersebut, kita tidak usah lagi menulis nama tabel berulang kali, namun cukup dengan mengaksesnya dari kelas DBHelper. Kemudian ada juga konstanta berupa !"# statement, yang untuk mereka yang ahli database, sebenarnya perintah itu digunakan untuk membuat tabel database baru. +erintah S'L tersebut kemudian akan dieksekusi pada method on reate(). Kira-kira sekian dulu postingan malam hari ini. ,utorial nanti akan dilanjutkan kembali. -ika ada yang ingin ditanyakan, silahkan tulis saja di kolom komentar. Semoga berguna.

Android Database SQLite Tutorial (II) : Membuat Fungsi Create Data


%ke, sekarang buka kembali project Aplikasi #n/entaris kalian. $i pertemuan sebelumnya kita sudah membuat kelas Barang.java yang ber!ungsi sebagai Model objek barang, dan kelas DBHelper.java yang ber!ungsi untuk mempermudah aplikasi dalam membuat dan mengakses database. Sekarang untuk kelanjutannya, kita akan membuat sebuah kelas yang ber!ungsi untuk insert data atau create data. Kelas ini ber!ungsi untuk menambahkan data barang baru ke database. $an inilah da!tar !ile-!ile yang akan kita buat )

men&.%ml ) ber!ungsi untuk membuat sebuah layout main men& create'data.%ml ) ber!ungsi sebagail layout untuk tampilan input data DBData!o&rce.java ) ber!ungsi sebagai ontroller, kelas inilah yang nantinya berguna untuk melakukan operasi-operasi pada database, termasuk operasi reate Data

reateData.java ) ber!ungsi sebagai Vie( atau inter(ace untuk memasukkan data

+ertama-tama, kita akan membuat kelas Menu terlebih dahulu, karena itu kita butuh !ile layo&t) nya. 0uka !older res*layo&t pada proyek kalian, dan buat sebuah !ile %ml baru dengan nama men&.%ml #sikan kode berikut )
CD,ml version$);.>) encoding$)ut31E)DF C8elative/ayout ,mlnsGandroid$)httpG schemas.android.com apk res android) androidGlayout_width$)match_parent) androidGlayout_height$)match_parent) androidGorientation$)vertical) F C4e,t@iew androidGid$)"*id nama_app) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGlayout_center'oriHontal$)true)

androidGlayout_center@ertical$)true) androidGte,tSiHe$)I>sp) androidGte,t$)twoh.web.id) F CButton androidGid$)"*id button_tambah) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGlayout_below$)"id nama_app) androidGlayout_center'oriHontal$)true) androidGte,t$)4ambah 0ata) F C 8elative/ayoutF

"ups, kali ini layout di atas menggunakan 1elati/e Layout supaya mudah mengatur posisinya. Layout di atas hanya berisi Nama Aplikasi dan sebuah tombol untuk +ambah Data. Setelah itu, kita akan membuat kelas Main Menunya, buat sebuah activity

class bernama Men&.java


package id.twooh.appinventory; import import import import import import android.app.5ctivity; android.content.#ntent; android.os.Bundle; android.view.@iew; android.view.@iew.(n+lick/istener; android.widget.Button;

public class &enu e,tends 5ctivity implements (n+lick/istener{ private Button b4ambah; "(verride public void on+reate(Bundle saved#nstanceState) { super.on+reate(saved#nstanceState); set+ontent@iew(8.layout.menu); b4ambah $ (Button) 3ind@iewBy#d(8.id.button_tambah); b4ambah.set(n+lick/istener(this); } "(verride public void on+lick(@iew v) { 4(0( 5uto1generated method stub switch(v.get#d()) { case 8.id.button_tambah G #ntent i $ new #ntent(this2 +reate0ata.class);

start5ctivity(i); break; } } }

Kelas ini ber!ungsi untuk menampilkan tombol 2,ambah $ata3, yang apabila kita klik akan berpindah ke ,ctivity reate Data. Karena kelas reate Data nya belum ada, selanjutnya kita

akan membuat kelas tersebut. Namun kita akan membuat !ile %ml layout-nya terlebih dahulu, yang bernama create'data.%ml )
C/inear/ayout ,mlnsGandroid$)httpG schemas.android.com apk res android) ,mlnsGtools$)httpG schemas.android.com tools) androidGlayout_width$)match_parent) androidGlayout_height$)match_parent) androidGorientation$)vertical) F C6dit4e,t androidGid$)"*id nama_barang) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGlayout_margin4op$);=dp) androidGinput4ype$)te,t) androidGhint$%ama Barang) androidGems$);>) F Cre-uestAocus F C 6dit4e,tF C6dit4e,t androidGid$)"*id merk_barang) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGlayout_margin4op$);=dp) androidGinput4ype$)te,t) androidGhint$)&erk Barang) androidGems$);>) F Cre-uestAocus F C 6dit4e,tF C6dit4e,t androidGid$)"*id harga_barang) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGlayout_margin4op$);=dp) androidGinput4ype$)number) androidGhint$)'arga Barang) androidGems$);>) F

Cre-uestAocus C 6dit4e,tF

CButton androidGid$)"*id buttom_submit) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGte,t$)Submit) F C /inear/ayoutF

Layout di atas berisi -dit+e%t yang ber!ungsi sebagai (adah inputan tiga buah in!ormasi dasar, yaitu nama barang, merk barang dan harga barang, dan sebuah tombol submit di ba(ahnya. Setelah itu, kita akan buat ,ctivity reateData. Akti/itas ini ber!ungsi sebagai

.iew dalam paradigma Model-Vie(- ontroller yang kita gunakan. Atau dengan kata lain kelas ini menyediakan sebuah inter!ace untuk menambahkan barang. Langsung saja kita buat kelas baru bernama reateData.java
package id.twooh.appinventory; import import import import import import import android.os.Bundle; android.app.5ctivity; android.view.@iew; android.view.@iew.(n+lick/istener; android.widget.Button; android.widget.6dit4e,t; android.widget.4oast;

public class +reate0ata e,tends 5ctivity implements (n+lick/istener{ inisilisasi elemen1elemen pada layout private Button buttonSubmit; private 6dit4e,t ed%ama; private 6dit4e,t ed&erk; private 6dit4e,t ed'arga; inisialisasi kontroller 0ata Source private 0B0ataSource dataSource; "(verride public void on+reate(Bundle saved#nstanceState) { super.on+reate(saved#nstanceState); set+ontent@iew(8.layout.create_data); buttonSubmit $ (Button) 3ind@iewBy#d(8.id.buttom_submit); buttonSubmit.set(n+lick/istener(this); ed%ama $ (6dit4e,t) 3ind@iewBy#d(8.id.nama_barang); ed'arga $ (6dit4e,t) 3ind@iewBy#d(8.id.harga_barang); ed&erk $ (6dit4e,t) 3ind@iewBy#d(8.id.merk_barang);

instanstiasi kelas 0B0ataSource dataSource $ new 0B0ataSource(this); membuat sambungan baru ke database dataSource.open(); } 964#95 4ombol Submit 0iklik "(verride public void on+lick(@iew v) { #nisialisasi data barang String nama $ null; String merk $ null; String harga $ null; "SuppressJarnings()unused)) inisialisasi barang baru (masih kosong) Barang barang $ null; i3(ed%ama.get4e,t()K$null LL ed&erk.get4e,t()K$null LL ed'arga.get4e,t()K$null) { ! ?ika 3ield nama2 merk2 dan harga tidak kosong ! maka masukkan ke dalam data barang! nama $ ed%ama.get4e,t().toString(); merk $ ed&erk.get4e,t().toString(); harga $ ed'arga.get4e,t().toString(); } switch(v.get#d()) { case 8.id.buttom_submitG insert data barang baru barang $ dataSource.createBarang(nama2 merk2 harga); kon3irmasi kesuksesan 4oast.make4e,t(this2 )masuk BarangMn) * )nama) * barang.get%ama_barang() )merk) * barang.get&erk_barang()

* *

)harga) * barang.get'arga_barang()2 4oast./6%:4'_/(%:).show(); break; } } }

Nah, sekarang kita sudah membuat sebuah inter!ace4antar muka untuk menginputkan data. "ang kita perlukan sekarang adalah sebuah ontroller yang akan menyambungkan inter!ace tersebut dengan database yang kita buat. -ika kalian copy pastekan kode di atas akan ada error, tapi

biarkan saja. Karena error tersebut disebabkan oleh kelas kontroler DBData!o&rce yang belum kita buat. Salah satu error yang muncul adalah pada bagian inisialiasi DBData!o&rce seperti berikut )
private 0B0ataSource dataSource;

%ke, langsung kita buat saja !ile baru bernama DBData!o&rce.java. Kodenya seperti berikut )
package id.twooh.appinventory; import import import import import import import ?ava.util.5rray/ist; android.content.+ontent@alues; android.content.+onte,t; android.database.+ursor; android.database.S./6,ception; android.database.s-lite.S./ite0atabase; android.util./og;

public class 0B0ataSource { inisialiasi S./ite 0atabase private S./ite0atabase database; inisialisasi kelas 0B'elper private 0B'elper db'elper; ambil semua nama kolom private StringNO all+olumns $ { 0B'elper.+(/7&%_#02 0B'elper.+(/7&%_%5&62 0B'elper.+(/7&%_&68920B'elper.+(/7&%_'58:5}; 0B'elper diinstantiasi pada constructor public 0B0ataSource(+onte,t conte,t) { db'elper $ new 0B'elper(conte,t); } membuka membuat sambungan baru ke database public void open() throws S./6,ception { database $ db'elper.getJritable0atabase(); } menutup sambungan ke database public void close() { db'elper.close(); } method untuk create insert barang ke database public Barang createBarang(String nama2 String merk2 String harga) {

membuat sebuah +ontent@alues2 yang ber3ungsi untuk memasangkan data dengan nama1nama kolom pada database +ontent@alues values $ new +ontent@alues(); values.put(0B'elper.+(/7&%_%5&62 nama); values.put(0B'elper.+(/7&%_&6892 merk); values.put(0B'elper.+(/7&%_'58:52 harga); mengeksekusi perintah S./ insert data yang akan mengembalikan sebuah insert #0 long insert#d $ database.insert(0B'elper.45B/6_%5&62 null2 values); setelah data dimasukkan2 memanggil perintah S./ Select menggunakan +ursor untuk melihat apakah data tadi benarI sudah masuk dengan menyesuaikan #0 $ insert#0 +ursor cursor $ database.-uery(0B'elper.45B/6_%5&62 all+olumns2 0B'elper.+(/7&%_#0 * ) $ ) * insert#d2 null2 null2 null2 null); pindah ke data paling pertama cursor.move4oAirst(); mengubah ob?ek pada kursor pertama tadi ke dalam ob?ek barang Barang newBarang $ cursor4oBarang(cursor); close cursor cursor.close(); mengembalikan barang baru return newBarang;

private Barang cursor4oBarang(+ursor cursor) { buat ob?ek barang baru Barang barang $ new Barang(); debug /(:+54 /og.v()in3o)2 )4he get/(%: )*cursor.get/ong(>)); /og.v()in3o)2 )4he set/at/ng )*cursor.getString(;)*)2)*cursor.getString(I)); ! Set atribut pada ob?ek barang dengan ! data kursor yang diambil dari database! barang.set#d(cursor.get/ong(>)); barang.set%ama_barang(cursor.getString(;)); barang.set&erk_barang(cursor.getString(I)); barang.set'arga_barang(cursor.getString(P)); kembalikan sebagai ob?ek barang return barang;

} }

5ntuk penjelasan tiap baris kodenya, bisa dibaca pada komentar-komentar yang ada di atas. Adapun cara kerjanya sebagai berikut, pertama-tama kita kembali ke kelas reateData.java. Apabila kita telah mengisi data barang dan mengklik tombol submit, data barang tersebut akan dilempar ke ontroller. Kemudian kontroler akan menerima inputan data barang tersebut dan memasangkannya sesuai dengan nama kolom pada database

menggunakan ontent.al&es. 5ntuk selanjutnya dimasukkan ke database. Setelah dimasukkan, data akan dicek kembali menggunakan !"# select yang mengembalikan data berupa &rsor. $ata kursor tersebut kemudian akan diubah menjadi objek barang, dan dilemparkan lagi ke kelas reateData untuk kemudian mengkon!irmasikan data apa saja yang barusan kita masukkan. "ang terakhir, kita akan memodi!ikasi ,ndroid Mani(est. Kita pindahkan intent (ilter la&ncher nya ke Acti/ity Menu supaya akti/itas tersebut yang dijalankan pertama kali apabila aplikasi dibuka.
Cmani3est ,mlnsGandroid$)httpG schemas.android.com apk res android) package$)id.twooh.appinventory) androidGversion+ode$);) androidGversion%ame$);.>) F Cuses1sdk androidGminSdk@ersion$)E) androidGtargetSdk@ersion$);=)

Capplication androidGicon$)"drawable ic_launcher) androidGlabel$)"string app_name) androidGtheme$)"style 5pp4heme) F Cactivity androidGname$)id.twooh.appinventory.+reate0ata) androidGlabel$)"string title_activity_main) F C activityF Cactivity androidGname$).&enu) androidGlabel$)"string title_activity_main) F Cintent13ilterF

Caction androidGname$)android.intent.action.&5#%)

F F

Ccategory androidGname$)android.intent.category./57%+'68) C intent13ilterF C activityF C applicationF C mani3estF

Android Database SQLite Tutorial (III) : Membuat Fungsi Vie !"ead Data Membuat #itur Li$at Data
%ke, langsung saja, pada tutorial kali ini kita akan menambahkan !itur lihat data barang pada aplikasi in/entaris yang akan kita buat. +ertama-tama kita akan memperbarui !ile layout men&.%ml dengan menambahkan satu buah tombol #ihat Data. %h iya, sebelumnya buka dulu !ile val&es*strings.%ml untuk memasukkan konstanta-konstanta String yang digunakan pada aplikasi, hal ini dilakukan supaya aplikasi ini memenuhi standar aplikasi Android yang baik. 6ile val&es*strings.%ml
CresourcesF Cstring name$)app_name)F5pp#nventoryC stringF Cstring name$)nama_app)Ftwoh.web.idC stringF Cstring name$)hello_world)F'ello worldKC stringF Cstring name$)menu_settings)FSettingsC stringF Cstring name$)title_activity_main)F5pp#nventoryC stringF Cstring name$)barang_hint)F%ama BarangC stringF Cstring name$)harga_hint)F'arga BarangC stringF Cstring name$)merk_hint)F&erk BarangC stringF Cstring name$)tombol_submit)FSubmitC stringF Cstring name$)tombol_tambah)F4ambah 0ataC stringF Cstring name$)tombol_lihat)F/ihat 0ataC stringF Cstring name$)title_view)F0ata BarangC stringF C resourcesF

Kemudian, inilah !ile men&.%ml yang baru )

CD,ml version$);.>) encoding$)ut31E)DF C8elative/ayout ,mlnsGandroid$)httpG schemas.android.com apk res android) androidGlayout_width$)match_parent) androidGlayout_height$)match_parent) androidGorientation$)vertical) F C4e,t@iew androidGid$)"*id nama_app) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGlayout_center'oriHontal$)true) androidGlayout_center@ertical$)true) androidGte,tSiHe$)I>sp) androidGte,t$)"string nama_app) F CButton androidGid$)"*id button_tambah) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGlayout_below$)"id nama_app) androidGlayout_center'oriHontal$)true) androidGte,t$)"string tombol_tambah) F CButton androidGid$)"*id button_view) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGlayout_below$)"id button_tambah) androidGlayout_center'oriHontal$)true) androidGte,t$)"string tombol_lihat) F C 8elative/ayoutF

Setelah itu, kita update juga !ile acti/ity Menu.ja/a-nya. opy pastekan kode di ba(ah ini
package id.twooh.appinventory; import import import import import import android.app.5ctivity; android.content.#ntent; android.os.Bundle; android.view.@iew; android.view.@iew.(n+lick/istener; android.widget.Button;

public class &enu e,tends 5ctivity implements (n+lick/istener{ private Button b4ambah; private Button b/ihat; "(verride public void on+reate(Bundle saved#nstanceState) { super.on+reate(saved#nstanceState); set+ontent@iew(8.layout.menu);

} "(verride public void on+lick(@iew v) { 4(0( 5uto1generated method stub switch(v.get#d()) { case 8.id.button_tambah G #ntent i $ new #ntent(this2 +reate0ata.class); start5ctivity(i); break; case 8.id.button_view G #ntent iI $ new #ntent(this2 @iew0ata.class); start5ctivity(iI); break; } }

b4ambah $ (Button) 3ind@iewBy#d(8.id.button_tambah); b4ambah.set(n+lick/istener(this); b/ihat $ (Button) 3ind@iewBy#d(8.id.button_view); b/ihat.set(n+lick/istener(this);

Kita menambahkan button kedua, yaitu b&tton'view, yang apabila di-klik akan memba(a kita ke akti/itas .iewData yang akan kita buat. Apabila ada error, biarkan saja untuk sementara. %ke, sekarang kita akan meng- &pdate kontroller aplikasi, yaitu !ile Data!o&rce.java untuk menambahkan !ungsi get,llBarang() yang ber!ungsi untuk mengambil semua data barang dari database. Seperti inilah !ungsinya. ,ambahkan pada bagian sebelum kurung tutup terakhir )
mengambil semua data barang public 5rray/istCBarangF get5llBarang() { 5rray/istCBarangF da3tarBarang $ new 5rray/istCBarangF(); select all S./ -uery +ursor cursor $ database.-uery(0B'elper.45B/6_%5&62 all+olumns2 null2 null2 null2 null2 null); pindah ke data paling pertama cursor.move4oAirst(); ?ika masih ada data2 masukkan data barang ke da3tar barang while (Kcursor.is53ter/ast()) { Barang barang $ cursor4oBarang(cursor); da3tarBarang.add(barang); cursor.move4o%e,t(); } &ake sure to close the cursor

cursor.close(); return da3tarBarang; }

$an ini adalah kode lengkap untuk DBData!o&rce.java )


package id.twooh.appinventory; import import import import import import import ?ava.util.5rray/ist; android.content.+ontent@alues; android.content.+onte,t; android.database.+ursor; android.database.S./6,ception; android.database.s-lite.S./ite0atabase; android.util./og;

public class 0B0ataSource { inisialiasi S./ite 0atabase private S./ite0atabase database; inisialisasi kelas 0B'elper private 0B'elper db'elper; ambil semua nama kolom private StringNO all+olumns $ { 0B'elper.+(/7&%_#02 0B'elper.+(/7&%_%5&62 0B'elper.+(/7&%_&68920B'elper.+(/7&%_'58:5}; 0B'elper diinstantiasi pada constructor public 0B0ataSource(+onte,t conte,t) { db'elper $ new 0B'elper(conte,t); } membuka membuat sambungan baru ke database public void open() throws S./6,ception { database $ db'elper.getJritable0atabase(); } menutup sambungan ke database public void close() { db'elper.close(); } method untuk create insert barang ke database public Barang createBarang(String nama2 String merk2 String harga) { membuat sebuah +ontent@alues2 yang ber3ungsi untuk memasangkan data dengan nama1nama kolom pada database +ontent@alues values $ new +ontent@alues(); values.put(0B'elper.+(/7&%_%5&62 nama); values.put(0B'elper.+(/7&%_&6892 merk); values.put(0B'elper.+(/7&%_'58:52 harga);

mengeksekusi perintah S./ insert data yang akan mengembalikan sebuah insert #0 long insert#d $ database.insert(0B'elper.45B/6_%5&62 null2 values); setelah data dimasukkan2 memanggil perintah S./ Select menggunakan +ursor untuk melihat apakah data tadi benarI sudah masuk dengan menyesuaikan #0 $ insert#0 +ursor cursor $ database.-uery(0B'elper.45B/6_%5&62 all+olumns2 0B'elper.+(/7&%_#0 * ) $ ) * insert#d2 null2 null2 null2 null); pindah ke data paling pertama cursor.move4oAirst(); mengubah ob?ek pada kursor pertama tadi ke dalam ob?ek barang Barang newBarang $ cursor4oBarang(cursor); close cursor cursor.close(); mengembalikan barang baru return newBarang;

private Barang cursor4oBarang(+ursor cursor) { buat ob?ek barang baru Barang barang $ new Barang(); debug /(:+54 /og.v()in3o)2 )4he get/(%: )*cursor.get/ong(>)); /og.v()in3o)2 )4he set/at/ng )*cursor.getString(;)*)2)*cursor.getString(I)); ! Set atribut pada ob?ek barang dengan ! data kursor yang diambil dari database! barang.set#d(cursor.get/ong(>)); barang.set%ama_barang(cursor.getString(;)); barang.set&erk_barang(cursor.getString(I)); barang.set'arga_barang(cursor.getString(P)); kembalikan sebagai ob?ek barang return barang; mengambil semua data barang public 5rray/istCBarangF get5llBarang() { 5rray/istCBarangF da3tarBarang $ new 5rray/istCBarangF(); select all S./ -uery +ursor cursor $ database.-uery(0B'elper.45B/6_%5&62 all+olumns2 null2 null2 null2 null2 null); pindah ke data paling pertama cursor.move4oAirst();

?ika masih ada data2 masukkan data barang ke da3tar barang while (Kcursor.is53ter/ast()) { Barang barang $ cursor4oBarang(cursor); da3tarBarang.add(barang); cursor.move4o%e,t(); } &ake sure to close the cursor cursor.close(); return da3tarBarang; } }

Kontroller sudah diperbarui, sekarang tinggal membuat view baru untuk menampilkan data barang yang ada pada database. Kita akan membuat layoutnya dulu, buat !ile 7ml layout baru dengan nama viewdata.%ml. $an isikan kode berikut )
CD,ml version$);.>) encoding$)ut31E)DF C/inear/ayout ,mlnsGandroid$)httpG schemas.android.com apk res android) androidGlayout_width$)3ill_parent) androidGlayout_height$)3ill_parent) androidGorientation$)vertical) F C4e,t@iew androidGid$)"*id data_view) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGte,t$)"string title_view) androidGlayout_gravity$)center_horiHontal) androidGbackground$)Q>>>>33) F C/ist@iew androidGid$)"androidGid list) androidGlayout_width$)match_parent) androidGlayout_height$)wrap_content) F C /inear/ayoutF

Kita menggunakan ListVie( layout untuk menampilkan data barang pada aplikasi. Setelah itu, kita akan membuat !ile acti/ity-nya bernama .iewData.java. +ada kelas tersebut, data barang yang diambil akan dimasukkan ke dalam ArrayList yang nantinya akan diset

menggunakan ,rray,dapter. #ni adalah kode untuk kelas .iewData.java )


package id.twooh.appinventory;

import ?ava.util.5rray/ist; import android.app./ist5ctivity; import android.os.Bundle; import android.widget.5rray5dapter; public class @iew0ata e,tends /ist5ctivity { inisialisasi kontroller private 0B0ataSource dataSource; inisialisasi arraylist private 5rray/istCBarangF values; "(verride public void on+reate(Bundle saved#nstanceState) { super.on+reate(saved#nstanceState); set+ontent@iew(8.layout.viewdata); dataSource $ new 0B0ataSource(this); buka kontroller dataSource.open(); ambil semua data barang values $ dataSource.get5llBarang(); masukkan data barang ke array adapter 5rray5dapterCBarangF adapter $ new 5rray5dapterCBarangF(this2 android.8.layout.simple_list_item_;2 values); set adapter pada list set/ist5dapter(adapter);

} }

"ang terakhir adalah memodi!ikasi Android Mani!est dengan menambahkan .iew Data ke dalam da!tar akti/itas. 0uka !ile ,ndroidMani(est dan masukkan kode berikut )
Cmani3est ,mlnsGandroid$)httpG schemas.android.com apk res android) package$)id.twooh.appinventory) androidGversion+ode$);) androidGversion%ame$);.>) F Cuses1sdk androidGminSdk@ersion$)E) androidGtargetSdk@ersion$);=)

Capplication androidGicon$)"drawable ic_launcher) androidGlabel$)"string app_name) androidGtheme$)"style 5pp4heme) F Cactivity androidGname$)id.twooh.appinventory.+reate0ata) androidGlabel$)"string title_activity_main) F

C activityF Cactivity androidGname$).&enu) androidGlabel$)"string title_activity_main) F Cintent13ilterF Caction androidGname$)android.intent.action.&5#%)

F F

Ccategory androidGname$)android.intent.category./57%+'68) C intent13ilterF C activityF Cactivity androidGname$).@iew0ata) androidGlabel$)"string title_activity_main) F C activityF C applicationF C mani3estF

Android SQLite Database C"%D Tutorial (IV) : Membuat Fungsi %pdate Data Membuat Fitur &dit!%pdate Data pada SQLite Android
Sip, kita langsung saja. 6itur 5pdate48dit data ini dijalankan dengan pertama-tama melakukan long click item pada list /ie( data. "ang kemudian akan memunculkan dialog dan kita bisa memilih untuk 8dit data. +ertama-tama kita harus menambahkan dua buah method baru pada kelas controller yaitu kelas DBData!o&rce.java. "aitu method untuk select data, dan yang kedua adalah method untuk update data. ,ambahkan method get0arang9: berikut ini pada $0$ataSource.ja/a )
ambil satu barang sesuai id public Barang getBarang(long id) { Barang barang $ new Barang(); inisialisasi barang select -uery +ursor cursor $ database.-uery(0B'elper.45B/6_%5&62 all+olumns2 )_id $)*id2 null2 null2 null2 null); ambil data yang pertama cursor.move4oAirst(); masukkan data cursor ke ob?ek barang barang $ cursor4oBarang(cursor);

tutup sambungan cursor.close(); return barang return barang; }

Method itu akan mengambil satu barang berdasarkan id barang yang kita de!inisikan. $an data yang sudah diambil itulah yang nantinya akan diedit. Kemudian ini adalah method untuk update data, tambahkan juga pada $0$ataSource.ja/a
update barang yang diedit public void updateBarang(Barang b) { ambil id barang String strAilter $ )_id$) * b.get#d(); memasukkan ke content values +ontent@alues args $ new +ontent@alues(); masukkan data sesuai dengan kolom pada database args.put(0B'elper.+(/7&%_%5&62 b.get%ama_barang()); args.put(0B'elper.+(/7&%_&6892 b.get&erk_barang()); args.put(0B'elper.+(/7&%_'58:52 b.get'arga_barang() ); update -uery database.update(0B'elper.45B/6_%5&62 args2 strAilter2 null); }

$an inilah kelas lengkap DB!o&rce.java setelah modi!ikasi )


package id.twooh.appinventory; import import import import import import ?ava.util.5rray/ist; android.content.+ontent@alues; android.content.+onte,t; android.database.+ursor; android.database.S./6,ception; android.database.s-lite.S./ite0atabase;

public class 0B0ataSource { inisialiasi S./ite 0atabase private S./ite0atabase database; inisialisasi kelas 0B'elper private 0B'elper db'elper; ambil semua nama kolom private StringNO all+olumns $ { 0B'elper.+(/7&%_#02

0B'elper.+(/7&%_%5&62 0B'elper.+(/7&%_&68920B'elper.+(/7&%_'58:5}; 0B'elper diinstantiasi pada constructor public 0B0ataSource(+onte,t conte,t) { db'elper $ new 0B'elper(conte,t); } membuka membuat sambungan baru ke database public void open() throws S./6,ception { database $ db'elper.getJritable0atabase(); } menutup sambungan ke database public void close() { db'elper.close(); } method untuk create insert barang ke database public Barang createBarang(String nama2 String merk2 String harga) { membuat sebuah +ontent@alues2 yang ber3ungsi untuk memasangkan data dengan nama1nama kolom pada database +ontent@alues values $ new +ontent@alues(); values.put(0B'elper.+(/7&%_%5&62 nama); values.put(0B'elper.+(/7&%_&6892 merk); values.put(0B'elper.+(/7&%_'58:52 harga); mengeksekusi perintah S./ insert data yang akan mengembalikan sebuah insert #0 long insert#d $ database.insert(0B'elper.45B/6_%5&62 null2 values); setelah data dimasukkan2 memanggil perintah S./ Select menggunakan +ursor untuk melihat apakah data tadi benarI sudah masuk dengan menyesuaikan #0 $ insert#0 +ursor cursor $ database.-uery(0B'elper.45B/6_%5&62 all+olumns2 0B'elper.+(/7&%_#0 * ) $ ) * insert#d2 null2 null2 null2 null); pindah ke data paling pertama cursor.move4oAirst(); mengubah ob?ek pada kursor pertama tadi ke dalam ob?ek barang Barang newBarang $ cursor4oBarang(cursor); close cursor cursor.close(); mengembalikan barang baru return newBarang;

private Barang cursor4oBarang(+ursor cursor) { buat ob?ek barang baru Barang barang $ new Barang(); debug /(:+54 /og.v()in3o)2 )4he get/(%: )*cursor.get/ong(>)); /og.v()in3o)2 )4he set/at/ng )*cursor.getString(;)*)2)*cursor.getString(I)); Set atribut pada ob?ek barang dengan data kursor yang diambil dari database barang.set#d(cursor.get/ong(>)); barang.set%ama_barang(cursor.getString(;)); barang.set&erk_barang(cursor.getString(I)); barang.set'arga_barang(cursor.getString(P)); kembalikan sebagai ob?ek barang return barang; } mengambil semua data barang public 5rray/istCBarangF get5llBarang() { 5rray/istCBarangF da3tarBarang $ new 5rray/istCBarangF(); select all S./ -uery +ursor cursor $ database.-uery(0B'elper.45B/6_%5&62 all+olumns2 null2 null2 null2 null2 null); pindah ke data paling pertama cursor.move4oAirst(); ?ika masih ada data2 masukkan data barang ke da3tar barang while (Kcursor.is53ter/ast()) { Barang barang $ cursor4oBarang(cursor); da3tarBarang.add(barang); cursor.move4o%e,t(); } &ake sure to close the cursor cursor.close(); return da3tarBarang; } ambil satu barang sesuai id public Barang getBarang(long id) { Barang barang $ new Barang(); inisialisasi barang select -uery +ursor cursor $ database.-uery(0B'elper.45B/6_%5&62 all+olumns2 )_id $)*id2 null2 null2 null2 null); ambil data yang pertama cursor.move4oAirst(); masukkan data cursor ke ob?ek barang barang $ cursor4oBarang(cursor); tutup sambungan cursor.close(); return barang return barang;

} update barang yang diedit public void updateBarang(Barang b) { ambil id barang String strAilter $ )_id$) * b.get#d(); memasukkan ke content values +ontent@alues args $ new +ontent@alues(); masukkan data sesuai dengan kolom pada database args.put(0B'elper.+(/7&%_%5&62 b.get%ama_barang()); args.put(0B'elper.+(/7&%_&6892 b.get&erk_barang()); args.put(0B'elper.+(/7&%_'58:52 b.get'arga_barang() ); update -uery database.update(0B'elper.45B/6_%5&62 args2 strAilter2 null); } }

Membuat Vie untu' edit data


%ke, setelah method pada kontroller ditambah. Sekarang kita akan membuat /ie( untuk edit data. Vie( tersebut mempunyai layout berupa tiga buah edit te7t untuk menampilkan data nama, merk dan harga barang. Kemudian dua buah tombol untuk sa/e data yang sudah di-update dan tombol cancel. %iya, seperti biasa pertama-tama kita harus menambahkan beberapa reso&rce string. Masukkan kode berikut pada res*val&es*string.%ml.
CresourcesF Cstring name$)app_name)F5pp#nventoryC stringF Cstring name$)nama_app)Ftwoh.web.idC stringF Cstring name$)hello_world)F'ello worldKC stringF Cstring name$)menu_settings)FSettingsC stringF Cstring name$)title_activity_main)F5pp#nventoryC stringF Cstring name$)barang_hint)F%ama BarangC stringF Cstring name$)harga_hint)F'arga BarangC stringF Cstring name$)merk_hint)F&erk BarangC stringF Cstring name$)tombol_submit)FSubmitC stringF Cstring name$)tombol_tambah)F4ambah 0ataC stringF Cstring name$)tombol_lihat)F/ihat 0ataC stringF Cstring name$)tombol_edit)FSaveC stringF Cstring name$)tombol_cancel)F+ancelC stringF Cstring name$)tombol_dialog_edit)F6ditC stringF Cstring name$)tombol_dialog_delete)F0eleteC stringF

Cstring name$)title_view)F0ata BarangC stringF Cstring name$)title_edit)F6dit Barang R #0 G C stringF C resourcesF

Setelah itu, kita buat layout !ile baru bernama edit;data.7ml. 6ile ini adalah layout untuk 8dit Vie(. ,ambahkan kode berikut pada edit;data.7ml.
CD,ml version$);.>) encoding$)ut31E)DF C8elative/ayout ,mlnsGandroid$)httpG schemas.android.com apk res android) ,mlnsGads$)httpG schemas.android.com apk lib com.google.ads) androidGlayout_width$)match_parent) androidGlayout_height$)match_parent) androidGorientation$)vertical) F C4e,t@iew androidGid$)"*id te,t_id_barang) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGte,t$)"string title_edit) androidGte,t5ppearance$)DandroidGattr te,t5ppearance/arge) androidGlayout_align<arent4op$)true) androidGlayout_center'oriHontal$)true) androidGlayout_margin4op$);=dp) androidGbackground$)Q>>>>33) F C6dit4e,t androidGid$)"*id edit4e,t_nama) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGems$);>) androidGlayout_margin4op$);=dp) androidGbackground$)Qa3333333) androidGlayout_below$)"id te,t_id_barang) F Cre-uestAocus F C 6dit4e,tF C6dit4e,t androidGid$)"*id edit4e,t_merk) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGems$);>) androidGlayout_margin4op$);=dp) androidGbackground$)Qa3333333) androidGlayout_below$)"id edit4e,t_nama) F C6dit4e,t androidGid$)"*id edit4e,t_harga) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGinput4ype$)number) androidGems$);>) androidGlayout_margin4op$);=dp) androidGbackground$)Qa3333333) androidGlayout_below$)"id edit4e,t_merk) F

C/inear/ayout androidGlayout_width$)match_parent) androidGlayout_height$)wrap_content) androidGorientation$)horiHontal) androidGgravity$)center) androidGlayout_below$)"id edit4e,t_harga) F CButton androidGid$)"*id button_save_update) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGte,t$)"string tombol_edit) F CButton androidGid$)"*id button_cancel_update) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGte,t$)"string tombol_cancel) F C /inear/ayoutF C 8elative/ayoutF

%pdate 'elas Vie Data


Sip, jika sudah, kita sekarang akan mengupdate kelas Vie($ata.ja/a. Kita akan menambahkan method $n/tem#ong lick#istener pada item di ListVie(. Suapaya apabila kita melakukan long click4klik yang panjang, akan ada dialog muncul. %iya, sebelumnya kita akan membuat layout untuk dialog terlebih dahulu. 0uat sebuah !ile 7ml baru bernama dialog'view.%ml. Kemudian copy pastekan kode berikut.
CD,ml version$);.>) encoding$)ut31E)DF C/inear/ayout ,mlnsGandroid$)httpG schemas.android.com apk res android) androidGlayout_width$)3ill_parent) androidGlayout_height$)3ill_parent) androidGorientation$)vertical) androidGgravity$)center) F CButton androidGid$)"*id button_edit_data) androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGte,t$)"string tombol_dialog_edit) F CButton androidGid$)"*id button_delete_data)

androidGlayout_width$)wrap_content) androidGlayout_height$)wrap_content) androidGte,t$)"string tombol_dialog_delete) F C /inear/ayoutF

Kemudian, buka !ile Vie($ata.7ml dan ganti dengan kode berikut


package id.twooh.appinventory; import import import import import import import import import import import import ?ava.util.5rray/ist; android.app.0ialog; android.app./ist5ctivity; android.content.#ntent; android.os.Bundle; android.view.@iew; android.view.@iew.(n+lick/istener; android.widget.5dapter@iew; android.widget.5dapter@iew.(n#tem/ong+lick/istener; android.widget.5rray5dapter; android.widget.Button; android.widget./ist@iew;

public class @iew0ata e,tends /ist5ctivity implements (n#tem/ong+lick/istener { inisialisasi kontroller private 0B0ataSource dataSource; inisialisasi arraylist private 5rray/istCBarangF values; private Button editButton; private Button delButton; "(verride public void on+reate(Bundle saved#nstanceState) { super.on+reate(saved#nstanceState); set+ontent@iew(8.layout.viewdata); dataSource $ new 0B0ataSource(this); buka kontroller dataSource.open(); ambil semua data barang values $ dataSource.get5llBarang(); masukkan data barang ke array adapter 5rray5dapterCBarangF adapter $ new 5rray5dapterCBarangF(this2 android.8.layout.simple_list_item_;2 values); set adapter pada list set/ist5dapter(adapter); mengambil listview untuk diset on#tem/ong+lick/istener /ist@iew lv $ (/ist@iew) 3ind@iewBy#d(android.8.id.list); lv.set(n#tem/ong+lick/istener(this);

apabila ada long click "(verride public boolean on#tem/ong+lick(3inal 5dapter@iewCDF adapter2 @iew v2 int pos2 3inal long id) { tampilkan alert dialog 3inal 0ialog dialog $ new 0ialog(this); dialog.set+ontent@iew(8.layout.dialog_view); dialog.set4itle()<ilih 5ksi)); dialog.show(); 3inal Barang b $ (Barang) get/ist5dapter().get#tem(pos); editButton $ (Button) dialog.3ind@iewBy#d(8.id.button_edit_data); delButton $ (Button) dialog.3ind@iewBy#d(8.id.button_delete_data); apabila tombol edit diklik editButton.set(n+lick/istener( new (n+lick/istener() { "(verride public void on+lick(@iew v) { 4(0( 5uto1generated method stub } } ); } return true; method untuk edit data public void switch4o6dit(long id) { Barang b $ dataSource.getBarang(id); #ntent i $ new #ntent(this2 6dit0ata.class); Bundle bun $ new Bundle(); bun.put/ong()id)2 b.get#d()); bun.putString()nama)2 b.get%ama_barang()); bun.putString()merk)2 b.get&erk_barang()); bun.putString()harga)2 b.get'arga_barang()); i.put6,tras(bun); 3inale(); start5ctivity(i); } method yang dipanggil ketika edit data selesai public void 3inale() { @iew0ata.this.3inish(); dataSource.close(); } "(verride protected void on8esume() { dataSource.open(); super.on8esume(); } switch4o6dit(b.get#d()); dialog.dismiss();

"(verride protected void on<ause() { dataSource.close(); super.on<ause(); } }

%ke, dari kode di atas kita bisa lihat bah(a sebagian besar perubahan ada pada !ungsi untuk mengeset %n lickListener pada item di list/ie(. -adi cara kerjanya, apabila list item diklik dan kemudian ditahan klik itu 9long click:, nanti akan muncul alert dialog yang memberikan pilihan kepada kita. Apakah ingin delete data, atau edit data. Apabila kita mengklik tombol edit data, maka kita akan diba(a ke acti/ity untuk edit data.

Membuat A(ti)it* Class &ditData+,a)a


Kita hampir selesai. Karena kita sudah membuat layout 7ml untuk edit data, sekarang kita akan membuat acti/ity-nya. 0uat !ile ja/a baru bernama 8dit$ata.ja/a. Kemudian copy pastekan kode berikut )
package id.twooh.appinventory; import import import import import import import import android.app.Activity; android.content.Intent; android.os.Bundle; android.view.View; android.view.View.OnClickListener; android.widget.Button; android.widget.Edit e!t; android.widget. e!tView;

pu"lic class Edit#ata e!tends Activity implements OnClickListener$ private #B#ata%ource data%ource; private private private private long id; %tring harga; %tring merk; %tring nama;

private Edit e!t ed&ama; private Edit e!t ed'arga;

private Edit e!t ed(erk; private e!tView t!Id;

private Button "tn%ave; private Button "tnCancel; private Barang "arang; )Override pu"lic void onCreate*Bundle savedInstance%tate+ $ super.onCreate*savedInstance%tate+; setContentView*,.layout.edit-data+; ..inisialisasi varia"el ed&ama / *Edit e!t+ 0indViewById*,.id.edit e!t-nama+; ed'arga / *Edit e!t+ 0indViewById*,.id.edit e!t-harga+; ed(erk / *Edit e!t+ 0indViewById*,.id.edit e!t-merk+; t!Id / * e!tView+ 0indViewById*,.id.te!t-id-"arang+; .."uat sam"ungan "aru ke data"ase data%ource / new #B#ata%ource*this+; data%ource.open*+; .. am"il data "arang dari e!tras Bundle "un / this.getIntent*+.getE!tras*+; id / "un.getLong*1id1+; harga / "un.get%tring*1harga1+; merk / "un.get%tring*1merk1+; nama / "un.get%tring*1nama1+; ..masukkan data2data "arang terse"ut ke 0ield editor t!Id.append*%tring.valueO0*id++; ed&ama.set e!t*nama+; ed'arga.set e!t*harga+; ed(erk.set e!t*merk+; ..set listener pada tom"ol "tn%ave / *Button+ 0indViewById*,.id."utton-save-update+; "tn%ave.setOnClickListener*this+; "tnCancel / *Button+ 0indViewById*,.id."utton-cancel-update+; "tnCancel.setOnClickListener*this+; 3 )Override pu"lic void onClick*View v+ $ .. O#O Auto2generated method stu" switch*v.getId*++ $ .. apa"ila tom"ol save diklik *update "arang+ case ,.id."utton-save-update 4 "arang / new Barang*+; "arang.set'arga-"arang*ed'arga.get e!t*+.to%tring*++; "arang.set&ama-"arang*ed&ama.get e!t*+.to%tring*++; "arang.set(erk-"arang*ed(erk.get e!t*+.to%tring*++; "arang.setId*id+; data%ource.updateBarang*"arang+; Intent i / new Intent*this5 View#ata.class+;

3 3 3

startActivity*i+; Edit#ata.this.0inish*+; data%ource.close*+; "reak; .. apa"ila tom"ol cancel diklik5 0inish activity case ,.id."utton-cancel-update 4 0inish*+; data%ource.close*+; "reak;

Acti/ity 8dit$ata.ja/a pada dasarnya ber!ungsi untuk mengambil data barang yang mau diedit, seperti nama, merk, dan harga. 5ntuk kemudian data tersebut ditempatkan pada !ield 8dit,e7t supaya bisa kita ganti. Setelah selesai, maka kita mengklik tombol Sa/e dan kemudian acti/ity akan memanggil method update0arang9: pada kontroller, yang akan melakukan update data le(at S'L 'uery.

Tamba$ a(ti)it* &ditData+,a)a 'e Android Mani#est


"ang terakhir adalah menambahkan acti/ity 8dit$ata di atas ke Android Mani!est. 0uka !ile AndroidMani!est.7ml dan copy pastekan kode berikut.
6mani0est !mlns4android/1http4..schemas.android.com.apk.res.android1 package/1id.twooh.appinventory1 android4versionCode/171 android4version&ame/18.9.9.:a1 ; 6uses2permission android4name/1android.permission.I& E,&E 1 .; 6uses2permission android4name/1android.permission.ACCE%%-&E <O,=-% A E1 .; 6uses2sdk android4min%dkVersion/1>1 android4target%dkVersion/18?1 .; 6application android4icon/1)drawa"le.ic-launcher1 android4la"el/1)string.app-name1 android4theme/1)style.App heme1 android4allowBackup/1true1 ; 6activity android4name/1id.twooh.appinventory.Create#ata1

android4la"el/1)string.title-activity-main1 ; 6.activity; 6activity android4name/1.(enu1 android4la"el/1)string.title-activity-main1 ; 6intent20ilter; 6action android4name/1android.intent.action.(AI&1 .; 6category android4name/1android.intent.category.LA@&C'E,1 .; 6.intent20ilter; 6.activity; 6activity android4name/1.View#ata1 android4la"el/1)string.title-activity-main1 ; 6.activity; 6activity android4name/1.Edit#ata1 android4la"el/1)string.title-activity-main1 ; 6.activity; 6.application; 6.mani0est;

Android SQLite Database C"%D Tutorial (V) : Membuat Fungsi Delete Data Membuat Fitur Delete data pada SQLIte Android
Langsung saja, seperti biasanya, kita akan menambahkan satu method baru pada kontroller DBData!o&rce.java. Satu method yang ber!ungsi untuk mendelete data tertentu pada database S'Lite. 0uka !ile $0$ataSource.ja/a, dan tambahkan kode berikut.
package id.twooh.appinventory; import import import import import import ?ava.util.5rray/ist; android.content.+ontent@alues; android.content.+onte,t; android.database.+ursor; android.database.S./6,ception; android.database.s-lite.S./ite0atabase;

public class 0B0ataSource { inisialiasi S./ite 0atabase private S./ite0atabase database;

inisialisasi kelas 0B'elper private 0B'elper db'elper; ambil semua nama kolom private StringNO all+olumns $ { 0B'elper.+(/7&%_#02 0B'elper.+(/7&%_%5&62 0B'elper.+(/7&%_&68920B'elper.+(/7&%_'58:5}; 0B'elper diinstantiasi pada constructor public 0B0ataSource(+onte,t conte,t) { db'elper $ new 0B'elper(conte,t); } membuka membuat sambungan baru ke database public void open() throws S./6,ception { database $ db'elper.getJritable0atabase(); } menutup sambungan ke database public void close() { db'elper.close(); } method untuk create insert barang ke database public Barang createBarang(String nama2 String merk2 String harga) { membuat sebuah +ontent@alues2 yang ber3ungsi untuk memasangkan data dengan nama1nama kolom pada database +ontent@alues values $ new +ontent@alues(); values.put(0B'elper.+(/7&%_%5&62 nama); values.put(0B'elper.+(/7&%_&6892 merk); values.put(0B'elper.+(/7&%_'58:52 harga); mengeksekusi perintah S./ insert data yang akan mengembalikan sebuah insert #0 long insert#d $ database.insert(0B'elper.45B/6_%5&62 null2 values); setelah data dimasukkan2 memanggil perintah S./ Select menggunakan +ursor untuk melihat apakah data tadi benarI sudah masuk dengan menyesuaikan #0 $ insert#0 +ursor cursor $ database.-uery(0B'elper.45B/6_%5&62 all+olumns2 0B'elper.+(/7&%_#0 * ) $ ) * insert#d2 null2 null2 null2 null); pindah ke data paling pertama cursor.move4oAirst(); mengubah ob?ek pada kursor pertama tadi ke dalam ob?ek barang Barang newBarang $ cursor4oBarang(cursor); close cursor

cursor.close(); mengembalikan barang baru return newBarang; } private Barang cursor4oBarang(+ursor cursor) { buat ob?ek barang baru Barang barang $ new Barang(); debug /(:+54 /og.v()in3o)2 )4he get/(%: )*cursor.get/ong(>)); /og.v()in3o)2 )4he set/at/ng )*cursor.getString(;)*)2)*cursor.getString(I)); Set atribut pada ob?ek barang dengan data kursor yang diambil dari database barang.set#d(cursor.get/ong(>)); barang.set%ama_barang(cursor.getString(;)); barang.set&erk_barang(cursor.getString(I)); barang.set'arga_barang(cursor.getString(P)); kembalikan sebagai ob?ek barang return barang; } mengambil semua data barang public 5rray/istCBarangF get5llBarang() { 5rray/istCBarangF da3tarBarang $ new 5rray/istCBarangF(); select all S./ -uery +ursor cursor $ database.-uery(0B'elper.45B/6_%5&62 all+olumns2 null2 null2 null2 null2 null); pindah ke data paling pertama cursor.move4oAirst(); ?ika masih ada data2 masukkan data barang ke da3tar barang while (Kcursor.is53ter/ast()) { Barang barang $ cursor4oBarang(cursor); da3tarBarang.add(barang); cursor.move4o%e,t(); } &ake sure to close the cursor cursor.close(); return da3tarBarang; } ambil satu barang sesuai id public Barang getBarang(long id) { Barang barang $ new Barang(); inisialisasi barang select -uery +ursor cursor $ database.-uery(0B'elper.45B/6_%5&62 all+olumns2 )_id $)*id2 null2 null2 null2 null); ambil data yang pertama cursor.move4oAirst();

masukkan data cursor ke ob?ek barang barang $ cursor4oBarang(cursor); tutup sambungan cursor.close(); return barang return barang; } update barang yang diedit public void updateBarang(Barang b) { ambil id barang String strAilter $ )_id$) * b.get#d(); memasukkan ke content values +ontent@alues args $ new +ontent@alues(); masukkan data sesuai dengan kolom pada database args.put(0B'elper.+(/7&%_%5&62 b.get%ama_barang()); args.put(0B'elper.+(/7&%_&6892 b.get&erk_barang()); args.put(0B'elper.+(/7&%_'58:52 b.get'arga_barang() ); update -uery database.update(0B'elper.45B/6_%5&62 args2 strAilter2 null); } delete barang sesuai #0 public void deleteBarang(long id) { String strAilter $ )_id$) * id; database.delete(0B'elper.45B/6_%5&62 strAilter2 null); }

Kode yang baru ada pada bagian yang di highlight, dan pada dasarnya kode itu hanya ber!ungsi untuk melakukan sebuah S'L <uery untuk delete data di database.

Menamba$'an tombol Delete pada Vie Data a(ti)it*


Kemudian kita akan mengupdate kelas Vie( $ata, sebenarnya kita sudah mempunyai tombol delete pada dialog yang akan dimunculkan ketika kita melakukan long click pada data item. "ang harus kita lakukan sekarang adalah mengeset method yang akan dijalankan apabila tombol delete tersebut diklik. =anti kode pada kelas Vie($ata.ja/a dengan kode di ba(ah ini )
package id.twooh.appinventory; import ?ava.util.5rray/ist; import com.google.ads.5d8e-uest;

import com.google.ads.5d@iew; import import import import import import import import import import import android.app.0ialog; android.app./ist5ctivity; android.content.#ntent; android.os.Bundle; android.view.@iew; android.view.@iew.(n+lick/istener; android.widget.5dapter@iew; android.widget.5dapter@iew.(n#tem/ong+lick/istener; android.widget.5rray5dapter; android.widget.Button; android.widget./ist@iew;

public class @iew0ata e,tends /ist5ctivity implements (n#tem/ong+lick/istener { inisialisasi kontroller private 0B0ataSource dataSource; inisialisasi arraylist private 5rray/istCBarangF values; private Button editButton; private Button delButton; "(verride public void on+reate(Bundle saved#nstanceState) { super.on+reate(saved#nstanceState); set+ontent@iew(8.layout.viewdata); 5d@iew ad@iew $ (5d@iew)this.3ind@iewBy#d(8.id.ad@iew_view); ad@iew.load5d(new 5d8e-uest()); dataSource $ new 0B0ataSource(this); buka kontroller dataSource.open(); ambil semua data barang values $ dataSource.get5llBarang(); masukkan data barang ke array adapter 5rray5dapterCBarangF adapter $ new 5rray5dapterCBarangF(this2 android.8.layout.simple_list_item_;2 values); set adapter pada list set/ist5dapter(adapter); mengambil listview untuk diset on#tem/ong+lick/istener /ist@iew lv $ (/ist@iew) 3ind@iewBy#d(android.8.id.list); lv.set(n#tem/ong+lick/istener(this); } apabila ada long click "(verride public boolean on#tem/ong+lick(3inal 5dapter@iewCDF adapter2 @iew v2 int pos2 3inal long id) {

tampilkan alert dialog 3inal 0ialog dialog $ new 0ialog(this); dialog.set+ontent@iew(8.layout.dialog_view); dialog.set4itle()<ilih 5ksi)); dialog.show(); 3inal Barang b $ (Barang) get/ist5dapter().get#tem(pos); editButton $ (Button) dialog.3ind@iewBy#d(8.id.button_edit_data); delButton $ (Button) dialog.3ind@iewBy#d(8.id.button_delete_data); apabila tombol edit diklik editButton.set(n+lick/istener( new (n+lick/istener() { "(verride public void on+lick(@iew v) { 4(0( 5uto1generated method switch4o6dit(b.get#d()); dialog.dismiss(); } ); }

stub

apabila tombol delete di klik delButton.set(n+lick/istener( new (n+lick/istener() { "(verride public void on+lick(@iew v) { 0elete barang dataSource.deleteBarang(b.get#d()); dialog.dismiss(); 3inish(); start5ctivity(get#ntent());

} ); return true; }

public void switch4o6dit(long id) { Barang b $ dataSource.getBarang(id); #ntent i $ new #ntent(this2 6dit0ata.class); Bundle bun $ new Bundle(); bun.put/ong()id)2 b.get#d()); bun.putString()nama)2 b.get%ama_barang()); bun.putString()merk)2 b.get&erk_barang()); bun.putString()harga)2 b.get'arga_barang()); i.put6,tras(bun); 3inale(); start5ctivity(i); }

public void 3inale() { @iew0ata.this.3inish(); dataSource.close(); } "(verride protected void on8esume() { dataSource.open(); super.on8esume(); } "(verride protected void on<ause() { dataSource.close(); super.on<ause(); } }

Kode yang baru ada pada bagian yang di-highlight. Sekarang apabila kalian jalankan aplikasinya dan mengklik tombol delete, maka method delete0arang9: pada controller akan dipanggil, dan data yang dimaksud akan dihapus dari database.

Anda mungkin juga menyukai