Rabu, 24 Oktober 2018

SQLiteOpenHelper









Assalamualaiku Warrahmatullahi Wabarakatu

Pada kesempatan kali ini saya akan menjelaskan tentang SQLiteDatabase.



SQLiteDatabase adalah Kelas pembantu untuk mengelola pembuatan basis data dan manajemen versi.

Anda membuat implementasi subclass onCreate (SQLiteDatabase), onUpgrade (SQLiteDatabase, int, int) dan opsional onOpen (SQLiteDatabase), dan kelas ini menangani pembukaan basis data jika ada, membuatnya jika tidak, dan meningkatkannya seperlunya . Transaksi digunakan untuk memastikan database selalu dalam keadaan yang masuk akal.

Kelas ini memudahkan implementasi ContentProvider untuk menunda membuka dan meningkatkan database hingga penggunaan pertama, untuk menghindari pemblokiran startup aplikasi dengan upgrade database yang berjalan lama.

Untuk contoh, lihat kelas NotePadProvider di aplikasi sampel NotePad, di contoh / direktori SDK.

Dan saya akan memberikan contoh kode SQLiteDatabase

public class  MyDatabaseHelper extends SQLiteOpenHelper {

    //nama database    private static final String NAMA_DATABASE = "db_todo";
    //versi database    private static final int VERSI_DATABASE = 1;

    // construcotor    public MyDatabaseHelper(Context context) {
        super(context, NAMA_DATABASE, null, VERSI_DATABASE);
    }
    Kode ini berfungsi untuk membuat table ketika aplikasi pertama kali diinstall
    @Override    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        //buat table pertama kali ketika aplikasi diinstall        sqLiteDatabase.execSQL(Todo.BUAT_TABEL);


    }
    Kode ini berfungsi untuk, jika ada table sebelummnya maka hapus table yang telah ada
    @Override    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
       
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + Todo.NAMA_TABEL);

        //untuk membuat table lagi
        onCreate(sqLiteDatabase);

    }

    Kode ini berfungsi untuk menyimpan data, untuk menambah data, value data, masukkan data ke dalam contentValue dan
    memasukkan data row lalu menutup database dan keluarkan hasil id dari proses menyimpan data
    public long simpanData(String nama, String deskripsi, String kategori) {
        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(Todo.COLUMN_NAMA, nama);
        contentValues.put(Todo.COLUMN_DESKRIPSI, deskripsi);
        contentValues.put(Todo.COLUMN_KATEGORI, kategori);

        
        long id = sqLiteDatabase.insert(Todo.NAMA_TABEL, null, contentValues);

        sqLiteDatabase.close();

        
        return id;
    }

    Kode ini berfungsi untuk mengambil 1 row data berdasarkan id dan memposisikan cursort tabel
    ke data yang dituju, lalu memposisikan data yg dipilih cursor ke paling atas dan posisikan 
    cursor ke data, lalu data yg ditemukan cursor dimasukkan ke dalam model. lalu hilangkan cursor
    beserta koneksi data dan kembalikkan data

    public Todo getTodo(long id) {
        //minta akses mengambil data        SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();


        Cursor cursor = sqLiteDatabase.query(Todo.NAMA_TABEL,
                new String[]{Todo.COLUMN_ID, Todo.COLUMN_NAMA, Todo.COLUMN_DESKRIPSI,
                        Todo.COLUMN_WAKTU, Todo.COLUMN_KATEGORI},
                Todo.COLUMN_ID + "?=",
                new String[]{String.valueOf(id)}, null, null, null,
                null);

        if (cursor != null)
            cursor.moveToFirst();

        Todo todo = new Todo(
                cursor.getInt(cursor.getColumnIndex(Todo.COLUMN_ID)),
                cursor.getString(cursor.getColumnIndex(Todo.COLUMN_NAMA)),
                cursor.getString(cursor.getColumnIndex(Todo.COLUMN_DESKRIPSI)),
                cursor.getString(cursor.getColumnIndex(Todo.COLUMN_WAKTU)),
                cursor.getString(cursor.getColumnIndex(Todo.COLUMN_KATEGORI))
        );

       
        cursor.close();
        
        return todo;
    }
    Kode ini berfungsi untuk mengambil seluruh data, lalu Query mengambil semua data dan memasukkan
    data ke list, lalu tutup koneksi dan hilangkan cursor
    
    public List<Todo> ambilSemuaData() {
        List<Todo> listTodo = new ArrayList<>();

       
        String query = "SELECT * FROM " + Todo.NAMA_TABEL + " ORDER BY " +
                Todo.COLUMN_WAKTU + " DESC";

        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
        Cursor cursor = sqLiteDatabase.rawQuery(query, null);

        
        if (cursor.moveToFirst()) {
            do {
                Todo todo = new Todo();
                todo.setId(cursor.getInt(cursor.getColumnIndex(Todo.COLUMN_ID)));
                todo.setNama(cursor.getString(cursor.getColumnIndex(Todo.COLUMN_NAMA)));
                todo.setDeskripsi(cursor.getString(cursor.getColumnIndex(Todo.COLUMN_DESKRIPSI)));
                todo.setWaktu(cursor.getString(cursor.getColumnIndex(Todo.COLUMN_WAKTU)));
                todo.setKategori(cursor.getString(cursor.getColumnIndex(Todo.COLUMN_KATEGORI)));

                listTodo.add(todo);
            } while (cursor.moveToNext());
        }

        sqLiteDatabase.close();

        return listTodo;
    }

    Kode ini berfungsi untuk query mengambil seluruh data, lalu buka database dan izin membaca data
    lalu arahkan cursor pada data yang dituju dan tampung jumlah seluruh data di variable dan tutup database, lalu
    hasilkan jumlah database
    public int ambilJumlahData() {
       
        String query = "SELECT * FROM " + Todo.NAMA_TABEL;
        
        SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
        
        Cursor cursor = sqLiteDatabase.rawQuery(query, null);
        
        int jumlah = cursor.getCount();
       
        cursor.close();
        
        return jumlah;

    }
}


0 komentar

Posting Komentar