CRUD Sqlite pada android
Saya akan melanjutkan projek kasirku dan menambahkan database local, android sendiri sudah memiliki database local tersebut yaitu sqlite, jadi kita tidak perlu menambahkan dependency lainnya pada build.gradle. 😊
Hal yang anda dapat lakukan pertama yaitu membuat package baru dengan nama ‘database’ yang akan kita isi class yang kita butuhkan nantinya, jika anda tidak ingin membuat package tidak masalah juga, hanya saja agar strukturnya rapi dan enak dilihat lebih baik kita buat package saja 😊
Setelah package bernama database dibuat, buatlah dua class baru didalamnya. Class pertama bernama DatabaseModel dan class kedua bernama DatabaseHelper
Class DatabaseModel ini berisi data atau object yang akan kita gunakan untuk membuat table dan kolom didalam database, jadi class ini berisikan atribut atribut dalam pembuatan database dari nama table kemudian kolom kolom yang ada pada table tersebut. Untuk kode programnya bisa copy kode berikut :
public class DatabaseModel {
public static final String TABLE_NAME = "barang";
public static final String COLUMN_ID = "kode_barang";
public static final String COLUMN_NAMA_BARANG = "nama_barang";
public static final String COLUMN_JUMLAH_BARANG = "jumlah_barang";
public static final String COLUMN_TIMESTAMP = "timestamp";
private int kode_barang;
private String nama_barang;
private String jumlah_barang;
private String timestamp;
//Query untuk membuat tabel SQL
public static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME
+ "("
+ COLUMN_ID + "INTEGER PRIMARY KEY AUTOINCREMENT, "
+ COLUMN_NAMA_BARANG + "TEXT, "
+ COLUMN_JUMLAH_BARANG + "TEXT, "
+ COLUMN_TIMESTAMP + "DATETIME DEFAULT CURRENT_TIMESTAMP"
+ ")";
public DatabaseModel() {
}
public DatabaseModel(int kode_barang, String nama_barang, String jumlah_barang, String timestamp) {
this.kode_barang = kode_barang;
this.nama_barang = nama_barang;
this.jumlah_barang = jumlah_barang;
this.timestamp = timestamp;
}
public int getKode_barang() {
return kode_barang;
}
public void setKode_barang(int kode_barang) {
this.kode_barang = kode_barang;
}
public String getNama_barang() {
return nama_barang;
}
public void setNama_barang(String nama_barang) {
this.nama_barang = nama_barang;
}
public String getJumlah_barang() {
return jumlah_barang;
}
public void setJumlah_barang(String jumlah_barang) {
this.jumlah_barang = jumlah_barang;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
}
setelah itu class DatabaseHelper, class database helper ini extend ke SQLiteOpenHelper, nah jika telah di extends ke SQLiteOpenHelper dan menjadi merah seperti gambar dibawah ini :
Anda dapat mengarahkan kursor ke nama Class dan tekan alt+enter kemudian implement method yang dibutuhkan seperti berikut :
Kemudian click OK
Jika masih merah seperti gambar berikut, kita bisa tambahkan constructor dengan parameter context :
Lakukan sekali lagi dengan menekan alt+enter dan tambahkan constructor matching super. Pilih yang paling atas dan tekan OK :
saya sendiri menambahkan construktor yang paling atas, tetapi saya membuat constructor baru dengan satu parameter yaitu context seperti gambar berikut, karena constructor ini yang akan kita gunakan nanti, constructor pada gambar diatas pun juga dapat diabaikan :
Saat kita melakukan implement method terdapat 2 buah method yang ditambahkan,
pertama ada method override create yang berfungsi untuk membuat table database
method override onUpgrade yang digunakan untuk mengupdate table, jika kita melakukan perubahan terhadap table(missal kita menambah kolom dan lain lain)
Selanjutnya buat variabel static dengan nama DATABASE_VERSION dengan tipe data integer, akses modifier private seperti berikut :
private static final int DATABASE_VERSION = 1;
dan berikut :
private static final String DATABASE_NAME = "cashier";
kemudian pada method override onCreate tambahkan kode yang digunakan untuk melakukan eksekusi pembuatan table :
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + DatabaseModel.TABLE_NAME);onCreate(sqLiteDatabase);
jika dilihat secara keseluruhan, class DatabaseHelper.java akan seperti berikut :
public class DatabaseHelper extends SQLiteOpenHelper {
//versi database
private static final int DATABASE_VERSION = 1
//nama database
private static final String DATABASE_NAME = "cashier";
public DatabaseHelper(@Nullable Context context, @Nullable String name,@Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
//buat tabel database
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(DatabaseModel.CREATE_TABLE);
}
//update database
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
//jika dilakukan perubahan pada table lakukan drop table lama dulu baru tambahkan tabel baru
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + DatabaseModel.TABLE_NAME);
//tambah tabel lagi setelah dilakukan perubahan(misal perubahan kolom dan lain lain)
onCreate(sqLiteDatabase);
}
}
kemudian kita dapat membuat fungsi CRUD pada class DatabaseHelper.java, kita mulai dari create data.
- Create Data
public void tambahBarang(DatabaseModel databaseModel) {SQLiteDatabase insert_database = getWritableDatabase();
insert_database.beginTransaction();
try {
ContentValues values = new ContentValues();
values.put(DatabaseModel.COLUMN_NAMA_BARANG, databaseModel.getNama_barang());
values.put(DatabaseModel.COLUMN_JUMLAH_BARANG, databaseModel.getJumlah_barang());
values.put(DatabaseModel.COLUMN_TIMESTAMP, databaseModel.getTimestamp());
insert_database.insertOrThrow(DatabaseModel.TABLE_NAME, null, values);
insert_database.setTransactionSuccessful();
Toast.makeText(mContex, "Data Tersimpan", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
} finally {
insert_database.endTransaction();
}}
Pada create data ini saya tambahkan bumbu sedikit hehe 😊, saya buatkan method function baru dengan tujuan untuk mengecek apakah data yang akan kita tambahkan nanti sudah ada atau belum, berikut kodenya :
public boolean Exists(String searchItem) {
SQLiteDatabase read_database = getReadableDatabase();
String[] columns = {DatabaseModel.COLUMN_NAMA_BARANG};
String selection = DatabaseModel.COLUMN_NAMA_BARANG + " =?";
String[] selectionArgs = {searchItem};
String limit = "1";
Cursor cursor = read_database.query(DatabaseModel.TABLE_NAME, columns, selection, selectionArgs, null, null, null, limit);
boolean exists = (cursor.getCount() > 0);
cursor.close();
return exists;
}
nilai kembalian berupa bolean tadi kita dapat jadikan patokan fungsi seleksi pada method function tambahBarang, sehingga kode pada method tambahBarang berubah menjadi berikut :
public void tambahBarang(DatabaseModel databaseModel) {
//di kemudian hari dapat dilakukan cek apakah barang sudah ada atau belum tapi kita blm gunakan
SQLiteDatabase read_database = getReadableDatabase();
if (Exists(databaseModel.getNama_barang())) {
//data ada
Toast.makeText(mContex, "Data " + databaseModel.getNama_barang() + " Sudah Ada!", Toast.LENGTH_SHORT).show();
} else {
//data null maka insert data
SQLiteDatabase insert_database = getWritableDatabase();
insert_database.beginTransaction();
try {
ContentValues values = new ContentValues();
values.put(DatabaseModel.COLUMN_NAMA_BARANG, databaseModel.getNama_barang());
values.put(DatabaseModel.COLUMN_JUMLAH_BARANG, databaseModel.getJumlah_barang());
values.put(DatabaseModel.COLUMN_TIMESTAMP, databaseModel.getTimestamp());
insert_database.insertOrThrow(DatabaseModel.TABLE_NAME, null, values);
insert_database.setTransactionSuccessful();Toast.makeText(mContex, "Data Tersimpan", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
} finally {
insert_database.endTransaction();
}
}
}
2. Read Data
Selanjutnya read data, dalam hal ini kita read semua data dan, anda dapat meng-copy fungsi dibawah ini :
public List<DatabaseModel> getSemuaDataBarang(){
List<DatabaseModel> databaseModels = new ArrayList<>();
String query = "SELECT * FROM " + DatabaseModel.TABLE_NAME;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursorread = db.rawQuery(query, null);
//looping ke tiap baris lalu masukkan ke dalam arraylist
if (cursorread.moveToFirst()){
do {
DatabaseModel databaseModel = new DatabaseModel();
databaseModel.setKode_barang(cursorread.getInt(cursorread.getColumnIndex(DatabaseModel.COLUMN_ID)));
databaseModel.setNama_barang(cursorread.getString(cursorread.getColumnIndex(DatabaseModel.COLUMN_NAMA_BARANG)));
databaseModel.setJumlah_barang(cursorread.getString(cursorread.getColumnIndex(DatabaseModel.COLUMN_JUMLAH_BARANG)));
databaseModels.add(databaseModel);
} while (cursorread.moveToNext());
}
//tutup koneksi
db.close();
return databaseModels;
}
3. Update Data
ketika kita buat update data kita bisa memanfaakan class DatabaseModel.java yang kita buat, kita bisa membuat object dan memasukkan data ke dalam object tersebut, nantinya object tersebut kita dapat panggil(parameter databaseModel). anda sekalian dapat meng-copy code berikut :
1. public int updateDataBarang (DatabaseModel databaseModel){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(DatabaseModel.COLUMN_NAMA_BARANG, databaseModel.getNama_barang());
values.put(DatabaseModel.COLUMN_JUMLAH_BARANG, databaseModel.getJumlah_barang());
//update
return db.update(DatabaseModel.TABLE_NAME, values,
DatabaseModel.COLUMN_ID
+ " = " + "'" + databaseModel.getKode_barang() + "'", null);
}
4. Delete data mirip seperti update data, hanya saja kita hanya butuh id dari barang yang akan kita delete, jadi parameternya hanya kita isi dengan ‘tipe_data kemudian nama variabel’. contohnya pada kode dibawah, karena kita meng-query delete hanya berdasarkan colom ID, anda sekalian dapat mengokpi kode berikut :
public void hapusBarang (int id){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(DatabaseModel.TABLE_NAME,
DatabaseModel.COLUMN_ID
+ " = " + "'" + id + "'", null);
db.close();
}
terima kasih telah membaca, untuk CRUD menggunakan sqlite sampai disini saja, method function yang telah dibuat tadi bisa kalian panggil langsung ditempat yang kalian butuhkan 😊. terdapat tambahan lagi. jika kalian ingin mengetahui apakah database sudah terbentuk atau belum kalian dapat mencari database tersebut pada device kalian, hal yang dibutuhkan :
pastikan kalian telah menjalankan kode tersebut, kemudian klik Device File Explorer yang ada pada pojok kanan bawah android studio
jika sudah kemudian buka tab data->data->cari nama package aplikasi kalian, contohnya saya com.example.myapplication.database
cari folder database dan nama database yang kalian buat sesuai dengan yang ada pada class DatabaseModel.java. kemudian klik kanan->save as. untuk membukanya kalian bisa menggunakan software sqlite studio dan selesai 😊. mohon maaf gambarnya nge-blur, saya juga binggung padahal hasil snippingnya tidak blur :(