Pada tutorial kali ini akan membahas bagaimana menyalin database Sqlite ke aplikasi android. Jadi, kita bisa menggunakan database yang sudah kita buat sebelumnya baru selanjutnya disalin ke aplikasi.
Di tutorial ini, database yang sudah berhasil dicopy, datanya akan ditampilkan pada ListView.
Well, langsung saja menuju ke langkah-langkahnya.
1. Menyiapkan file Sqlite Database.
Untuk mempermudah pembuatan database dapat digunakan program SQLite Database Browser atau SQLite Expert Personal.
Buat database dengan nama sesuai yang diinginkan. Pada tutorial ini saya membuat database yaitu "dbsiswa.db" (tanpa tanda petik).
Kemudian buat tabel dengan nama “android_metadata” (tanpa tanda petik) dan isikan dengan ‘en_US’ (tanpa tanda petik).
Selanjutnya buat tabel sesuai dengan yang dibutuhkan. Disini saya membuat tabel dengan nama "tbsiswa" (tanpa tanda petik) dengan field-field "_id, nama, alamat" (tanpa tanda petik) . Perlu diperhatikan ganti field id di tabel yang kalian buat dengan "_id" (tanpa tanda petik).
2. Buatlah sebuah project. Disini saya membuat project dengan nama "com.aina.sqliteproject" (tanpa tanda petik) dan dengan activity "MainActivity" (tanpa tanda petik). (Selanjutnya untuk script sesuaikan dengan project yang kalian buat).
4. Atur layout.xml seperti berikut ini:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
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"
android:orientation="vertical"
>
<TextView
android:id="@+id/judul"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp"
android:text="@string/datasiswa"
android:textStyle="bold"
/>
<ListView
android:id="@+id/lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/judul" >
</ListView>
</RelativeLayout>
5. Kemudian buatlah sebuah file xml dengan nama "row.xml" (tanpa tanda petik). Dan atur seperti berikut ini:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<TextView
android:id="@+id/nama"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="@string/nama"
/>
<TextView
android:id="@+id/alamat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/alamat"
/>
</LinearLayout>
6. Selanjutnya buat sebuah class untuk menangani database. Beri nama "DatabaseHelper" (tanpa tanda petik). Tuliskan script seperti berikut ini:
package com.aina.sqliteproject;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.annotation.SuppressLint;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
@SuppressLint("SdCardPath")
public class DatabaseHelper extends SQLiteOpenHelper{
//The Android's default system path of your application database.
String DB_PATH =null;
private static String DB_NAME = "dbsiswa.db";
private SQLiteDatabase myDataBase;
private final Context myContext;
/**
* Constructor
* Takes and keeps a reference of the passed context in order to access to the application assets and resources.
* @param context
*/
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, 1);
this.myContext = context;
DB_PATH="/data/data/"+context.getPackageName()+"/"+"databases/";
}
/**
* Creates a empty database on the system and rewrites it with your own database.
* */
public void createDataBase() throws IOException{
boolean dbExist = checkDataBase();
if(dbExist){
//do nothing - database already exist
}else{
//By calling this method and empty database will be created into the default system path
//of your application so we are gonna be able to overwrite that database with our database.
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
/**
* Check if the database already exist to avoid re-copying the file each time you open the application.
* @return true if it exists, false if it doesn't
*/
private boolean checkDataBase(){
File dbFile = new File(DB_PATH + DB_NAME);
return dbFile.exists();
}
/**
* Copies your database from your local assets-folder to the just created empty database in the
* system folder, from where it can be accessed and handled.
* This is done by transfering bytestream.
* */
private void copyDataBase() throws IOException{
//Open your local db as the input stream
InputStream myInput = myContext.getAssets().open(DB_NAME);
// Path to the just created empty db
String outFileName = DB_PATH + DB_NAME;
//Open the empty db as the output stream
OutputStream myOutput = new FileOutputStream(outFileName);
//transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
//Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
}
public void openDataBase() throws SQLException{
//Open the database
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}
@Override
public synchronized void close() {
if(myDataBase != null)
myDataBase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
7. Untuk "MainActivity" , tuliskan script seperti berikut ini:
import java.io.IOException;8. Jangan lupa pada "strings.xml" tambahkan script berikut ini:
import android.app.Activity;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
DatabaseHelper myDbHelper;
protected Cursor cursor;
protected ListAdapter adapter;
protected ListView listSiswa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
listSiswa = (ListView) findViewById(R.id.lv);
myDbHelper = new DatabaseHelper(this);
try {
myDbHelper.createDataBase();
} catch (IOException ioe) {
throw new Error("Unable to create database");
}
/* try {
myDbHelper.openDataBase();
}catch(SQLException sqle){
throw sqle;
}
*/
view ();
}
private void view (){
SQLiteDatabase db = myDbHelper.getReadableDatabase();
//db.getReadableDatabase();
try{
cursor = db.rawQuery("SELECT * FROM tbsiswa", null);
adapter= new SimpleCursorAdapter(this,R.layout.row, cursor,
new String [] {"nama","alamat"},
new int [] {R.id.nama,R.id.alamat});
listSiswa.setAdapter(adapter);
}catch(SQLException sqle){
throw sqle;
}
}
}
<string name="datasiswa">DATA SISWA</string>
<string name="nama">Nama</string>
<string name="alamat">Alamat</string>
9. Jalankan aplikasi apabila berhasil akan tampil seperti berikut ini:
(Tentunya data yang akan tampil adalah sesuai dengan yang sudah kalian isikan di field-field yang sudah kalian buat di tabel kalian).
Oiya, untuk mengecek apakah database yang sudah dibuat beneran sudah tersalin di aplikasi, Kalian bisa masuk ke DDMS -> File Explorer -> data -> data -> cari nama project kalian -> buka file databases dan kalian akan menemukan file database yang ada di folder asset.
Fin.
Happy Coding...
Alhamdulillah.... :)
Jadi malu n minder karena kurang belajar nih..
ReplyDelete^_^
jangan gitu ah...
Deleteaku juga baru belajar...
masih sangat kebingungan....
project nya gak di share nih?
ReplyDeletekalo mau masukkin gambar di listviewnya gimana iya ?
ReplyDelete