PENDAHULUAN
SQLite merupakan sebuah database management system yang telah tersedia pada sistem operasi Android. Anda bisa memanfaatkannya tanpa perlu melakukan instalasi lagi. Berbeda dengan DBMS lain seperti MySQL atau Oracle, SQLite merupakan database yang berukuran kecil dan berdiri sendiri (bukan client server) Untuk lebih jelasnya, anda bisa membuka situs resmi SQLite di http://www.sqlite.org.
STUDI KASUS
Untuk memudahkan pemahaman, berikut akan dijelaskan langkah demi langkah dalam pembuatan code untuk memanfaatkan database SQLite pada Android. Studi kasus yang digunakan adalah studi kasus pada toko retail, dimana akan dibangun sebuah aplikasi yang mencatat Barang atau Produk yang dijual. Diasumsikan anda sudah memahami sintaks Java Programming beserta Android Studio.
SQLITE OPEN HELPER
Untuk memulai pembuatan database dengan SQLite pada Android, anda perlu membuat sebuah kelas helper yang merupakan turunan dari kelas SQLiteOpenHelper. Dengan anda menurunkan kelas ini, maka otomatis anda akan diminta untuk mengimplementasikan beberapa callback (override) berikut:
- onCreate, merupakan method yang akan dijalankan secara otomatis ketika database tidak ada (ketika database pertama kali dibuat). Isi dari method onCreate umumnya adalah mengeksekusi sql (query yang anda buat sendiri untuk create tabel-tabel) dari objek SQLiteDatabase.
- onUpgrade, merupakan method yang akan dijalankan secara otomatis jika ada perubahan versi dari database
- onOpen, bersifat opsional, merupakan method yang dijalankan secara otomatis ketika database dibuka
Berikut merupakan contoh code pembuatan kelas helper.
package ardev.id.myapplication.database;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;
public class DBHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Latihan.db";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_PRODUCT = "product";
public static final String COLUMN_ID = "id";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_PRICE = "price";
public static final String COLUMN_UNIT = "unit";
public static final String COLUMN_STOCK = "stock";
private Context context;
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(
"CREATE TABLE IF NOT EXISTS " + TABLE_PRODUCT + " (" +
COLUMN_ID +" integer primary key," +
COLUMN_NAME +" text NOT NULL," +
COLUMN_PRICE +" real NOT NULL," +
COLUMN_UNIT +" text NOT NULL," +
COLUMN_STOCK +" integer NOT NULL"+
");"
);
Log.i("INFO", "Tabel "+TABLE_PRODUCT+" was Created");
Toast.makeText(context,"Tabel "+TABLE_PRODUCT+" was Created",Toast.LENGTH_LONG);
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
}
}
MENYIAPKAN SEBUAH KELAS MODEL
Pada project ini akan digunakan pendekatan MVC (Model-View-Controller) untuk membangun aplikasi Android dengan SQLite untuk penyimpanan data produk. Untuk itu, langkah berikutnya, anda perlu membuat sebuah kelas Model yang merepresentasikan objek data yang akan disimpan. Kelas model tersebut dinamakan Product.java dengan isinya adalah atribut-atribut tabel Product beserta method get dan set untuk pengaksesannya.
package ardev.id.myapplication.model;
public class Product {
private String id;
private String name;
private long price;
private String unit;
private int stock;
public Product(String id, String name, long price, String unit, int stock) {
this.id = id;
this.name = name;
this.price = price;
this.unit = unit;
this.stock = stock;
}
public Product(){
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getPrice() {
return price;
}
public void setPrice(long price) {
this.price = price;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
@Override
public String toString() {
return getName()+ " | STOCK : "+getStock();
}
}
MEMBUKA DATABASE
Untuk membuka dan memanipulasi database yang telah dibuat, sebaiknya anda perlu membuat sebuah kelas terpisah dimana kelas tersebut akan memanggil kelas DBHelper yang telah dibuat tadi. Untuk mendapatkan objek SQLiteDatabase (objek database yang dimanipulasi), gunakanlah method getWritableDatabase() yang ada pada kelas DBHelper.
MEMANIPULASI DATA
Untuk melakukan penambahan (insert), perbaikan (edit), dan penghapusan (delete) data pada sebuah tabel, buatlah sebuah kelas terpisah yang khusus menangani hal tersebut. Kelas tersebut diistilahkan dengan DAO (Data Access Object). Pada kelas tersebut, akan dipanggil kelas Helper yang sudah dibuat tadi untuk membuka database. Selanjutnya, dengan bantuan kelas ContentValues, akan disisipkan data dengan format “key-value”.
1. Penambahan (Insert)
Untuk melakukan perintah insert, gunakan method berikut yang disediakan oleh objek SQLiteDatabase.
public long insert (String table, String nullColumnHack, ContentValues values)
- Parameter tabel merupakan nama tabel yang akan dituju untuk pengisian data
- Parameter nullColumnHack diisi dengan nama kolom yang akan diisi dengan nilai kosong (null). Jika tidak ada, parameter tersebut bisa dikosongkan atau diisi dengan nilai null
- Parameter values, diisi dengan objek ContentValues yang sudah dibuat
Method tersebut diatas akan menghasil return -1 jika terjadi kesalahan. Jika tidak ada kesalahan, maka akan menghasilkan return berupa row ID.
2. Perbaikan (Edit)
Untuk melakukan perintah edit, gunakan method berikut yang disediakan oleh objek SQLiteDatabase.
public int update (String table, ContentValues values, String whereClause, String[] whereArgs)
- Parameter tabel adalah nama tabel yang akan diupdate
- Parameter values, diisi dengan objek ContentValues yang sudah dibuat
- Parameter whereClause diisi dengan string query sql bagian statement where, jika diisi dengan null maka dianggap akan mengupdate semua baris data
- Parameter whereArgs, diisi dengan nilai masing-masing parameter ? pada string whereClause. Diisi dengan null jika tidak menggunakan parameter ?
Method tersebut akan menghasilkan int yang berarti jumlah baris yang telah berhasil diupdate.
3. Penghapusan (Delete)
Untuk melakukan perintah delete, gunakan method berikut yang disediakan oleh objek SQLiteDatabase.
public int delete (String table, String whereClause, String[] whereArgs)
Penjelasan tiap parameter sama dengan penjelasan parameter edit di atas. Untuk lebih jelasnya, bisa melihat contoh kelas ProductDAO.java di bawah.
package ardev.id.myapplication.database;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
import ardev.id.myapplication.model.Product;
public class ProductDAO {
private DBHelper dbHelper;
private String TABLE_NAME = DBHelper.TABLE_PRODUCT;
public ProductDAO(Context c){
dbHelper = new DBHelper(c);
}
public boolean checkDB(){
if (dbHelper.getWritableDatabase()==null){
return false;
}else{
return true;
}
}
public long insert(Product p){
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(DBHelper.COLUMN_NAME, p.getName());
contentValues.put(DBHelper.COLUMN_PRICE, p.getPrice());
contentValues.put(DBHelper.COLUMN_UNIT, p.getUnit());
contentValues.put(DBHelper.COLUMN_STOCK, p.getStock());
long id = db.insert(TABLE_NAME, null, contentValues);
db.close();
return id;
}
public int update(Product p){
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(DBHelper.COLUMN_NAME, p.getName());
contentValues.put(DBHelper.COLUMN_PRICE, p.getPrice());
contentValues.put(DBHelper.COLUMN_UNIT, p.getUnit());
contentValues.put(DBHelper.COLUMN_STOCK, p.getStock());
// updating row
return db.update(
DBHelper.TABLE_PRODUCT,
contentValues,
DBHelper.COLUMN_ID+" = ?",
new String[]{
p.getId()
});
}
public int delete(Product p){
SQLiteDatabase db = dbHelper.getWritableDatabase();
return db.delete(
DBHelper.TABLE_PRODUCT,
DBHelper.COLUMN_ID+" = ? ",
new String[]{
p.getId()
});
}
public List<Product> getAllData(){
String sql = "select * from " + DBHelper.TABLE_PRODUCT;
return executeQuery(sql);
}
private List<Product> executeQuery(String sql){
List<Product> productList = new ArrayList<Product>();
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor res = db.rawQuery(sql, null);
res.moveToFirst();
while(res.isAfterLast() == false){
productList.add(
new Product(
res.getString(res.getColumnIndex(DBHelper.COLUMN_ID)),
res.getString(res.getColumnIndex(DBHelper.COLUMN_NAME)),
res.getLong(res.getColumnIndex(DBHelper.COLUMN_PRICE)),
res.getString(res.getColumnIndex(DBHelper.COLUMN_UNIT)),
res.getInt(res.getColumnIndex(DBHelper.COLUMN_STOCK))
)
);
res.moveToNext();
}
return productList;
}
}
PEMBUATAN ACTIVITY
Setelah selesai dengan pembuatan kelas DAO, selanjutnya buatlah kelas-kelas Activity yang akan memanfaatkan kelas DAO tadi. Akan dibuat 2 buah activity, yaitu MainActivity yang akan menampilkan list produk yang sudah tersimpan di database, dan ProductActivity sebagai halaman untuk menambahkan produk ke database.
package ardev.id.myapplication;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.List;
import ardev.id.myapplication.database.ProductDAO;
import ardev.id.myapplication.model.Product;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getListData();
}
private void getListData(){
ProductDAO productDAO = new ProductDAO(this);
final List<Product> productList = productDAO.getAllData();
final ListView listView = (ListView) findViewById(R.id.list_view);
ArrayAdapter<Product> adapter = new ArrayAdapter<Product>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, productList);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int itemPosition = position;
Product product = productList.get(position);
Toast.makeText(getApplicationContext(), "Anda menge-klik "+product.getName() , Toast.LENGTH_LONG).show();
}
});
}
public void openAddNew(View v){
Intent myIntent = new Intent(this, ProductActivity.class);
startActivity(myIntent);
}
@Override
protected void onResume() {
super.onResume();
getListData();
}
}
package ardev.id.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import ardev.id.myapplication.database.ProductDAO;
import ardev.id.myapplication.model.Product;
public class ProductActivity extends AppCompatActivity {
private ProductDAO productDAO;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_product);
productDAO = new ProductDAO(this);
((Button) findViewById(R.id.button_save)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name = ((TextView) findViewById(R.id.edit_txt_name)).getText().toString();
String priceString = ((TextView) findViewById(R.id.edit_txt_price)).getText().toString();
String unit = ((TextView) findViewById(R.id.edit_txt_unit)).getText().toString();
String stockString = ((TextView) findViewById(R.id.edit_txt_stock)).getText().toString();
if (priceString.isEmpty()){
priceString = "0";
}
if (stockString.isEmpty()){
stockString = "0";
}
long price = Long.parseLong(priceString);
int stock = Integer.parseInt(stockString);
Product p = new Product(null,name,price,unit,stock);
if (productDAO.insert(p)>0){
Toast.makeText(ProductActivity.this,"Data berhasil disimpan",Toast.LENGTH_LONG).show();
finish();
}else{
Toast.makeText(ProductActivity.this,"Data GAGAL disimpan",Toast.LENGTH_LONG).show();
}
}
});
}
}
Berikutnya adalah pengaturan layout yang dibuat pada file XML berikut.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="ardev.id.myapplication.MainActivity">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="openAddNew"
android:text="ADD NEW"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".ProductActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edit_txt_name"
android:hint="Product Name"
android:inputType="text"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edit_txt_price"
android:hint="Product Price"
android:inputType="number"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edit_txt_unit"
android:hint="Product Unit"
android:inputType="text"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edit_txt_stock"
android:hint="Product Stock"
android:inputType="number"/>
<Button
android:id="@+id/button_save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SAVE"/>
</LinearLayout>
HASIL RUNNING


Waduh, tak kirain mudah, ternyata susah yah. mesti lebih giat belajar lagi nih step by stepnya. byt the way makasih infonya 🙂
Sama-sama hamid 🙂
kak cara buat aplikasi login auto generate sample usernam dan password bagaimana ya caranya?
Terima kasih telah berkunjung.
Mungkin nanti akan kami buatkan tutorialnya. 🙂
gampang kata anak saya
Terima kasih 🙂