Pengelolaan Versi DB Database Sqlite di Android

By | October 8, 2021
930 Views

Pengelolaan Versi DB Database Sqlite di Android – sangatlah unik, semula kami pikir seperti Sqlite di windows pada umumnya, tapi ternyata agak beda cara kerjanya. Jadi ketika saya membuat aplikasi note untuk menyimpan catatan. Database berjalan dengan normal seperti biasa, namun ketika file database yang sudah ada akan ditambah table baru, maka disinilah letak masalahnya, yaitu sqlite tidak mau tambah table! ternyata VERSION itu yang harus diubah, misalkan semula VERSI_DB = 1; akan diubah menjadi VERSI_DB = 2; Kalian bisa lihat pada class Setting.java;  Ketika flag VERSI_DB diubah menjadi lebih tinggi itu menandakan file database yang lama akan ditimpa ulang sehingga data pada table lama tidak akan dihapus. Setting.java sebagai berikut

public class Setting {
    public static final String DATABASE = "sawit";
    public static final int VERSI_DB = 1;
}

 

Salah satu cara yang paling mudah dilakukan yaitu, kita sedari awal harus membuat banyak table terlebih dahulu, sehingga saya membuat DatabaseHelper.java yang berguna untuk membuat banyak table.  DatabaseHelper membuat 2 table yaitu

  1. ModelProvinsi:
    1. _id,
    2. kode_provinsi,
    3. nama_provinsi
  2. ModelKebun:
    1. _id,
    2. kode_kebun,
    3. nama_kebun
public class DatabaseHelper extends SQLiteOpenHelper {

    public DatabaseHelper(Context context){
        super(context, Setting.DATABASE,null,Setting.VERSI_DB);
    }
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {

        String sql1 = createSql(ModelProvinsi.table_name,ModelProvinsi.clm_id,ModelProvinsi.kode_provinsi,ModelProvinsi.nama_provinsi);
        String sql2 = createSql(ModelKebun.table_name,ModelKebun.clm_id,ModelKebun.kode_kebun,ModelKebun.nama_kebun);
        sqLiteDatabase.execSQL(sql1);
        sqLiteDatabase.execSQL(sql2);

    }

    private String createSql(String table_name, String clm_id, String kode, String nama){
        String query = "CREATE TABLE " + table_name + "(" + clm_id + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                + kode + " TEXT, " + nama + " TEXT)";
        return query;
    }
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + ModelProvinsi.table_name);
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + ModelKebun.table_name);
        onCreate(sqLiteDatabase);

    }
}

Sedangkan untuk ModelKebun.java isinya sebagai berikut

public class ModelKebun {
    public static final String table_name = "kebun";
    public static final String clm_id = "_id";
    public static final String kode_kebun = "kode_kebun";
    public static final String nama_kebun = "nama_kebun";
    private SQLiteDatabase db;
    public ModelKebun(SQLiteDatabase db){
        this.db = db;
    }

    //masukan data
    public void insert(ContentValues values){
        db.insert(table_name,null,values);
    }
    public void insertInstant(String kode_kebun, String nama_kebun){
        ContentValues contentValues = new ContentValues();
        contentValues.put(ModelKebun.kode_kebun,kode_kebun);
        contentValues.put(ModelKebun.nama_kebun,nama_kebun);
        insert(contentValues);
    }

    //ambil data semua
    public Cursor getALl(){
        Cursor cur = db.rawQuery("SELECT * FROM "+table_name,null);
        return cur;
    }
    //ambil 1 data
    public Cursor getOne(long id){
        Cursor cur = db.rawQuery("SELECT * FROM "+table_name+" WHERE "+clm_id+" = "+id,null);
        return cur;
    }
    //update
    public void update(ContentValues values,long id){
        db.update(table_name, values, clm_id + "=" + id, null);
    }
    //remove
    public void delete(long id){
        db.delete(table_name, clm_id + "=" + id, null);
    }
    
}

ModelProvinsi.java isinya sebagai berikut

public class ModelProvinsi {
    public static final String table_name = "provinsi";
    public static final String clm_id = "_id";
    public static final String kode_provinsi = "kode_provinsi";
    public static final String nama_provinsi = "nama_provinsi";
    private SQLiteDatabase db;

    public ModelProvinsi (SQLiteDatabase db){
        this.db = db;
    }

    //masukan data
    public void insert(ContentValues values){
        db.insert(table_name,null,values);
    }
    public void insertInstant(String kode_kebun, String nama_kebun){
        ContentValues contentValues = new ContentValues();
        contentValues.put(ModelProvinsi.kode_provinsi,kode_kebun);
        contentValues.put(ModelProvinsi.nama_provinsi,nama_kebun);
        insert(contentValues);
    }

    //ambil data semua
    public Cursor getALl(){
        Cursor cur = db.rawQuery("SELECT * FROM "+table_name,null);
        return cur;
    }
    //ambil 1 data
    public Cursor getOne(long id){
        Cursor cur = db.rawQuery("SELECT * FROM "+table_name+" WHERE "+clm_id+" = "+id,null);
        return cur;
    }
    //update
    public void update(ContentValues values,long id){
        db.update(table_name, values, clm_id + "=" + id, null);
    }
    //remove
    public void delete(long id){
        db.delete(table_name, clm_id + "=" + id, null);
    }
   
}

Jadi untuk menambah sebuah provinsi dan kebun, maka kode yang digunakan yaitu

DatabaseHelper helper = new DatabaseHelper(this);

ModelProvinsi modelProvinsi = new ModelProvinsi(helper.getWritableDatabase());
String [] prov = new String[]{
      "Sumut",
      "Riau"
};
for (String p:prov){
   modelProvinsi.insertInstant(p.toLowerCase(),p);

}

//database dulu
ModelKebun modelKebun = new ModelKebun(helper.getWritableDatabase());
modelKebun.insertInstant("RSO","Sei Rokan");
modelKebun.insertInstant("TAN","Tandun");
modelKebun.insertInstant("AMO","Aek Molek");
modelKebun.insertInstant("STA","Sei Tapung");
modelKebun.insertInstant("TER","Terantam");
modelKebun.insertInstant("LDA","Lubuk Dalam ");

Kalian bisa melihat kode  DatabaseHelper helper = new DatabaseHelper(this); dipanggil pada sebuah Activity yang akan digunakan instance sebagai argument pada constructor Model

See also  Database Inspector Android

Hapus file Database

Untuk memastikan bahwa database adalah yang terbaru dan dibuat dari awal lagi, maka perintah yang digunakan untuk menghapus file database dengan kode berikut

File file = this.getDatabasePath(Setting.DATABASE);

Untuk menghapus

if(file.exists()){
   this.deleteDatabase(Setting.DATABASE);
}