MobilePertemuan9

Download Report

Transcript MobilePertemuan9

Pemrograman Bergerak
Pengelolaan Database
SQLite
SQLite merupakan database default yang
tersedia pada sistem operasi Android, yang
berarti anda dapat menggunakannya tanpa
perlu instalasi.
Quiz
Database bawaan Android adalah:
a. Oracle
b. MSSql
c. MySql
d. ProgresSQL
e. SQLite
f. Derby
Quiz
Untuk menggunakan SQLite, maka anda perlu
melakukan instalasi aplikasi tersebut terlebih
dahulu (Benar/Salah)
Type Data
SQLite3 mendukung tipe data sebagai berikut:
 TEXT (UTF-8 atau UTF-16 string)
 INTEGER (signed integers)
 REAL (floating point values)
 BLOB (data chunk)
Untuk jelasnya dapat dibaca di
http://www.sqlite.org/datatype3.html
Pembuatan autoincrement field dapat dilakukan
dengan menggunakan keyword integer
primary key autoincrement
Quiz
Sebutkan Type Data yang didukung oleh SQLite?
SQLiteOpenHelper
Untuk pembuatan database anda perlu membuat suatu
Helper Class yang merupakan subclass dari
SQLiteOpenHelper.
Pada Subclass tersebut anda perlu mengimplementasikan
beberapa metode callback berikut:



onCreate(SQLiteDatabase) yang secara otomatis dipanggil
jika database tidak ada.
onUpgrade(SQLiteDatabase, int, int), yang akan otomatis
dipanggil pada saat upgrade database diperlukan.
onOpen(SQLiteDatabase) (optional)
SQLiteOpenHelper
public class MyDBOpenHelper extends SQLiteOpenHelper {
static final String DB_NAME = "MyDb";
static final Integer DB_VERSION = 1;
public MyDBOpenHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE Siswa (" +
"nim TEXT PRIMARY KEY," +
"nama TEXT, nilai char(1))");
}
@Override
public void onUpgrade(SQLiteDatabase db,
int oldVersion, int newVersion) {
Log.w("Upgrade",
"Proses akan drop dan buat ulang tabel.");
db.execSQL("DROP TABLE IF EXISTS Siswa");
onCreate(db);
}
}
Activity Utama
public class DataSiswaSimpleActivity extends
Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void buttonTambahOnClick(View v) {
Intent intent = new Intent();
intent.setClass(this, TambahData.class);
startActivity(intent);
}
}
Quiz
Perintah berikut ini akan mengaktifkan Activity
dengan nama ________
public void buttonTambahOnClick(View v) {
Intent intent = new Intent();
intent.setClass(this, TambahData.class);
startActivity(intent);
}
Membuka Database
public void openDatabase() {
MyDBOpenHelper myOpenHelper = new MyDBOpenHelper(
this.getApplicationContext());
db = myOpenHelper.getWritableDatabase();
}
Untuk membuka suatu objek database secara readonly
dapat menggunakan metode getReadableDatabase(),
dan secara read/write dapat menggunakan metode
getWriteableDatabase(), karena pemakaian
getWriteableDatabase(). Suatu SQLiteException akan
dilempar jika database gagal dibuka.
Quiz
Jelaskan perbedaan antara metode
getReadableDatabase()dengan metode
getWriteableDatabase()
Menutup Database
public void closeDatabase() {
db.close();
}
Untuk menutup database dapat digunakan pemanggilan terhadap metode
close.
Menyisip Data
public void buttonSimpanOnClick(View v) {
TextView nim = (TextView) findViewById(R.id.editNim);
TextView nama = (TextView) findViewById(R.id.editNama);
TextView nilai = (TextView) findViewById(R.id.editNim);
ContentValues initialValues = new ContentValues();
initialValues.put("nim", nim.getText().toString());
initialValues.put("nama", nama.getText().toString());
initialValues.put("nilai", nilai.getText().toString());
db.insert("Siswa", null, initialValues);
tampilToast("Data siswa Nim" + nim.getText().toString()
+ "Telah disimpan!");
}
Untuk melakukan insert data dapat menggunakan metoda insert yang terdapat pada
objek SQLiteDatabase, dengan syntax sebagai berikut:
public long insert (String table, String nullColumnHack, ContentValues values)
table, nama tabel
nullColumnHack, bersifat optional, dan dapat diisi null, digunakan jika anda
bermaksud menyisip satu record kosong, karena SQL tidak memperbolehkan
penyisipan record kosong, jika anda perlu menyisipkan record kosong, maka
parameter ini diisi salah satu nama kolom yang nullable.
values, merupakan data map yang mengandung inisial kolom dan nilai untuk masingmasing kolom
Returns: mengembalikan row ID dari baris yang berhasil disisipkan, atau -1 jika terjadi
kesalahan.
Activity Tambah
Data
public class TambahData extends Activity {
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.tambahdata);
openDatabase();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
closeDatabase();
}
public void openDatabase() {
MyDBOpenHelper myOpenHelper = new MyDBOpenHelper(
this.getApplicationContext());
db = myOpenHelper.getWritableDatabase();
}
public void closeDatabase() {
db.close();
}
public void buttonSimpanOnClick(View v) {
TextView nim = (TextView) findViewById(R.id.editNim);
TextView nama = (TextView) findViewById(R.id.editNama);
TextView nilai = (TextView) findViewById(R.id.editNim);
ContentValues initialValues = new ContentValues();
initialValues.put("nim", nim.getText().toString());
initialValues.put("nama", nama.getText().toString());
initialValues.put("nilai", nilai.getText().toString());
db.insert("Siswa", null, initialValues);
tampilToast("Data siswa Nim" + nim.getText().toString()
+ "Telah disimpan!");
}
private void tampilToast(String pesan) {
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(getApplicationContext(), pesan, duration);
toast.show();
}
}
Quiz
public void buttonSimpanOnClick(View v) {
TextView nim = (TextView) findViewById(R.id.editNim);
TextView nama = (TextView) findViewById(R.id.editNama);
TextView nilai = (TextView) findViewById(R.id.editNim);
ContentValues initialValues = new ContentValues();
initialValues.put("nim", nim.getText().toString());
initialValues.put("nama", nama.getText().toString());
initialValues.put("nilai", nilai.getText().toString());
db.insert("Siswa", null, initialValues);
tampilToast("Data siswa Nim" + nim.getText().toString()
+ "Telah disimpan!");
}
Perhatikan Koding Diatas, dan jawablah pertanyaan berikut
ini:
Data akan disisipkan pada Tabel ?
Kolom-kolom yang disisipkan adalah …..
Letak Database
Setelah aplikasi tersebut diatas dijalankan, maka otomatis akan terbentuk
database MyDb pada folder /data/data/<nama package>/database, yang
dapat diamati dari DDMS
Explorasi Database SQLite3
Perangkat SQLite3
Untuk melakukan eksplorasi terhadap database MyDb kita dapat
menggunakan fasilitas adb shell yang disediakan pada android-sdk, adalah
proses untuk mengaktifkan perangkat SQLite3 adalah sebagai berikut:
1. Aktifkan ke command prompt
2. Ubah direktori ke c:\progra~1\android\android-sdk
3. Ubah direktori ke platform-tools
4. Jalankan perintah “adb shell”, dan secara otomatis akan ditampilkan #
prompt
5. Pada shell ubah directory ke /data/data/com.hendra.testdb/databases
6. Jalankan perintah “sqlite MyDb” untuk mengaktifkan perangkat SQLite3
sekaligus membuka database MyDb, dan secara otomatis akan ditampilkan
sqlite> prompt
7. Pada sqlite prompt ketikan “.schema” akan menampikan schema database
8. Pada sqlite prompt ketikan “.tables” akan menampilkan tabel dalam
database
9. Pada sqlite prompt ketikan “.quit” untuk keluar dari perangkat SQLite3
10. Pada sqlite prompt ketikan “.help” untuk menampikan fasilitas Help
Contoh:
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\PROGRA~1>cd android
C:\PROGRA~1\Android>cd android-sdk
C:\PROGRA~1\Android\android-sdk>cd platform-tools
C:\PROGRA~1\Android\android-sdk\platform-tools>adb shell
# cd /data/data/com.hendra.testdb
# ls
# cd databases
# ls
# sqlite3 MyDb
sqlite3 MyDb
SQLite version 3.6.22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .schema
.schema
CREATE TABLE Siswa (nim PRIMARY KEY,nama TEXT, nilai char(1));
CREATE TABLE android_metadata (locale TEXT);
sqlite> .tables
.tables
Siswa
android_metadata
sqlite> .quit
.quit
#
Contoh Aplikasi
Layout Aplikasi
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nim"></TextView>
<EditText android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editNim">
<requestFocus></requestFocus>
</EditText>
<TextView android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nama"></TextView>
<EditText android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editNama"></EditText>
<TextView android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nilai"></TextView>
<EditText android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editNilai"></EditText>
<Button android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Simpan"
android:onClick="buttonSimpanOnClick"></Button>
</LinearLayout>
Source Code Aplikasi
package com.tkj;
import
import
import
import
android.app.Activity;
android.content.Intent;
android.os.Bundle;
android.view.View;
public class DataSiswaSimpleActivity extends
Activity {
/** Called when the activity is first
created. */
@Override
public void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
import
import
import
import
android.content.Context;
android.database.sqlite.SQLiteDatabase;
android.database.sqlite.SQLiteOpenHelper;
android.util.Log;
public class MyDBOpenHelper extends SQLiteOpenHelper {
static final String DB_NAME = "MyDb";
static final Integer DB_VERSION = 1;
public MyDBOpenHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE Siswa (" +
"nim TEXT PRIMARY KEY," +
"nama TEXT, nilai char(1))");
}
public void buttonTambahOnClick(View v) {
Intent intent = new Intent();
intent.setClass(this,
TambahData.class);
startActivity(intent);
}
}
package com.tkj;
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion) {
Log.w("Upgrade",
"Proses akan drop dan buat ulang tabel.");
db.execSQL("DROP TABLE IF EXISTS Siswa");
onCreate(db);
}
}
package com.hendra;
import android.app.Activity;
public class TambahData extends Activity {
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.tambahdata);
openDatabase();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
closeDatabase();
}
public void openDatabase() {
MyDBOpenHelper myOpenHelper = new MyDBOpenHelper(
this.getApplicationContext());
db = myOpenHelper.getWritableDatabase();
}
public void closeDatabase() {
db.close();
}
public void buttonSimpanOnClick(View v) {
TextView nim = (TextView) findViewById(R.id.editNim);
TextView nama = (TextView) findViewById(R.id.editNama);
TextView nilai = (TextView) findViewById(R.id.editNim);
ContentValues initialValues = new ContentValues();
initialValues.put("nim", nim.getText().toString());
initialValues.put("nama", nama.getText().toString());
initialValues.put("nilai", nilai.getText().toString());
db.insert("Siswa", null, initialValues);
tampilToast("Data siswa Nim" + nim.getText().toString()
+ "Telah disimpan!");
Latihan
Buatlah aplikasi yang dapat membuat Database
MyDb dengan struktur:
nim text primarykey
nama text
nilai char(1)
Buatlah tambahkan Activity untuk Tambah Data
dan lakukan eksplorasi database yang
dihasilkan dengan SQLite3 tools.
Android Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hendra"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".DataSiswaSimpleActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:label="Tambah Data" android:name="TambahData"></activity>
</application>
</manifest>
Sekian & Terima Kasih