Contoh penggunaan SQLite database pada Android

Android menyediakan beberapa cara untuk menyimpan data pengguna dan data aplikasi. Salah satunya ialah dengan menggukanan Database SQLite yang didukung penuh oleh Android. SQLite adalah database yang sangat ringan yang include dalam Android OS. Dalam tutorial ini saya akan membahas bagaimana menulis kelas untuk menangani semua operasi SQLite.

Dalam tutorial ini akan menggunakan contoh data penyimpanan buku dalam database SQLite. Di sini menggunakan tabel yang diberinama tbl_buku untuk menyimpan data-data buku. tabel berisi tiga kolom id (INT), penulis (TEXT), judul (TEXT).

Struktur tabel Buku

Tabel buku

Field Type Key
id integer Primary
penulis text
judul text

 

Kelas Model Buku

Sebelumnya kita buat dahulu kelas model untuk tabel Buku lengkap dengan semua methods setter dan getter untuk mengelola data buku sebagai object.

File Buku.java
package id.web.sinaryuda.android.tutorial.databasesqlite; 

public class Buku {

    //variabel privat
    int _id;
    String _penulis;
    String _judul;

    // Empty constructor
    public Buku(){
    }
    // constructor
    public Buku(int id, String penulis, String judul){
        this._id = id;
        this._penulis = penulis;
        this._judul = judul;
    }

    // constructor
    public Buku(String penulis, String judul){
        this._penulis = penulis;
        this._judul = judul;
    }
    // getting ID
    public int getID(){
        return this._id;
    }

    // setting id
    public void setID(int id){
        this._id = id;
    }

    // getting penulis
    public String getPenulis(){
        return this._penulis;
    }

    // setting penulis
    public void setPenulis(String penulis){
        this._penulis = penulis;
    }

    // getting judul
    public String getJudul(){
        return this._judul;
    }

    // setting judul
    public void setJudul(String judul){
        this._judul = judul;
    }
}

Kelas SQLite Database Handler

Diperlukan kelas pengendali untuk mengelola operasi database seperti CRUD (Create, Read, Update dan Delete), buat kelas untuk mengelola database dengan meng-extends kelas SQLiteOpenHelper.

Setelah menurunkan kelas SQLiteOpenHelper perlu mengimplementasi dua methods OnCreate() dan OnUpgrade().

OnCreate() – ini adalah dimana untuk menulis perintah untuk membuat tabel, ini dipanggil ketika database dibuat.

OnUpgrade() – ini adalah dimana database diperbarui seperti modifikasi struktur tabel, menambah tabel atau lainnya.

public class DatabaseHandler extends SQLiteOpenHelper {

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "koleksibuku";

    // Contacts table name
    private static final String TABLE_BUKU = "buku";

    // Contacts Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_JUDUL = "judul";
    private static final String KEY_PENULIS = "penulis";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Buat Tabel
    @Override
    public void onCreate(SQLiteDatabase db) {
        String BUAT_TABEL_BUKU = "CREATE TABLE " + TABLE_BUKU + "("
                + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_JUDUL + " TEXT,"
                + KEY_PENULIS + " TEXT" + ")";
        db.execSQL(BUAT_TABEL_BUKU);
    }

    // Perbarui database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop tabel lama jika sudah ada
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_BUKU);

        // Create tables again
        onCreate(db);
    }

Operasi database CRUD ( CREATE, READ, UPDATE dan DELETE )

Sekarang diperlukan methods untuk operasi database, akan di implementasikan methods seperti beikut

// Menambahkan Buku baru
public void addBuku(Buku buku) {}

// Mengambil data satu buku
public Buku getBuku(int id) {}

// Mengambil semua data buku
public List getSemuaBuku() {}

// Mengambil jumlah buku
public int getBukuCount() {}

// Mengubah satu data buku
public int updateBuku(Buku buku) {}

// Menghapus satu data buku
public void deleteBuku(Buku buku) {}

 

  • Create data buku

Pada method addBuku() dapat menerima Object Buku sebagai parameter. perlu membuat ContentValues parameter dengan object Buku. Sekali menambahkan data ke database maka perlu untuk menutup koneksi database.

addContact()
// Menambahkan data buku
public void addBuku(Buku buku) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_PENULIS, buku.getJudul()); // Buku Penulis
    values.put(KEY_JUDUL, buku.getPenulis()); // Buku Judul

    // memasukkan data
    db.insert(TABLE_BUKU, null, values);
    db.close(); // Menutup koneksi database
}

 

  • Read data buku

Method getBuku() akan mengambil satu data buku. dengan parameter id dan mengembalikan satu data yang sesuai dengan id dari database.

getBuku()
// Mengambil satu data buku
public Buku getBuku(int id) {
	SQLiteDatabase db = this.getReadableDatabase();

	Cursor cursor = db.query(TABLE_BUKU, new String[] { KEY_ID,
			KEY_PENULIS, KEY_JUDUL }, KEY_ID + "=?",
			new String[] { String.valueOf(id) }, null, null, null, null);
	if (cursor != null)
		cursor.moveToFirst();

	Buku buku = new Buku(Integer.parseInt(cursor.getString(0)),
			cursor.getString(1), cursor.getString(2));
	// return buku
	return buku;
}

 

Method getSemuaBuku() akan mengambil semua data buku yang ada pada tabel buku di database dalam sebuah Array List dengan tipe data object Buku.

getSemuaBuku()
// mengambil semua data buku
public ArrayList getSemuaBuku() {
	ArrayList listBuku = new ArrayList();
	// Select semua data
	String selectQuery = "SELECT  * FROM " + TABLE_BUKU;

	SQLiteDatabase db = this.getWritableDatabase();
	Cursor cursor = db.rawQuery(selectQuery, null);

	// Perulangan semua data untuk dimasukkan kedalam list
	if (cursor.moveToFirst()) {
		do {
			Buku buku = new Buku();
			buku.setID(Integer.parseInt(cursor.getString(0)));
			buku.setPenulis(cursor.getString(1));
			buku.setJudul(cursor.getString(2));
			// Menambahkan data buku ke dalam list
			listBuku.add(buku);
		} while (cursor.moveToNext());
	}

	// return listBuku
	return listBuku;
}

 

Method getBukuCount() akan mengembalikan nilai jumlah data pada tabel buku.

getBukuCount()
// mengambil jumlah data buku
    public int getBukuCount() {
        String countQuery = "SELECT  * FROM " + TABLE_BUKU;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();

        // return count
        return cursor.getCount();
    }

 

  • Update data buku

Method updateBuku() mengubah satu data pada database dengan parameter object buku.

updateBuku()
// Mengubah data buku
public int updateBuku(Buku buku) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_PENULIS, buku.getPenulis());
    values.put(KEY_JUDUL, buku.getJudul());

    // mengubah data
    return db.update(TABLE_BUKU, values, KEY_ID + " = ?",
            new String[] { String.valueOf(buku.getID()) });
}

 

  • Delete data buku

Method deleteBuku() menghapus satu data buku dengan parameter id.

deleteBuku()
// Menghapus data buku
public void deleteContact(Buku buku) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_BUKU, KEY_ID + " = ?",
            new String[] { String.valueOf(buku.getID()) });
    db.close();
}

Contoh Penggunaan 

Pada class Activity buat object DatabaseHandler dan tambahkan beberapa method operasi database CRUD, seperti beikut.

Project TutorialDatabaseSQLite MainActivity
package id.web.sinaryuda.android.tutorial.databasesqlite;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		DatabaseHandler db = new DatabaseHandler(this);

		/**
		 * Operasi CRUD
		 **/

		// Menambahkan data buku
		Log.d("Insert: ", "Menambahkan data");
		db.addBuku(new Buku("Yosef Murya", "Pemrograman Android Black Box"));
		db.addBuku(new Buku("Wahana Komputer", "Android for Online Business"));
		db.addBuku(new Buku("Dodit Suprianto & Rini Agustina, S.Kom, M.Pd",
				"Pemrograman Aplikasi Android"));
		db.addBuku(new Buku("Tim EMS", "Android All In One"));

		// Baca Semua data buku
		Log.d("Reading: ", "Baca semua data buku");
		ArrayList buku = db.getSemuaBuku();

		for (Buku bk : buku) {
			String logBuku = "Id: " + bk.getID() + " ,Penulis: "
					+ bk.getPenulis() + " , Judul: " + bk.getJudul();
			// tampilkan data dalam Log
			Log.d("DataBuku: ", logBuku);
		}

		// update data buku
		Log.d("Updating: ", "Update data buku");
		db.updateBuku(new Buku( 4, "Jasmadi", "Program Terhebat Android"));

		Log.d("Reading: ", "Baca satu data buku");
		Buku satubuku = db.getBuku(4);
		String logBuku = "Id: " + satubuku.getID() + " ,Penulis: "
		+ satubuku.getPenulis() + " , Judul: " + satubuku.getJudul();
		// tampilkan data dalam Log
		Log.d("DataBuku: ", logBuku);

		ArrayList getbuku = db.getSemuaBuku();

		for (Buku bk : getbuku) {
			db.deleteContact(bk);
		}

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

Hasil pada LogCat

DDMS---TutorialDatabaseSQLite-src-id-web-sinaryuda-android-tutorial-databasesqlite-MainActivity

 

 

 

 

Kode lengkap dari kelas DatabaseHandler

File DatabaseHandler.java

package id.web.sinaryuda.android.tutorial.databasesqlite;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHandler extends SQLiteOpenHelper {

	// All Static variables
	// Database Version
	private static final int DATABASE_VERSION = 1;

	// Database Name
	private static final String DATABASE_NAME = "koleksibuku";

	// Contacts table name
	private static final String TABLE_BUKU = "buku";

	// Contacts Table Columns names
	private static final String KEY_ID = "id";
	private static final String KEY_JUDUL = "judul";
	private static final String KEY_PENULIS = "penulis";

	public DatabaseHandler(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}

	// Buat Tabel
	@Override
	public void onCreate(SQLiteDatabase db) {
		String BUAT_TABEL_BUKU = "CREATE TABLE " + TABLE_BUKU + "(" + KEY_ID
				+ " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_JUDUL + " TEXT,"
				+ KEY_PENULIS + " TEXT" + ")";
		db.execSQL(BUAT_TABEL_BUKU);
	}

	// Perbarui database
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// Drop tabel lama jika sudah ada
		db.execSQL("DROP TABLE IF EXISTS " + TABLE_BUKU);

		// Create tables again
		onCreate(db);
	}

	/**
	 * OPERASI CRUD(Create, Read, Update, Delete)
	 */

	// Menambahkan data buku
	public void addBuku(Buku buku) {
		SQLiteDatabase db = this.getWritableDatabase();

		ContentValues values = new ContentValues();
		values.put(KEY_PENULIS, buku.getJudul()); // Buku Penulis
		values.put(KEY_JUDUL, buku.getPenulis()); // Buku Judul

		// memasukkan data
		db.insert(TABLE_BUKU, null, values);
		db.close(); // Menutup koneksi database
	}

	// Mengambil satu data buku
	public Buku getBuku(int id) {
		SQLiteDatabase db = this.getReadableDatabase();

		Cursor cursor = db.query(TABLE_BUKU, new String[] { KEY_ID,
				KEY_PENULIS, KEY_JUDUL }, KEY_ID + "=?",
				new String[] { String.valueOf(id) }, null, null, null, null);
		if (cursor != null)
			cursor.moveToFirst();

		Buku buku = new Buku(Integer.parseInt(cursor.getString(0)),
				cursor.getString(1), cursor.getString(2));
		// return buku
		return buku;
	}

	// mengambil semua data buku
	public ArrayList getSemuaBuku() {
		ArrayList listBuku = new ArrayList();
		// Select semua data
		String selectQuery = "SELECT  * FROM " + TABLE_BUKU;

		SQLiteDatabase db = this.getWritableDatabase();
		Cursor cursor = db.rawQuery(selectQuery, null);

		// Perulangan semua data untuk dimasukkan kedalam list
		if (cursor.moveToFirst()) {
			do {
				Buku buku = new Buku();
				buku.setID(Integer.parseInt(cursor.getString(0)));
				buku.setPenulis(cursor.getString(1));
				buku.setJudul(cursor.getString(2));
				// Menambahkan data buku ke dalam list
				listBuku.add(buku);
			} while (cursor.moveToNext());
		}

		// return listBuku
		return listBuku;
	}

	// mengambil jumlah data buku
	public int getBukuCount() {
        String countQuery = "SELECT  * FROM " + TABLE_BUKU;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();

        // return count
        return cursor.getCount();
    }

	// Mengubah data buku
	public int updateBuku(Buku buku) {
		SQLiteDatabase db = this.getWritableDatabase();

		ContentValues values = new ContentValues();
		values.put(KEY_PENULIS, buku.getPenulis());
		values.put(KEY_JUDUL, buku.getJudul());

		// mengubah data
		return db.update(TABLE_BUKU, values, KEY_ID + " = ?",
				new String[] { String.valueOf(buku.getID()) });
	}

	// Menghapus data buku
	public void deleteContact(Buku buku) {
		SQLiteDatabase db = this.getWritableDatabase();
		db.delete(TABLE_BUKU, KEY_ID + " = ?",
				new String[] { String.valueOf(buku.getID()) });
		db.close();
	}
}

 

Source Code @ GitHub

Incoming search terms:

  • makasih

  • Deni

    Delete data buku

    Method deleteBuku() menghapus satu data buku dengan parameter id.

    deleteBuku()
    // Menghapus data buku
    public void deleteContact(Buku buku) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_BUKU, KEY_ID + ” = ?”,
    new String[] { String.valueOf(buku.getID()) });
    db.close();
    }

    Bagaimana caranya kalo menghapus satu data buku tersebut tanpa menggunakan parameter id, misalnya menggunakan parameter judul? makasih ya, mohon bantuannya

  • Hi Deni,
    untuk menghapus dengan parameter selain id misal judul ialah dengan mengganti klausa where dan nilai dari where nya.

    penggunaan method delete pada SQLiteOpenHelper
    db.delete(nama tabel, klausa where , nilai where);

    contohnya bisa seperti ini,
    deleteBuku()
    // Menghapus data buku
    public void deleteContact(Buku buku) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_BUKU, KEY_JUDUL + ” = ?”,
    new String[] { String.valueOf(buku. getJudul()) });
    db.close();
    }

    semoga membantu

  • anon

    bos kalo buat multi table gimana ?

  • agus

    pernah buat sistem pakar ndak bos

  • mantap…

  • fridu

    mas kalau buat lebih dari 1 tabel gimana mas.
    moho bantuanya.
    terimakasih