Last Updated on 8 years by Mas Herdi
Akhirnya kita sampai pada postingan terakhir dari series tutorial membuat aplikasi CRUD di SQLite database Android. Sejauh ini, aplikasi inventaris barang kita sudah mempunyai fitur untuk tambah data, baca data, edit data. Pada postingan yang terakhir ini, kita akan membahas satu fitur yang belum kita implementasikan, yaitu fitur Delete data. Dan sesuai urutannya, Create, Read, Update, Delete, berarti ada tiga ditambah satu tutorial khusus yang harus kalian baca sebelum melanjutkan ke tutorial ini. Silahkan menuju halaman indeks Android SQLIte Database CRUD tutorial. Atau merujuk pada link prerequisites di bawah.
Pre Requisites
- Tutorial membuat database SQLite Android (link)
- Implementasi fitur Create Data (link)
- Implementasi fitur Read Data (link)
- Implementasi fitur Update Data (link)
- Implementasi fitur Get Detail Data (link)
Membuat Fitur Delete data pada SQLIte Android
Langsung saja, seperti biasanya, kita akan menambahkan satu method baru pada kontroller DBDataSource.java. Satu method yang berfungsi untuk mendelete data tertentu pada database SQLite. Buka file DBDataSource.java, dan tambahkan kode berikut.
package id.twooh.appinventory; import java.util.ArrayList; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; public class DBDataSource { //inisialiasi SQLite Database private SQLiteDatabase database; //inisialisasi kelas DBHelper private DBHelper dbHelper; //ambil semua nama kolom private String[] allColumns = { DBHelper.COLUMN_ID, DBHelper.COLUMN_NAME, DBHelper.COLUMN_MERK,DBHelper.COLUMN_HARGA}; //DBHelper diinstantiasi pada constructor public DBDataSource(Context context) { dbHelper = new DBHelper(context); } //membuka/membuat sambungan baru ke database public void open() throws SQLException { database = dbHelper.getWritableDatabase(); } //menutup sambungan ke database public void close() { dbHelper.close(); } //method untuk create/insert barang ke database public Barang createBarang(String nama, String merk, String harga) { // membuat sebuah ContentValues, yang berfungsi // untuk memasangkan data dengan nama-nama // kolom pada database ContentValues values = new ContentValues(); values.put(DBHelper.COLUMN_NAME, nama); values.put(DBHelper.COLUMN_MERK, merk); values.put(DBHelper.COLUMN_HARGA, harga); // mengeksekusi perintah SQL insert data // yang akan mengembalikan sebuah insert ID long insertId = database.insert(DBHelper.TABLE_NAME, null, values); // setelah data dimasukkan, memanggil // perintah SQL Select menggunakan Cursor untuk // melihat apakah data tadi benar2 sudah masuk // dengan menyesuaikan ID = insertID Cursor cursor = database.query(DBHelper.TABLE_NAME, allColumns, DBHelper.COLUMN_ID + " = " + insertId, null, null, null, null); // pindah ke data paling pertama cursor.moveToFirst(); // mengubah objek pada kursor pertama tadi // ke dalam objek barang Barang newBarang = cursorToBarang(cursor); //close cursor cursor.close(); //mengembalikan barang baru return newBarang; } private Barang cursorToBarang(Cursor cursor) { // buat objek barang baru Barang barang = new Barang(); // debug LOGCAT //Log.v("info", "The getLONG "+cursor.getLong(0)); //Log.v("info", "The setLatLng "+cursor.getString(1)+","+cursor.getString(2)); // Set atribut pada objek barang dengan // data kursor yang diambil dari database barang.setId(cursor.getLong(0)); barang.setNama_barang(cursor.getString(1)); barang.setMerk_barang(cursor.getString(2)); barang.setHarga_barang(cursor.getString(3)); //kembalikan sebagai objek barang return barang; } //mengambil semua data barang public ArrayList<Barang> getAllBarang() { ArrayList<Barang> daftarBarang = new ArrayList<Barang>(); // select all SQL query Cursor cursor = database.query(DBHelper.TABLE_NAME, allColumns, null, null, null, null, null); // pindah ke data paling pertama cursor.moveToFirst(); // jika masih ada data, masukkan data barang ke // daftar barang while (!cursor.isAfterLast()) { Barang barang = cursorToBarang(cursor); daftarBarang.add(barang); cursor.moveToNext(); } // Make sure to close the cursor cursor.close(); return daftarBarang; } //ambil satu barang sesuai id public Barang getBarang(long id) { Barang barang = new Barang(); //inisialisasi barang //select query Cursor cursor = database.query(DBHelper.TABLE_NAME, allColumns, "_id ="+id, null, null, null, null); //ambil data yang pertama cursor.moveToFirst(); //masukkan data cursor ke objek barang barang = cursorToBarang(cursor); //tutup sambungan cursor.close(); //return barang return barang; } //update barang yang diedit public void updateBarang(Barang b) { //ambil id barang String strFilter = "_id=" + b.getId(); //memasukkan ke content values ContentValues args = new ContentValues(); //masukkan data sesuai dengan kolom pada database args.put(DBHelper.COLUMN_NAME, b.getNama_barang()); args.put(DBHelper.COLUMN_MERK, b.getMerk_barang()); args.put(DBHelper.COLUMN_HARGA, b.getHarga_barang() ); //update query database.update(DBHelper.TABLE_NAME, args, strFilter, null); } // delete barang sesuai ID public void deleteBarang(long id) { String strFilter = "_id=" + id; database.delete(DBHelper.TABLE_NAME, strFilter, null); } }
Kode yang baru ada pada bagian yang di highlight, dan pada dasarnya kode itu hanya berfungsi untuk melakukan sebuah SQL query untuk delete data di database.
Menambahkan tombol Delete pada ViewData activity
Kemudian kita akan mengupdate kelas View Data, sebenarnya kita sudah mempunyai tombol delete pada dialog yang akan dimunculkan ketika kita melakukan long click pada data item. Yang harus kita lakukan sekarang adalah mengeset method yang akan dijalankan apabila tombol delete tersebut diklik. Ganti kode pada kelas ViewData.java dengan kode di bawah ini :
package id.twooh.appinventory; import java.util.ArrayList; import android.app.Dialog; import android.app.ListActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; public class ViewData extends ListActivity implements OnItemLongClickListener { //inisialisasi kontroller private DBDataSource dataSource; //inisialisasi arraylist private ArrayList<Barang> values; private Button editButton; private Button delButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.viewdata); dataSource = new DBDataSource(this); // buka kontroller dataSource.open(); // ambil semua data barang values = dataSource.getAllBarang(); // masukkan data barang ke array adapter ArrayAdapter<Barang> adapter = new ArrayAdapter<Barang>(this, android.R.layout.simple_list_item_1, values); // set adapter pada list setListAdapter(adapter); // mengambil listview untuk diset onItemLongClickListener ListView lv = (ListView) findViewById(android.R.id.list); lv.setOnItemLongClickListener(this); } //apabila ada long click @Override public boolean onItemLongClick(final AdapterView<?> adapter, View v, int pos, final long id) { //tampilkan alert dialog final Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.dialog_view); dialog.setTitle("Pilih Aksi"); dialog.show(); final Barang b = (Barang) getListAdapter().getItem(pos); editButton = (Button) dialog.findViewById(R.id.button_edit_data); delButton = (Button) dialog.findViewById(R.id.button_delete_data); //apabila tombol edit diklik editButton.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub switchToEdit(b.getId()); dialog.dismiss(); } } ); //apabila tombol delete di klik delButton.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { // Delete barang dataSource.deleteBarang(b.getId()); dialog.dismiss(); finish(); startActivity(getIntent()); } } ); return true; } public void switchToEdit(long id) { Barang b = dataSource.getBarang(id); Intent i = new Intent(this, EditData.class); Bundle bun = new Bundle(); bun.putLong("id", b.getId()); bun.putString("nama", b.getNama_barang()); bun.putString("merk", b.getMerk_barang()); bun.putString("harga", b.getHarga_barang()); i.putExtras(bun); finale(); startActivity(i); } public void finale() { ViewData.this.finish(); dataSource.close(); } @Override protected void onResume() { dataSource.open(); super.onResume(); } @Override protected void onPause() { dataSource.close(); super.onPause(); } }
Kode yang baru ada pada bagian yang di-highlight. Sekarang apabila kalian jalankan aplikasinya dan mengklik tombol delete, maka method deleteBarang() pada controller akan dipanggil, dan data yang dimaksud akan dihapus dari database.
Demo Video
Well, hanya itu yang perlu ditambahkan. 😀 Dengan demikian series tutorial ini saya nyatakan selesai. Untuk demo-nya, kalian bisa cek dan download (tentu saja) AppInventory di Google Play Store. Bagi yang belum mengerti, silahkan tinggalkan komentar. 😉 Semoga bermanfaat.
UPDATE : menghapus kode AdView dan AdRequest yang menimbulkan pertanyaan dari kode.
wah keren…ternyata android juga ada databasenya ya 🙂
kasih tutorial upload (daftar aplikasi) ke google play store bang,,, makasih sebelumnya
Kalau daftarnya bayar gan, kalo upload gampang 🙂 nanti bisa dibuatin. Yang penting harus bisa signing aplikasi dulu, tutorialnya di sini
package id.twooh.appinventory;
Saya mau tanya nih, pada :
import com.google.ads.AdRequest;
import com.google.ads.AdView;
di aplikasi yang saya buat tertulis error, apa aplikasi saya ada yang kurang ….??? terimakasih
Oh itu dihapus aja, ngambil dari sampel ya?
mau tanya gan,
setelah hapus
import com.google.ads.AdRequest;
import com.google.ads.AdView;
kn masih ada yg eror AdRequest dan AdView, trs di apa kan itu lgi gan?
mohon bimbingannya..
Dihapus line ini gan
kalo saya mau ambil fungsi delete aja, gmn koding nya?
Tinggal update aja dengan method deleteBarang() di DBDataSource
udh d coba mas, tp ga bisa, error di log cat nya, ini koding nya
@Override
public void onClick(View delRiwayat) {
// TODO Auto-generated method stub
Riwayat r = (Riwayat) getListAdapter();
dataSource.deleteRiwayat(r.getId());
finish();
}
button nya d taruh di akhir listview, fungsinya buat apus semua listview, mohon bantuannya mas
Ooo… kalo method yang di tutorial ane itu buat delete data di database gan 😀
Kalo untuk hapus semua listview beda lagi caranya 🙂
listviewnya terhubung sqlite sma yg kayak agan buat, bedanya ane taruh button delete nya d akhir listview, mohon bantuan nya gan, ane udh bner2 mentok nih 🙁
Kalau mau hapus semua list view gimana kak?
sama kayak delete data di database, delete * from table
mas mohon bantuannya cara jumlahin nilai field harga barang gimana ya? Trims
tinggal dijumlah aja mas, pertama2 diambil dulu harga barang dari database nya
mas, boleh minta source code yg udah complete gak (CRUD)?
kirim ke adrahrov23@gmail.com yaa, makasihh
Source code komplitnya sama kayak yang disini kok bro, copas aja
bro, itu yg utk class adview’a yg mana yah n layoutnya utk adview_view’a juga ga ada bro sama fungsi adrequest..
mohon pencerahannya bro, newbie nih di android programming..:p
oow, baru ngeh deng itu yg kode google yah..:p
sori mabro..hahaha
at ease bro 🙂
Btw untuk yang kode ads itu bisa dihilangin kok. Itu cuma buat nampilin iklan
gan, saya baru mau mulai blajar nih. ada tutorial yg basic nya ga?
kalo ada saya boleh mnta kann
Hei Lisna-chan. 🙂
Tutorial basic kami bisa didapat di sini : http://www.twoh.web.id/2012/12/tutorial-membuat-aplikasi-android/
Mas Nanya Nih Di Tutorial Yang Database SQLite Bagian Delete Data Di ViewdData.java
yang “AdView adView = (AdView)this.findViewById(R.id.adView_view);”
Dia Gak Mau Bikin id di R Java Kenapa Ya??
itu dihapus saja kodenya.. Untuk nampilin iklan
owh oke gan udh bisa kalo ganti applikasi namenya gmna? ane dah ganti d string masih bernama”AppInventory” Kl Boleh Tau Itu Dmna Letaknya yah?
coba dilihat di /values/string.xml di bagian appname
super.onCreate(savedInstanceState);
setContentView(R.layout.viewdata);
AdView adView = (AdView)this.findViewById(R.id.adView_view);
adView.loadAd(new AdRequest());
Gan mAu tanya kode yang AdView dan AdRequest kok error? mohon bantuannya ?
mas nanya donk,, setelah jadi, diinstal di device, jalan apknya..itu database sql nya ada dimana ya tempatany? and tambahin tutorialnya donk buat ngirim ke email ato secara offline kita bisa ekspor database tersebut misal ke file txt di device hp kita (membuat file hasil entri untuk dpat selanjutnya dikirimkan via email dll gtu) thx mas
gan ane kan mau membuat sebuah combo box dimana di combo box nya nge-load data dari database yaitu dari kolom “merk”(misalkan)
ane udah coba di datasource nya tapi kaga jalan ini script nya..
projek ane sama kaya agan semuanya
minta solusi nya !!
thank’s
Permisi gan, numpang tanya. Misalkan dari datanya ditambah variabel “Spesifikasi” barang utk data Barang. tapi menampilkannya bkn di ViewData.java-nya, melainkan d sebuah activity baru yang menampilkan kseluruhan data barang mulai dr nama, merk, harga, dn spesifikasi yg td ane sebutkan itu kodingannya seperti apa ya gan??
Maaf kalo terlalu kepo. Hehehe 😀
Mas, kalau tablenya lebih dari satu dan berelasi (one-to-many atau many-to-many) gimana?
Terima kasih
abang.. tolong pencerahan kalo mo export import dalam bentuk csv bagaimana?
gan mau tanya nie, untuk liat isi databasenya secara detail gimana ya gan ?
Gan, cara ngatasin error disini :
dialog.setContentView(R.layout.dialog_view);
dialog.setTitle(“Pilih Aksi”);
dialog.show();
final Pesanan b = (Pesanan) getListAdapter().getItem(pos);
editButton = (Button) dialog.findViewById(R.id.button_edit_data);
delButton = (Button) dialog.findViewById(R.id.button_delete_data);
Dan disini :
Intent i = new Intent(this, EditData.class);
gimana ya?
Udah diakalin nambahin dari source masing-masing tapi pas di jalanin kagak aktif, cuma sekedar ngilangin error doang.
Makasi….
Iya tuh…sama error nya di situ juga…gimana gan solusinya…heheheh
kak maaf mau tanya,, kalau misal yang didelet ga cuma 1? tapi delete all data/clear all data? gimana ya kak? mohon bantuanya..
gan thanks buat tutorial nya, sangat membantu.
saya ada pertanyaan. kalo mau di tambah tabel didatabase nya gimana ya. biar jadi 2 tabel.
kan itu tabel pertama “barang” saya mau tambahin tabel “transaksi”.
Gan mau tanya knp aplikasi di buka saat klik tambah atau lihat aplikasi lngsung berhenti pdahal kodingan sama n gada eror..
kang, kalo untuk keep barang gimana ya ? makasih
Maksudnya keep barang gimana ya?
bang hafizh, kalo misal bikin tabelnya lebih dari satu gimana bang?