Sabtu, 01 Februari 2014

Membuat Aplikasi Android dengan Database SQLite Eksternal, File Database Sudah Dipersiapkan Sebelumnya di Assets

Membuat Aplikasi Android dengan Database SQLite Eksternal, File Database Sudah Dipersiapkan Sebelumnya di Assets
Membuat Aplikasi Android dengan Database SQLite Eksternal, File Database Sudah Dipersiapkan Sebelumnya di Assets dibutuhkan ketika membuat aplikasi Android yang menggunakan database berukuran besar dan harus diinput sebelum aplikasi dijalankan, misalnya Database Kamus, Database Soal dan sebagainya.

Caranya buat dahulu file database SQLite menggunakan aplikasi eksternal seperti AddOns Firefox SQLite Manager atau SQLite Browser. Cara pembuatannya akan penulis bahas di artikel lain. Sedangkan di artikel ini khusus membahas bagaimana cara menmasukkan dan menggunakan File Database SQLite sebut ke dalam Project Aplikasi Android


Pertama buat dahulu Project Android Baru di Eclipse.

Setelah selesai membuat File Database, misal penulis menggunakan file dengan nama peta.db, maka masukkan ke Project Android di Folder Assets, langsung Copy file tersebut di Windows Explorer dan Paste di Eclipse bagian Project Explorer di Project Bagian Direktori Assets.

Kemudian buatlah class baru dengan Cara Klik File-New-Class, beri nama SQLHelper, sehingga akan dibuat file SQLHelper.java dengan isi sebagai berikut :

package com.amijaya.import_database_sqlite_copy_from_assets; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import android.widget.Toast; //http://cariprogram.blogspot.com //nuramijaya@gmail.com public class SQLHelper extends SQLiteOpenHelper{ private static final String DATABASE_NAME = "peta.db"; private static final int DATABASE_VERSION = 1; private static String DB_PATH = "/data/data/com.amijaya.import_database_sqlite_copy_from_assets/databases/"; // Table name public static final String TABLE = "data"; private Context myContext; public SQLHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub myContext=context; } public void createDataBase() throws IOException{ if(DataBaseisExist()){ //do nothing - database already exist Toast.makeText(myContext, "Database Sudah Ada", Toast.LENGTH_LONG).show(); } 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(); Toast.makeText(myContext, "Database Berhasil Diimport Dari Assets", Toast.LENGTH_LONG).show(); } catch (IOException e) { throw new Error("Error copying database"); } } } private boolean DataBaseisExist(){ SQLiteDatabase checkDB = null; try{ String myPath = DB_PATH + DATABASE_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); }catch(SQLiteException e){ //database does't exist yet. } if(checkDB != null){ checkDB.close(); } if(checkDB != null )return true ;else return false; } private void copyDataBase() throws IOException{ //Open your local db as the input stream InputStream myInput = myContext.getAssets().open(DATABASE_NAME); // Path to the just created empty db String outFileName = DB_PATH + DATABASE_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(); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
Yang harus dicatat, pada kode program di atas sesuaikan path dengan nama project anda, misalnya menjadi :
/data/data/com.nama_anda.nama_project/databases/

Kemudian tambahkan kode program berikut ini ke dalam file MainActivity.java :

package com.amijaya.import_database_sqlite_copy_from_assets; import android.os.Bundle; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.view.Menu; import android.widget.Toast; public class MainActivity extends Activity { protected Cursor cursor; SQLHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper = new SQLHelper(this); try { dbHelper.createDataBase(); } catch (Exception ioe) { Toast.makeText(getApplicationContext(), "Gagal", Toast.LENGTH_LONG).show(); } read_data(); } public void read_data() { SQLiteDatabase db = dbHelper.getReadableDatabase(); cursor = db.rawQuery("SELECT * FROM kota",null); cursor.moveToFirst(); for (int cc=0; cc < cursor.getCount(); cc++) { cursor.moveToPosition(cc); Toast.makeText(getApplicationContext(), cursor.getString(1).toString(), Toast.LENGTH_LONG).show(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
Untuk desain tampilan tidak perlu dirubah, misalnya seperti ini activity_main.xml :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

</RelativeLayout>

Konfigurasi di AndroidManifest.xml juga tidak perlu dirubah, misalnya seperti ini :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.amijaya.import_database_sqlite_copy_from_assets"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.amijaya.import_database_sqlite_copy_from_assets.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Hasilnya ketika dijalankan pertama kali maka Aplikasi Android akan mengkopi file SQLite yang ada di Assets ke dalam direktori internal Aplikasi dan mereplace database yang ada :

Membuat Aplikasi Android dengan Database SQLite Eksternal, File Database Sudah Dipersiapkan Sebelumnya di Assets

Sedangkan ketika dijalankan untuk kedua kalinya maka tidak akan mengkopi lagi database tersebut, tetapi menggunakan yang sudah ada di direktori internal Aplikasi Android :

Membuat Aplikasi Android dengan Database SQLite Eksternal, File Database Sudah Dipersiapkan Sebelumnya di Assets


File project dapat anda download disini. Jika bingung cara download, silakan lihat caranya disini.

Semoga bermanfaat ^_^






3 komentar:

  1. maaf gan saya coba kok error mohon bantuannya dong

    BalasHapus
  2. mastah share aplikasi meggunakan pencarian dan listview donk makasih
    :)

    BalasHapus
  3. mau tanya gan, emang tidakharus belajar bahasa pemrograman?.....menurut saya perlu juga bahasa pemrograman http://poliskom.blogspot.com/

    BalasHapus