Data management
MEMBUAT APLIKASI DESKTOP DENGAN DATABASE ORACLE UNIKOM (2010) Jenis aplikasi
Ada 2 jenis aplikasi yang biasa dibuat, yaitu
Aplikasi database berbasis desktop
Dibangun dengan Delphi, Java, C++, Visual Basic, dll
Aplikasi database berbasis web Dibangun dengan PHP, JSP, ASP, dll Aplikasi Berbasis Desktop
Aplikasi contoh akan dibangun menggunakan Delphi
Buka Delphi
UNIKOM (2010) Aplikasi Berbasis Desktop
Tempatkan komponen AdoConnection (ada di component palette ADO) pada Form. Aplikasi Berbasis Desktop
Klik AdoConnection, pilih properti ConnectionString dan klik tombol “…”. Aplikasi Berbasis Desktop
Klik tombol Build Aplikasi Berbasis Desktop
Pilih “Microsoft OLE DB Provider for Oracle”. Aplikasi Berbasis Desktop
Klik tombol “Next>>” Aplikasi Berbasis Desktop Atur konfigurasi seperti pada gambar di bawah ini.
IP Server:Port Listener/NamaDatabaseServer User Name dan Password Aplikasi Berbasis Desktop
Klik tombol “Test connection”
Jika berhasil akan menampilkan layar seperti pada gambar di bawah ini.
Jika tidak berhasil, atur kembali konfigurasinya. Jika telah selesai klik OK sampai kembali ke form.
Aplikasi Berbasis Desktop
Atur property Connected dari ADOConnection menjadi TRUE. Jika menanyakan username dan password silahkan diisi.
UNIKOM (2010) Menampilkan Data
Tempatkan sebuah ADOQuery (ada di component palette ADO) pada form
Klik ADOQuery1 untuk mengatur propertinya
Ganti property Name menjadi QTabungan
Isilah property Connection dengan ADOConnection1 Menampilkan Data
Isilah properti SQL dengan
“SELECT * FROM TblTabungan”, kemudian klik OK Menampilkan Data
Aturlah property Active dari QTabungan menjadi TRUE. Menampilkan Data
Tempatkan sebuah DataSource (ada di component palette Data Access)
Atur property Name menjadi DSTabungan
Atur property Dataset. Isi dengan QTabungan, Menampilkan Data
Tempatkan sebuah DBGrid (ada di component palette
Data Controls) Atur property DataSource dengan DSTabungan Menampilkan Data
Lakukan hal yang sama untuk menampilkan tabel TblTransaksi. Atur properti sebagai berikut :
Komponen AdoQuery
CONNECTION : ADOConnection1
NAME : QTransaksi
SQL : SELECT * FROM TblTransaksi
Active : TRUE
Komponen DataSource
NAME : DSTransaksi
DATASET : QTransaksi Menampilkan Data
Menampilkan Data
Membuat Tombol Refresh Data Tabungan
Tempatkan sebuah Tombol di atas dbgrid Tabungan
procedure TForm1.Button2Click(Sender: TObject); Ganti Caption : Refresh var begin LastPos:string; QTabungan.Close; LastPos:=QTabungan.Bookmark; QTabungan.DisableControls; QTabungan.EnableControls; QTabungan.Bookmark:=LastPos; QTabungan.Open; end; Menampilkan Data
Membuat Tombol Refresh Data Transaksi
Tempatkan sebuah Tombol di atas dbgrid Transaksi
procedure TForm1.Button5Click(Sender: TObject); Ganti Caption : Refresh var begin LastPos:string; QTransaksi.Close; LastPos:=QTransaksi.Bookmark; QTransaksi.DisableControls; QTransaksi.EnableControls; QTransaksi.Bookmark:=LastPos; QTransaksi.Open; end;
UNIKOM (2010) Memanggil Stored Procedure
Tempatkan sebuah ADOStoredProc
Isi property CONNECTION : ADOConnection1
Ganti property NAME : TambahTabungan
Isi property PROCEDURENAME : TambahTabungan sesuaikan dengan nama procedure yang telah dibuat di oracle. Memanggil Stored Procedure
Untuk melihat parameter yang dibutuhkan, klik property Parameters.
a Memanggil Stored Procedure
Buatlah tempat untuk pengisian data tabungan baru, misalnya :
Tempatkan sebuah GroupBox, ganti Caption : Tambah Tabungan
Tempatkan 3 Label dan 3 TextBox dan 1 Button
TextBox1 diberi nama ENama
TextBox2 diberi nama EKota
TextBox3 diberi nama ESaldo
Untuk label sesuaikan captionnya
Untuk Button, isi caption dengan “Save”. Memanggil Stored Procedure
Isilah event OnClick pada Button1 dengan begin procedure TForm1.Button1Click(Sender: TObject); With TambahTabungan.Parameters do begin ParamByName('pKota').Value:=EKota.Text; ParamByName('pNama').Value:=ENama.Text; TambahTabungan.ExecProc; end;
ParamByName('pSaldo').Value:=ESaldo.Text;
end; ShowMessage('Penambahan Selesai');Memanggil Stored Procedure
Ulangi langkah-langkah memanggil stored procedure untuk procedure Transaksi_Cash dan Transaksi_Transfer Memanggil Stored Procedure
Isilah event OnClick pada Button Transaksi Cash begin procedure TForm1.Button3Click(Sender: TObject); With TransaksiCash.Parameters do begin ParamByName('pBesar').Value:=ECashBesar.Text; ParamByName('pNoRek').Value:=ECashNoRek.Text; ShowMessage('Transaksi Cash Selesai'); TransaksiCash.ExecProc; end; end;
Memanggil Stored Procedure
Isilah event OnClick pada Button Transaksi Transfer begin procedure TForm1.Button4Click(Sender: TObject); With TransaksiTransfer.Parameters do begin ParamByName('pNoRek2').Value:=ETransferNoRek2.Text; ParamByName('pNoRek1').Value:=ETransferNoRek1.Text; TransaksiTransfer.ExecProc; end; ParamByName('pBesar').Value:=ETransferBesar.Text; end; ShowMessage('Transaksi Transfer Selesai');
MEMBUAT APLIKASI WEB DENGAN DATABASE ORACLE UNIKOM (2010) Aplikasi berbasis web
Dalam perkuliahan ini akan dicontohkan pembuatan aplikasi berbasis web menggunakan PHP
Syarat :
Web Server : Apache, IIS
PHP + Extension untuk Oracle Client (php_oci8.dll) Aplikasi berbasis web
Konfigurasi PHP
Edit file php.ini. Biasanya file ini berada pada folder PHP.
Cari “extension=php_oci8.dll”
Hilangkan tanda titik koma (;) pada awal barisnya. Simpan konfigurasi PHP-nya. Restart web server. Aplikasi berbasis web (ora1.php)
Buat file php untuk mengakses database. Simpan dalam folder webnya (biasanya dalam folder htdocs atau www).
<?php $c = oci_connect('username', 'password', 'localhost:1521/dbora.serverora.com'); $s = oci_parse($c, 'select * from TblTabungan'); oci_execute($s); while ($res = oci_fetch_array($s, OCI_ASSOC)) {
echo $res['NOREK'] .' - '.$res['NAMA']. "<br>";
} oci_close($c); ?>Aplikasi berbasis web (ora1.php)
Cara memanggilnya adalah dengan alamat http://localhost/ora1.php
Aplikasi berbasis web (ora2.php) <?php $c = oci_connect('username', 'password', 'localhost:1521/dbora.serverora.com'); $s = oci_parse($c, 'select * from TblTabungan'); oci_execute($s); while ($res = oci_fetch_row($s)) { echo $res[0] .' - '.$res[1]. "<br>"; } oci_close($c); ?>
Aplikasi berbasis web (ora1.php)
Cara memanggilnya adalah dengan alamat http://localhost/ora2.php
Aplikasi berbasis web (ora3.php) <?php $c = oci_connect('db97025', 'db97025', 'localhost:1521/dbora.serverora.com'); $s = oci_parse($c,"BEGIN TambahTabungan(:nama,:kota,:saldo); END;"); $nama='Test Nama'; // boleh dari form $kota='Test Kota'; // boleh dari form $saldo=25555; // boleh diambil dari form oci_bind_by_name($s,':nama',$nama); oci_bind_by_name($s,':kota',$kota); oci_bind_by_name($s,':saldo',$saldo); $res=oci_execute($s); if($res) echo "Tabungan berhasil disimpan<br>"; else echo "Tabungan gagal disimpan<br>"; oci_close($c); ?>
DATABASE
TRANSACTION
UNIKOM (2010) Definisi Transaction
Sebuah unit logik dari suatu pekerjaan yang terdiri dari 1 atau banyak statement SQL
Merupakan sebuah unit yang atomic, sehingga hanya ada 2 kemungkinan yang terjadi yaitu :
Data ter-commit (semua perubahan data tersimpan secara permanen )
Data dibatalkan (semua perubahan data dibatalkan) Contoh Kasus
Transaksi transfer antar rekening. Ada 3 SQL yang harus dieksekusi yaitu :
Menyimpan data transaksi ke tabel transaksi (INSERT)
Melakukan pengurangan saldo ke rekening pengirim
(UPDATE)
Melakukan penambahan saldo ke rekening penerima
(UPDATE)
Semua SQL harus tereksekusi semua atau dibatalkan semua (atomic). Statement dalam Transaksi
COMMIT : Melakukan penyimpanan perubahan data.
ROLLBACK : Melakukan pembatalan perubahan data.
SAVEPOINT : Memberi tanda suatu posisi perubahan data.
ROLLBACK TO savepoint : Melakukan pembatalan perubahan data dengan kembali ke kondisi savepoint tertentu. Awal Transaksi
Suatu transaksi database diawali dengan adanya pemanggilan statement Data Manipulation Language (DML) seperti
INSERT
DELETE
UPDATE Akhir Transaksi
Transaksi berakhir ketika terjadi salah satu hal berikut :
Pemanggilan statement COMMIT
Pemanggilan statement ROLLBACK
Pemanggilan statement Data Definition Language (DDL)
seperti CREATE, ALTER, DROP. Hal ini akan mengakibatkan COMMIT. Keluar dari SQL*PLUS secara normal. Hal ini akan mengakibatkan COMMIT
Keluar dari SQL*PLUS secara abnormal atau kegagalan sistem (crash, restart). Hal ini akan mengakibatkan ROLLBACK. Kondisi Data Sebelum COMMIT/ROLLBACK
Perubahan data dapat dikembalikan (restore) ke kondisi sebelum DML pertama dieksekusi (commit terakhir).
User yang login akan dapat melihat data hasil perubahan, tetapi user lain tidak.
Jika user melakukan DML terhadap baris data, maka data tersebut akan di-lock. User lain tidak bisa mengupdate data tersebut. Kondisi data setelah COMMIT
Semua perubahan data tersimpan secara permanen.
Semua SAVEPOINT dihapus
Semua lock dilepas. Sehingga user lain dapat mengupdate data tersebut. Kondisi data setelah ROLLBACK
Semua perubahan data dibatalkan. Data kembali ke kondisi sebelum awal transaksi.
Semua SAVEPOINT akan dihapus
Semua lock akan dilepas Demo Transaksi
Login ke oracle
Buat sebuah tabel. Misalnya tabel Rekening
CREATE TABLE rekening( NoRek INTEGER PRIMARY KEY, Nama VARCHAR(10), Saldo NUMBER )
Demo Transaksi
Beri beberapa contoh data
INSERT INTO rekening VALUES(1,'Ade',1000);
INSERT INTO rekening VALUES(2,'Badra',2000);
INSERT INTO rekening VALUES(3,'Cecep',3000); COMMIT; SELECT * FROM rekening;
Demo Transaksi
Buka 2 koneksi ke database dengan cara membuka
2 SQL*PLUS Demo Transaksi Eksekusi SQL pada kedua SQL*PLUS.
SELECT * FROM rekening
Demo Transaksi
Kedua layar akan menampilkan data yang sama (hasil commit terakhir).
Demo Transaksi (1)
Mendemonstrasikan transaksi database dimana suatu perubahan data yang dilakukan oleh seorang user tidak dapat diakses oleh user lain sebelum melakukan COMMIT. Demo Transaksi (1)
Lakukan penambahan data baru pada SQLPlus 1
INSERT INTO rekening
VALUES(4,'Dede',4000); Demo Transaksi (1)
Data telah ditambahkan pada koneksi pertama
Demo Transaksi (1) Eksekusi SQL pada kedua SQL*PLUS.
SELECT * FROM rekening
Demo Transaksi (1)
Data pada koneksi 1 ada 4 baris, sedangkan data pada koneksi 2 hanya ada 3. Ini menunjukkan perubahan data di koneksi pertama tidak bisa diakses/dilihat oleh koneksi 2. Hal ini dikarenakan perubahan data belum di-COMMIT.
Demo Transaksi (1) Lakukan COMMIT di koneksi pertama.
COMMIT
Demo Transaksi (1)
Data pada koneksi 1 ada 4 baris, sedangkan data pada koneksi 2 hanya ada 3. Ini menunjukkan perubahan data di koneksi pertama tidak bisa diakses/dilihat oleh koneksi 2. Hal ini dikarenakan perubahan data belum di-COMMIT.
Demo Transaksi (1) Eksekusi SQL pada kedua SQL*PLUS.
SELECT * FROM rekening
Demo Transaksi (1)
Setelah COMMIT pada koneksi 1, maka semua perubahan yang telah dilakukan jadi dapat dilihat oleh user lain. Semua koneksi menampilkan baris sebanyak 4.
Demo Transaksi (2)
Mendemonstrasikan transaksi database dimana suatu perubahan data yang dilakukan oleh seorang user akan mengunci (lock) baris-baris yang berubah sehingga user lain tidak bisa memanipulasi baris-baris tersebut. Demo Transaksi (2) Lakukan update pada koneksi 1.
UPDATE rekening SET saldo=5555 WHERE norek=1;
Demo Transaksi (2) Data rekening dengan norek 1 telah diupdate.
Demo Transaksi (2) Eksekusi SQL berikut di kedua koneksi.
SELECT * FROM rekening WHERE norek=1;
Demo Transaksi (2)
Koneksi pertama dapat melihat perubahan, tetapi user kedua tidak melihat perubahan tersebut.
Demo Transaksi (2)
Eksekusi SQL berikut di kedua koneksi kedua yang akan mengupdate data pada baris yang dikunci.
UPDATE rekening SET saldo=saldo-555 WHERE norek=1;
Demo Transaksi (2) User ke-dua akan menunggu sampai baris yang dikunci dilepas oleh user pertama dengan COMMIT atau ROLLBACK.
Demo Transaksi (2) Lakukan COMMIT di koneksi pertama.
COMMIT;
Demo Transaksi (2) Ketika koneksi pertama melakukan COMMIT, maka lock pada baris norek 1 dilepas, sehingga akan membuat koneksi 2 melakukan update.
Demo Transaksi (2) Eksekusi SQL berikut di kedua koneksi.
SELECT * FROM rekening WHERE norek=1;
Demo Transaksi (2) Hasil perubahan user 2 dapat dilihat di koneksi 2, tetapi belum terlihat di user 1. Ini dikarenakan user 2 belum melakukan COMMIT.
Demo Transaksi (2) Lakukan COMMIT di koneksi kedua.
COMMIT;
Demo Transaksi (2) Ketika koneksi pertama melakukan COMMIT, maka lock pada baris norek 1 dilepas, sehingga akan membuat koneksi 2 melakukan update.
Demo Transaksi (2) Eksekusi SQL berikut di kedua koneksi.
SELECT * FROM rekening WHERE norek=1;
Demo Transaksi (2)
Semua perubahan data telah COMMIT. Semua user dapat melihat data yang sama.
Demo Transaksi (3)
Mendemonstrasikan transaksi database menggunakan SAVEPOINT Demo Transaksi (2)
Eksekusi SQL berikut pada koneksi 1
INSERT INTO rekening
VALUES(6,'Ferdi',6000); SAVEPOINT SP1; DELETE FROM rekening WHERE NoRek<5; SAVEPOINT SP2; DELETE FROM rekening;
1
2
3
nomor rekening 6 Titik aman SP1. Setelah data ditambah 1 baris Hapus data yang nomor rekening < 5 Titik aman SP2. Setelah penghapusan data yang nomor rekening < 5 Hapus semua data rekening. Demo Transaksi (2)
Eksekusi SQL berikut pada koneksi 1
SELECT * FROM rekening
Demo Transaksi (2)
Eksekusi SQL berikut pada koneksi 1
ROLLBACK TO SAVEPOINT SP2; SELECT * FROM rekening;
Demo Transaksi (2)
Eksekusi SQL berikut pada koneksi 1
ROLLBACK TO SAVEPOINT SP1; SELECT * FROM rekening;
Demo Transaksi (2)
Eksekusi SQL berikut pada koneksi 1
ROLLBACK; SELECT * FROM rekening;