• Tidak ada hasil yang ditemukan

SQLite adalah produk public domain. Artinya tidak punya lisensi, anda boleh mengambil binary atau source codenya secara free / GRATIS.

N/A
N/A
Protected

Academic year: 2021

Membagikan "SQLite adalah produk public domain. Artinya tidak punya lisensi, anda boleh mengambil binary atau source codenya secara free / GRATIS."

Copied!
30
0
0

Teks penuh

(1)

SQLite

1. Pengenalan SQLite

SQLite itu merupakan sebuah Database yang bersifat

ACID

-compliant dan memiliki ukuran

pustaka kode yang relatif kecil, ditulis dalam

bahasa C

. SQLite merupakan proyek yang

bersifat

public domain

yang dikerjakan oleh

D. Richard Hipp

.

SQLite memiliki fitur relasional database, hampir sama dengan SQL pada desktop hanya saja

SQLite membutuhkan memori yang sedikit.

Beberapa produk yang sudah menggunakan yaitu PHP, Firefox, Chrome, iPhone dan Android

adalah contoh produk yang menggunakan SQlite. di Browser firefox, Sqlite dipakai untuk

menyimpan konfigurasi, bookmark dan history website sedangkan di smartphone android,

SQLite dipakai untuk menyimpan contact.

SQLite adalah produk public domain. Artinya tidak punya lisensi, anda boleh mengambil

binary atau source codenya secara free / GRATIS.

Anda boleh membuat software dengan lisensi suka suka anda. Anda boleh

mengopensourcekan atau mengkomersialkan itu bebas anda lakukan.

Tipe data yang didukung di SQLite :

Numeric ( integer , float , double),

Text ( Char , varchar , text )

DATETIME

BLOB.

SQLite mendukung semua platform. Anda bebas memilih OS, mau pakai Windows, Linux,

Mac OSX bahkan Android atau iPhone pun bisa.

Tool yang cukup populer adalah

SQLite manager

. SQLite manager adalah plugin Firefox,

sedangkan tool berbasis web adalah

SQLiteManager

yang dibuat dengan PHP dan bisa

menggunakan

Navicat

.

Ada beberapa cara memahami atau mempelajari SQLite yaintu dengan beberapa tutorial di

bawah ini:

Dokumentasi SQLite, Dokumentasi resmi SQLite.

Zetcode SQlite tutorial . Tutorial perintah dasar SQLite .

Zetcode PHP SQLite tutorial. Tutorial cara membuat program web menggunakan PHP

dan SQLite.

(2)

Pada kesempatan kali ini saya akan berbagi artikel tentang SQLite di Android. Sebagaimana

bahwa SQLite adalah sistem yang opensource yang berkompatible dengan sistem Android

juga.

SQLite di Android

SQLite tersedia pada setiap perangkat Android. Menggunakan SQLite database di Android tidak memerlukan setup database atau administrasi. Anda menentukan SQL untuk bekerja dengan database dan database dikelola secara otomatis untuk Anda.

Bekerja dengan database bisa lambat. Oleh karena itu dianjurkan untuk melakukan tugas tersebut di latar belakang, misalnya melalui AsyncTask .

Jika aplikasi Anda menciptakan sebuah database database ini disimpan di direktoriDATA/data/APP_NAME/databases/FILENAME . DATA adalah jalan

yangEnvironment.getDataDirectory() mengembalikan, APP_NAME adalah nama aplikasi Anda danFILENAME adalah nama yang Anda berikan database selama

penciptaan.Environment.getDataDirectory() biasanya kembali kartu SD sebagai lokasi.

Penyedia konten dan berbagi data

Sebuah SQLite database pribadi ke aplikasi yang menciptakan itu. Jika Anda ingin berbagi data dengan aplikasi lain Anda dapat menggunakan ContentProvider . Jika data tidak dibagi biasanya lebih mudah untuk bekerja secara langsung dengan database. ContentProviders bukan bagian dari tutorial ini.

2. Arsitektur Android

Paket

Paket android.database berisi semua kelas umum untuk bekerja dengan database.android.database.sqlite berisi kelas SQLite tertentu.

SQLiteOpenHelper

Untuk membuat dan meng-upgrade database dalam aplikasi Android Anda Anda biasanya subclassSQLiteOpenHelper . Di kelas ini, Anda perlu mengganti metode onCreate() untuk membuat database danonUpgrade() untuk meng-upgrade database dalam kasus perubahan dalam skema database. Kedua metode menerima SQLiteDatabase objek yang mewakili database. SQLiteOpenHelper menyediakan

metode getReadableDatabase() dan getWriteableDatabase()untuk mendapatkan akses ke SQLiteDatabase objek yang memungkinkan akses database baik dalam membaca atau menulis modus.

Untuk primary key dari tabel database Anda selalu harus menggunakan identifier _id karena beberapa fungsi Android bergantung pada standar ini.

Sebuah praktek terbaik adalah untuk menciptakan per meja kelas terpisah yang menentukan statis onCreate()dan onUpdate() metode. Metode ini kemudian disebut dalam metode yang sesuai SQLiteOpenHelper .Penerapan cara ini Anda SQLiteOpenHelper tidak akan bisa besar bahkan jika Anda memiliki beberapa tabel.

(3)

SQLiteDatabase

SQLiteDatabase adalah kelas dasar untuk bekerja dengan SQLite database di Android dan menyediakan metode untuk membuka, query, update dan menutup database. Lebih

khusus SQLiteDatabase menyediakaninsert() , update() dan delete() metode. Para execS QL() metode memungkinkan untuk mengeksekusi SQL secara langsung. Objek ContentValues memungkinkan untuk mendefinisikan kunci / nilai untuk insert dan update. Kuncinya adalah kolom dan nilai adalah nilai untuk kolom ini.

Query dapat dibuat melalui metode rawQuery() yang menerima SQL atau query() yang menyediakan sebuah antarmuka untuk menentukan data yang dinamis

atau SQLiteQueryBuilder .

Misalnya untuk menjalankan rawQuery() Anda dapat melakukan hal berikut:

Kursor kursor = getReadableDatabase () rawQuery ("* pilih dari todo mana = _id?", New String [] {id}).;

Metode query() memiliki parameter berikut.

 String dbName - Nama tabel untuk mengkompilasi query terhadap

 int[] columnNames - Sebuah daftar yang kolom untuk kembali. Melewati null akan mengembalikan semua kolom.

 String whereClause - Filter untuk pemilihan data tanpa "MANA" klausa, null akan memilih semua

 selectionArgs Anda mungkin termasuk s di whereClause, yang akan digantikan oleh nilai-nilai dari selectionArgs?.

 String[] groupBy - A filter declaring how to group rows, null will cause the rows to not be grouped.

 String[] having - Filter untuk goups, nol berarti tidak ada filter

 String[] orderBy - row which will be used to order the data, null means no ordering

Jika semua data harus dipilih, Anda dapat melewati null sebagai klausa mana. Klausul mana ditentukan tanpawhere , misalnya _id=19 and summary=? . Jika beberapa nilai yang diperlukan melalui ? Anda melewatkan mereka dalam array valuesForWhereClause untuk query. Secara umum, jika ada sesuatu yang tidak diperlukan Anda dapat melewati null , misalnya untuk kelompok dengan klausa.

(4)

Misalnya untuk menjalankan query() Anda dapat melakukan hal berikut:

kembali database.query (DATABASE_TABLE,

new String [] {KEY_ROWID, KEY_CATEGORY, KEY_SUMMARY, KEY_DESCRIPTION}, null, null, null, null, null);

Kursor

Sebuah permintaan selalu mengembalikan Cursor . Kursor mewakili hasil dari query dan pada dasarnya poin selalu satu baris dari database. Dengan cara ini Android dapat buffer hasil efisien karena tidak harus memuat semua data ke dalam memori.

Untuk mendapatkan jumlah elemen menggunakan metode getCount() . Untuk beralih di antara baris data individu, Anda dapat menggunakan

metode moveToFirst() dan moveToNext() . Melalui metodeisAfterLast() Anda dapat memeriksa apakah masih ada beberapa data.

Kursor dapat langsung digunakan melalui SimpleCursorAdapter di ListViews .

3. Antarmuka baris perintah untuk SQLite

Hal ini dimungkinkan untuk mengakses database SQLite pada emulator atau perangkat berakar melalui baris perintah. Untuk menggunakan ini adb shell untuk menghubungkan ke perangkat dan perintah "sqlite3" untuk menghubungkan ke database yang.

Contoh pembuatan aplikasi program contact pada Android

menggunakan SQLite

Pada contoh penggunaan sqlite ini saya akan membuat sebuah aplikasi android untuk

menyimpan “Contact”, data yang saya simpan adalahNama dan Nomer Telepon. Untuk

langkah pertama saya mempersiapkan sebuah class entity untuk Contact. Berikut ini

classnya..

/*

(5)

* @author Pratama Nur Wijaya *

* Project : SQLiteTutorials * Filename : Contact.java

* Creation Date : Feb 23, 2013 time : 9:17:15 PM *

*/

package com.example.sqlitetutorials;

public class Contact {

private int id;

private String name; private String telp;

public Contact() {

// TODO Auto-generated constructor stub }

public Contact(String name, String telp) {

(6)

super();

this.name = name; this.telp = telp; }

public int getId() {

return id; }

public void setId(int id) {

this.id = id; }

public String getName() {

return name; }

public void setName(String name) {

(7)

}

public String getTelp() {

return telp; }

public void setTelp(String telp) {

this.telp = telp; }

}

class ini hanyalah berisi nama table yang akan ada didatabase kita nanti, beserta method getter dan setter. Selanjut adalah mepersiapkan class untuk menangani proses CRUD(Create, Read, Update, Delete). Disini saya membuat sebuah class yang saya berinama DBAdapter, berikut ini class yang saya maksud.

/*

* (c) 2013

* @author Pratama Nur Wijaya *

(8)

* Filename : ContactDBHelper.java

* Creation Date : Feb 23, 2013 time : 9:18:36 PM * */ package com.example.sqlitetutorials; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log;

public class DBAdapter {

private static final String DB_NAME = "contact_db";

private static final int DB_VER = 1;

public static final String TABLE_NAME = "contact";

public static final String COL_ID = "_id";

(9)

public static final String COL_TELP = "telp";

private static final String TAG =

"ContactDBAdapter";

private DatabaseHelper dbHelper;

private SQLiteDatabase db;

private static final String DB_CREATE = "create table

contact (_id integer primary key, name text not null, telp text not null);";

private final Context context;

private static class DatabaseHelper extends SQLiteOpenHelper {

public DatabaseHelper(Context context) {

// TODO Auto-generated constructor stub super(context, DB_NAME, null, DB_VER); }

@Override

(10)

{

// TODO Auto-generated method stub db.execSQL(DB_CREATE);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

{

// TODO Auto-generated method stub Log.d(TAG, "upgrade DB");

db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db);

}

}

public DBAdapter(Context context) {

this.context = context;

// TODO Auto-generated constructor stub }

(11)

public DBAdapter open() throws SQLException {

dbHelper = new DatabaseHelper(context); db = dbHelper.getWritableDatabase(); return this;

}

public void close() {

dbHelper.close(); }

public void createContact(Contact contact) {

ContentValues val = new ContentValues(); val.put(COL_NAME, contact.getName()); val.put(COL_TELP, contact.getTelp()); db.insert(TABLE_NAME, null, val); }

public boolean deleteContact(int id) {

(12)

return db.delete(TABLE_NAME, COL_ID + "=" + id, null) > 0; }

public Cursor getAllContact() {

return db.query(TABLE_NAME, new String[] {

COL_ID, COL_NAME, COL_TELP }, null, null, null, null, null);

}

public Cursor getSingleContact(int id) {

Cursor cursor = db.query(TABLE_NAME, new String[] {

COL_ID, COL_NAME, COL_TELP }, COL_ID + "=" + id, null, null, null, null);

if (cursor != null)

cursor.moveToFirst();

return cursor; }

(13)

public boolean updateContact(Contact contact) {

ContentValues val = new ContentValues(); val.put(COL_NAME, contact.getName()); val.put(COL_TELP, contact.getTelp());

return db.update(TABLE_NAME, val, COL_ID + "=" + contact.getId(), null) > 0;

}

}

pada class DBAdapter, terdapat method untuk update, insert, sampai delete.. untuk class mainactivitynya penampakannya seperti berikut :

package com.example.sqlitetutorials; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.support.v4.widget.SimpleCursorAdapter; import android.view.Menu;

(14)

import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.EditText; import android.widget.ListView;

public class MainActivity extends Activity implements OnItemClickListener {

public static final String KEY_ID = "_id";

private static final int INSERT_ID = Menu.FIRST;

EditText empty;

private ListView listview;

private DBAdapter db;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); db = new DBAdapter(this);

(15)

db.open();

listview = (ListView) findViewById(R.id.list); listview.setEmptyView(findViewById(R.id.empty));

listview.setOnItemClickListener(this);

loadData(); }

private void loadData() {

// TODO Auto-generated method stub Cursor cur = db.getAllContact();

String[] from = new String[] {

DBAdapter.COL_NAME, DBAdapter.COL_TELP };

int[] to = new int[] {

R.id.txtName, R.id.txtPhoneNumber };

(16)

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.list_adapter, cur, from, to);

listview.setAdapter(adapter); }

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

menu.add(0, INSERT_ID, 0, R.string.menu_add); return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// TODO Auto-generated method stub switch (item.getItemId())

{

case INSERT_ID:

startActivity(new Intent(MainActivity.this, AddContact.class));

(17)

break;

}

return super.onOptionsItemSelected(item); }

@Override

public void onItemClick(AdapterView<?> arg0, View v, int pos, long id)

{

// TODO Auto-generated method stub Bundle bundle = new Bundle(); bundle.putLong(KEY_ID, id);

Intent intent = new Intent(MainActivity.this, EditActivity.class); intent.putExtras(bundle); db.close(); startActivity(intent); } }

(18)

di file mainActivity saya menggunakan SimpleCursorAdapter untuk menampilkan data yang ada kedalam listview yang sudah saya tambahkan di file xml nya. Kemudian mainActivity ini juga memiliki menu option yang akan muncul ketika user mengklik tombol menu yang ada di handset, jika user menekan tombol menu, maka akan muncul menu Insert dan activity berpindah ke AddContact,

untuk file main_activity.xml sebagai berikut :

<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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView> <TextView android:id="@+id/empty" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Empty Data" />

(19)

</RelativeLayout>

untuk class AddContact sebagai berikut : /*

* (c) 2013

* @author Pratama Nur Wijaya *

* Project : SQLiteTutorials * Filename : AddContact.java

* Creation Date : Feb 23, 2013 time : 11:52:56 PM * */ package com.example.sqlitetutorials; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText;

(20)

public class AddContact extends Activity implements OnClickListener {

EditText inputName, inputNumber;

Button btnAdd;

DBAdapter db;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub super.onCreate(savedInstanceState); db = new DBAdapter(this);

db.open();

setContentView(R.layout.add);

inputName = (EditText) findViewById(R.id.inputName); inputNumber = (EditText) findViewById(R.id.inputNumber); btnAdd = (Button) findViewById(R.id.btnAdd);

btnAdd.setOnClickListener(this); }

(21)

public void onClick(View v) {

// TODO Auto-generated method stub switch (v.getId())

{

case R.id.btnAdd:

Contact contact = new Contact();

contact.setName(inputName.getText().toString()); contact.setTelp(inputNumber.getText().toString()); db.createContact(contact); startActivity(new Intent(AddContact.this, MainActivity.class)); db.close(); finish(); break; default: break; } }

(22)

}

dan file xml nya

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/txtName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/str_name" /> <EditText android:id="@+id/inputName" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="@string/hint_name" > <requestFocus /> </EditText>

(23)

<TextView android:id="@+id/txtNumber" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/str_hp" /> <EditText android:id="@+id/inputNumber" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="@string/hint_phone" android:inputType="numberPassword" /> <Button android:id="@+id/btnAdd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/btn_add" /> </LinearLayout>

untuk bagian edit atau delete contact saya membuat sebuah activity yakni EditActivity untuk menangani Edit contact dam delete contact

package com.example.sqlitetutorials;

(24)

import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText;

public class EditActivity extends Activity implements OnClickListener {

DBAdapter db;

EditText editName, editPhone;

Button btnSave, btnDelete;

int id;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit);

(25)

db = new DBAdapter(this); db.open();

Bundle b = getIntent().getExtras();

id = (int) b.getLong(MainActivity.KEY_ID);

editName = (EditText) findViewById(R.id.editName); editPhone = (EditText) findViewById(R.id.editPhone); btnSave = (Button) findViewById(R.id.editBtnSave); btnDelete = (Button) findViewById(R.id.editBtnDelete);

btnSave.setOnClickListener(this); btnDelete.setOnClickListener(this);

tampilData(); }

private void tampilData() {

// TODO Auto-generated method stub

(26)

editName.setText(cursor.getString(cursor.getColumnIndexOrThrow(DBAdapter.CO L_NAME))); editPhone.setText(cursor.getString(cursor.getColumnIndexOrThrow(DBAdapter.C OL_TELP))); } @Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.edit, menu); return true;

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub switch (v.getId())

{

(27)

Contact contact = new Contact(); contact.setId(id); contact.setName(editName.getText().toString()); contact.setTelp(editPhone.getText().toString()); db.updateContact(contact); startActivity(new Intent(EditActivity.this, MainActivity.class)); finish(); break; case R.id.editBtnDelete: db.deleteContact(id); startActivity(new Intent(EditActivity.this, MainActivity.class)); finish(); break; } } }

(28)

file xmlnya.. <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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".EditActivity" > <TextView android:id="@+id/editex" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="@string/str_name" /> <EditText android:id="@+id/editName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editex" android:layout_below="@+id/editex"

(29)

android:layout_marginTop="14dp" android:ems="10" > <requestFocus /> </EditText> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editName" android:layout_below="@+id/editName" android:layout_marginTop="32dp" android:text="@string/str_hp" /> <EditText android:id="@+id/editPhone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginTop="27dp" android:ems="10" android:inputType="phone" /> <Button android:id="@+id/editBtnSave"

(30)

android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editPhone" android:layout_below="@+id/editPhone" android:layout_marginTop="35dp" android:text="Save" /> <Button android:id="@+id/editBtnDelete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/editBtnSave" android:layout_alignBottom="@+id/editBtnSave" android:layout_alignRight="@+id/editPhone" android:text="Delete" /> </RelativeLayout>

Referensi

Dokumen terkait