syifa nur fitriana 13040220 sqlite

33
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.

Upload: syifa-nur-fitriana

Post on 14-Jul-2016

23 views

Category:

Documents


3 download

DESCRIPTION

SQL

TRANSCRIPT

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.

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 AndroidSQLite 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 dataSebuah 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 AndroidPaketPaket android.database berisi semua kelas umum untuk bekerja dengan database.android.database.sqlite berisi kelas SQLite tertentu.

SQLiteOpenHelperUntuk 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.

SQLiteDatabaseSQLiteDatabase 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 execSQL() 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.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);

KursorSebuah 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 SQLiteHal 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..

/*

* (c) 2013

* @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)

{

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)

{

this.name = name;

}

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

*

* Project : SQLiteTutorials

* 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";

public static final String COL_NAME = "name";

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

public void onCreate(SQLiteDatabase db)

{

// 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

}

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)

{

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;

}

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;

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);

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

};

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));

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);

}

}

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" />

</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;

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);

}

@Override

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;

}

}

}

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>

<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;

import android.os.Bundle;

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);

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

Cursor cursor = db.getSingleContact(id);

editName.setText(cursor.getString(cursor.getColumnIndexOrThrow(DBAdapter.COL_NAME)));

editPhone.setText(cursor.getString(cursor.getColumnIndexOrThrow(DBAdapter.COL_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())

{

case R.id.editBtnSave:

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;

}

}

}

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"

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"

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>