[ ARSITEKTUR APLIKASI DATABASE DAN JDBC API ]
Pertemuan XV [ ARSITEKTUR APLIKASI DATABASE DAN JDBC API ]
Arsitektur Aplikasi Database
Aplikasi – aplikasi database terdiri dari beberapa fungsi, seperti : Database Management System (DBMS).
Application Logic (business rules). Presentation Logic (Interface).
Pada arsitektur client server fungsi – fungsi tersebut dapat diletakkan antara client dan server dalam beberapa cara. Berikut ini merupakan 2 arsitektur client – server yang mungkin untuk sesuatu aplikasi database :
Arsitektur Two-Tier.
Pada Arsitektur two-tier seperti terlihat pada gambar di bawah ini, Application Logic data database driver terletak di sisi client sedangkan DBMS terletak di sisi server. Aplikasi seperti ini dapat diimplementasikan dengan menggunakan Applet, dimana business rules terdapat dalam kode applet sama seperti database driver (yang berisi kode untuk berinteraksi dengan DBMS pada sisi server).
Tier 1
Tier 2
Driver dan Application Logic
Database Server
Gambar : Arsitektur Two-Tier
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Arsitektur di atas dikenal dengan fat-client architecture, dimana kode dan pemrosesan banyak dilakukan disisi client. Database driver dapat diinstalasi terlebih dahulu atau di download melalui applet.
Arsitektur Three-Tier.
Pada arsitektur three-tier seperti terlihat pada gambar di bawah ini hanya presentation logic atau interface yang terletak disisi client. Aplication logic atau business rules terletak disisi server sedangkan DBMS dapat diletakkan disisi server atau di komputer ketiga.
Driver dan Application
Driver dan Application
Logic
Logic
Database Server
Gambar : Arsitektur Three-Tier
Arsitektur di atas sering dikenal sebagai thin client, dimana kode dan pemrosesan disisi client lebih sedikit dibandingkan disisi server. Contoh penggunaan arsitektur thin-client HTML, sedangkan business logic pada servlet yang menghubungkan ke database system pada server.
BAHASA PEMROGRAMAN 1
JILID PERTAMA
SQL
SQL (dibaca ‖ess-que-el‖) merupakan singkatan dari Structure Query Language. SQL digunakan untuk berkomunikasi dengan suatu database. Berdasarkan ANSI ( American National Standards Institute), SQL merupakan bahasa standar untuk relational database management system. Pernyataan – pernyataan SQL digunakan untuk melakukan fungsi – fungsi seperti update data pada database, atau pengambilan data dari database. Beberapa Relational DBMS yang menggunakan SQL, antara lain : Oracle, Sybase, Microsoft SQL Server, Access, Ingre, MySQL, Postgre dan masih banyak lagi. Meskipun hampir semua DBMS menggunakan SQL, banyak DBMS yang memiliki tambahan kemampuan dalam SQL-nya dan biasanya digunakan khusus untuk DBMS tersebut.
SQL memiliki beberapa versi antara lain : SQL 1 atau dikenal dengan SQL-86, SQL 2 atau sering dikenal dengan SQL-92, dan SQL 3 atau yang dikenal dengan SQL-99.
Kategori Pernyataan SQL
Pernyataan – pernyataan SQL dapat dibagi mejadi 2 kategori, yaitu pernyataan – pernyataan Data Manipulation Language (DML) dan Data Definition Language (DDL). Pernyataan – pernyataan DML berkaitan dengan data, baik pengambilan atau pemodifikasian data supaya tetap up-to-date. Sedangkan pernyataan – pernyataan DDL berkaitan dengan pembuatan atau pengubahan tabel dan objek – objek database lainnya seperti view dan index.
Berikut ini merupakan pernyataan – pernyataan DML, antara lain : Select. Digunakan untuk query dan menampilkan data dari sebuah database. Pernyataan SELECT menspesifikasikan kolom
mana yang termasuk dalam result set (hasi query). Pernyataan SELECT ini merupakan pernyataan yang paling sering digunakan dalam aplikasi –aplikasi database. Insert.
Digunakan untuk mengisi tabel yang baru dibuat atau menambahkan baris/record baru pada tabel yang sudah dibuat. Update. Digunakan untuk mengubah nilai dari suatu kolom atau sekumpulan baris dari sebuah tabel. Delete. Digunakan untuk menghapus sebuah baris tertentu atau sekumpulan baris dari sebuah tabel.
Berikut ini merupakan pernyataan – pernyataan DDL, antara lain :
BAHASA PEMROGRAMAN 1
JILID PERTAMA
CREATE TABLE. Digunakan untuk membuat tabel dengan nama kolom yang ditentukan oleh pengguna. Pengguna juga perlu mendefinisikan tipe data untuk setiap kolom. Tipe – tipe data tersebuat sangat bervariasi, setiap DBMS memiliki tipe
data yang berbeda dengan DBMS lainnya. Dengan demikian pengguna perlu mengetahui terlebih dahulu tipe data yang didukung oleh DBMS tersebut.
DROP TABLE. Digunakan untuk menghapus semua baris / record dan menghapus definisi tabel dari database.
ALTER TABLE. Digunakan untuk menambah atau menghapus sebuah kolom dari suatu tabel.
Pernyataan – Pernyataan SQL.
Sebuah sistem database relational terdiri dari satu atau lebih objek yang disebut tabel. Data atau informasi disimpan pada tabel – tabel tersebut. Tabel secara unik diidentifikasikan dengan nama tabel beserta kolom dan barisnya. Kolom terdiri dari nama kolom, tipe data dan attribut – attribut lainnya. Baris terdiri dari record – record atau data dari kolom – kolom. Berikut ini contoh tabel yang diberi nama ‘Pegawai‘, terdiri dari kolom no_id, nm_depan, nm_belakang,umur,kota,propinsi. Baris berisi data untuk tabel tersebut, seperti terlihat pada tabel di bawah ini :
Tabel : Tabel Pegawai
no_id nm_depan
nm_belakang
Mary Ann
Mary Ann
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Pada bagian selanjutnya akan dibahas pernyataan – pernyataan SQL secara ringkas sebagai dasar atau mengingatkan kembali mengenai bagaimana menuliskan pernyataan – pernyataan SQL. Untuk pernyataan SQL secara mendetail, anda dapat membaca buku – buku atau referensi – referensi mengenai SQL.
Membuat Tabel.
Pernyataan CREATE TABLE digunakan untuk membuat sebuah tabel baru. Berikut ini merupakan bentuk pernyataan sederhana CREATE TABLE : CREATE TABLE <namatabel>
(,kolom1> <tipedata>, <kolom2> <tipedata>,
<kolomN> <tipedata> [<batasan>]);
Bentuk pernyataan CREATE TABLE jika kita menggunakan batasan (constraints) : CREATE TABLE <namatabel>
(,kolom1> <tipedata>, <kolom2> <tipedata> [<batasan>],
……………………………………………………………………………………………………. <kolomN> <tipedata> [<batasan>]);
[ ] = optional
Contoh :
CREATE TABLE pegawai
(,no_id INT (5), nm_depan VarChar (15), nm_belakang VarChar (20),umur INT (3),kota VarChar (30),propinsi VarChar (20));
<kolomN> <tipedata> [<batasan>]);
Untuk membuat sebuah tabel baru, ketikkan CREATE TABLE diikuti dengan nama tabel, tanda ‘( ‘, diikuti nama kolompertama, tipe data dan batasannya jika ada, lanjutkan untuk kolom berikutnya, tanda ‘) ‘ dan ditutup dengan
tanda ‘; ‘ biasanya banyak digunakan untuk menutup pernyataan SQL dibanyak DBMS. Pada materi kuliah ini, penulis menggunakan tanda ‗: ‗ disetiap akhir pernyataan SQL. Untuk lebih jelasnya lihat dokumentasi DBMS anda.
Nama tabel dan kolom harus diikuti dengan huruf, angka, atau underscore ‘_ ‘ dengan panjang tidak lebih dari 64 karakter (untuk MySQL). Tidak boleh menggunakan reserved keywords sebagai nama tabel atau kolom
(seperti, ‖select‖,‖create‖,‖insert‖, dan sebagainya).
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Tipe – tipe data menentukan tipe data apa yang digunakan untuk kolom tertentu. Jika nama kolomnya ‖nm_belakang‖, digunakan untuk menyimpan nama – nama, maka kolom tersebut seharusnya memiliki tipe data
‖VarChar‖ (variable-length character). Tabel berikut merupakan tipe – tipe data yang sering digunakan :
Tipe – tipe Data SQL yang sering digunakan
Tipe Data
Deskripsi
Char (ukuran)
String karakter dengan panjang tetap.
VarChar (ukuran) String karakter dengan panjang bervariasi tapi panjang maksimal sesuai yang ditetapkan. Numeric (ukuran)
Angka dengn maksimal digit sesuai yang ditetapkan.
Integer
Angka berupa integer.
Waktu / jam.
Ketika tabel dibuat, biasanya satu atau lebih kolom memiliki batasan – batasan tertentu. Suatu batasan biasanya berupa aturan yang terkait dengan kolom tersebut, data yang dimasukkan ke dalam kolom harus sesuai
dengan aturan tersebut. Sebagai contoh, batasan ‖unique‖ menentukan bahwa tidak boleh ada dua record yang memiliki nilai sama. Ada dua batasan lagi yang sering digunakan seperti ‖not null‖ menentukan bahwa kolom tidak dapat bernilai kosong at au null dan ‖primary key‖ menentukan identifikasi unik untuk setiap record / baris dalam sebuah tabel. Sebagai contoh, pernyataan di bawah ini akan membuat tabel pegawai seperti pada tabel di bawah ini :
CREATE TABLE pegawai
(no_id number (5) UNIQUE NOT NULL, nm_depan VarChar (15),
nm_belakang VarChar(20), umur integer (3), kota VarChar (30),
propinsi VarChar (20), PRIMARY KEY (no_id));
Menghapus Tabel.
Pernyataan DROP TABLE digunakan untuk menghapus sebuah tabel dan seluruh record pada tabel tersebut. Untuk menghapus tabel secara menyeluruh termasuk semua record-nya, tulis DROP TABLE diikuti dengan nama tabel. Berikut ini merupakan bentuk pernyataan DROP TABLE.
DROP TABLE <namatabel>;
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Pernyataan DROP TABLE digunakan untuk menghapus sebuah tabel dan seluruh record pada tabel tersebut. Untuk menghapus tabel secara menyeluruh termasuk semua record-nya, tulis DROP TABLE diikuti dengan nama tabel. Berikut ini merupakan bentuk pernyataan DROP TABLE.
DROP TABLE pegawai;
Modifikasi Struktur Tabel.
Untuk memodifikasi struktur dari suatu tabel, kita dapat menggunakan pernyataan ALTER TABLE. Pernyataan ALTER TABLE dapat digunakan untuk menambah dan menghapus kolom maupun batasan – batasannya ( constraints). Berikut ini merupakan bentuk pernyataan ALTER TABLE.
ALTER TABLE <namatabel>
ADD (,kolom> <tipedata> [, ……] | DROP <kolom> [, ……..];
Sebagai contoh, untuk menambah kolom kode_pos pada tabel pegawai, kita dapat menuliskan pernyataan berikut : ALTER TABLE pegawai ADD kode_pos Char (5);
Untuk menghapus kolom propinsi pada tabel pegawai, kita dapat menuliskan pernyataan sebagai berikut : ALTER TABLE pegawai DROP propinsi;
Menambah Data.
Pernyataan INSERT digunakan untuk menambah atau menyisipkan data atau record pada suatu tabel. Untuk menambahkan record ke dalam suatu tabel, tuliskan INSERT INTO diikuti dengan nama tabel, tanda ‘( ‘, nama kolom –
kolom dipisahkan dengan tanda koma, tanda ‘( ‘, diikuti keyword VALUE, tanda ‘( ‘, nilai – nilai data dan ditutup tanda ‘( ‘. Nilai yang dimasukkan akan disimpan sesuai dengan urutan nama kolomnya. Data yang berupa String ditulis
dengan menambahkan tanda petik satu didepan dan diakhir , contoh ‘test‘. INSERT INTO <namatabel>
(kolom1>,<kolom2>,......,<kolomN>) VALUES
(<nilai1>,<nilai2>,..........,<nilaiN>);
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Contoh :
INSERT INTO pegawai
(no_id, nm_depan, nm_belakang, umur, kota, propinsi) VALUES
(99023, ‘Agus‘, ‘Maulana‘, 45, ‘Jaksel‘, ‘Jakarta‘);
Mengambil Data.
Pernyataan SELECT digunakan untuk mengambil data tertentu yang sesuai dengan kriteria yang ditentukan. Berikut ini merupakan bentuk sederhana dari pernyataan SELECT :
SELECT <kolom1> [,<kolom2>,...]
FROM <namatabel>
[WHERE <kondisi>];
[ ] = Optional
Berikut ini merupakan bentuk lengkap dari pernyataan SELECT : SELECT [ALL | DISTINCT ] <kolom1> [, <kolom2>]
FROM <tabel1>[, <tabel2>] [WHERE <kondisi>]
[GROUP BY <daftar kolom>] [HAVING <kondisi>]
[ORDER BY <daftar kolom> [ASC | DESC] ]
[ ] = Optional
Nama – nama kolom setelah keyword SELECT menentukan kolom – kolom yang akan dikembalikan sebagai hasil. Untuk memilih semua kolom, kita dapat menggunakan ALL atau ‖(*)‖. Nama tabel setelah keyword FROM menentukan tabel mana yang akan diambil datanya. Klausa WHERE bersifat optional, digunakan untuk menentukan nilai data mana yang akan diambil berdasarkan kriteria yang ditentukan.
Pemilihan kondisi yang digunakan pada klausa WHERE, antara lain : =
Sama dengan .... >
Lebih besar dari .... <
Lebih kecil dari ......
BAHASA PEMROGRAMAN 1
JILID PERTAMA
>= Lebih besar dari atau sama dengan ...... <=
Lebih kecil dari atau sama dengan ..... < > atau ! = Tidak sama dengan ...... LIKE
Pattern matching
LIKE merupakan operator pattern matching yang dapat digunakan pada pemilihan kondisi. LIKE merupakan operator yang powerful, memungkinkan kita untuk memilih kolom – kolom yang sesuai. Tanda ‖%‖ dapat digunakan untuk mencocokkan semua kemungkinan karakter yang mungkin ada sebelum atau sesudah karakter tertentu. Sebagai contoh :
SELECT nama_depan, nama_belakang, kota FROM pegawai WHERE nama_depan LIKE ‘Er%‘;
Pernyataan di atas akan mengambil kolom nm_depan, nm_belakang, dan kota dari tabel pegawai yang nm_depan-nya mempunyai dua karakter awal Er. Atau kita dapat menuliskan :
SELECT nm_depan, nm_belakang FROM pegawai WHERE nm_belakang LIKE ‘%s‘;
Pernyataan di atas akan mengambil kolom nm_depan, nm_belakang dari tabel pegawai yang nm_belakang-nya diakhiri dengan karakter s.
SELECT * FROM pegawai
WHERE nm_depan = ‗Eric‘;
Pernyataan di atas hanya mengambil semua kolom dari tabel pegawai yang nm_depan-nya Eric. SELECT nm_belakang, kota, umur
FROM pegawai WHERE umur > 30;
Pernyataan di atas akan mengambil kolom nm_belakang, kota, umur dari tabel pegawai yang umur-nya lebih dari 30.
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Keyword ALL dan DISTINCT digunakan untuk memilih semua (default) atau ‖distinct‖ record yang unik pada hasil query. DISTINCT akan menghilangkan duplikasi record pada kolom yang ditentukan setelah pernyataan SELECT. Sebagai contoh, pernyataan di bawah ini akan menghasilkan record yang unik pada kolom umur dari tabel pegawai.
SELECT DISTINTC umur FROM pegawai;
ALL akan menampilkan semua record pada kolom tertentu termasuk duplikasi-nya. Secara default keyword ALL digunakan pada pernyataan SELECT.
Fungsi aggregate digunakan untuk melakukan perhitungan terhadap hasil query yang berupa numerik dari pernyataan SELECT. Fungsi ini pada dasarnya menyimpulkan hasil dari query pada kolom tertentu. Fungsi ini dapat digunakan secara langsung atau bersama klausa GROUP BY. Fungsi – fungsi aggregate dapat dilihat pada tabel di bawah ini :
Fungsi
Keterangan
MIN Mengembalikan nilai terkecil pada suatu kolom. MAX
Mengembalikan nilai terbesar pada suatu kolom. SUM
Mengembalikan jumlah nilai numerik pada suatu kolom. AVG
Mengembalikan nilai rata – rata pada suatu kolom. COUNT
Mengembalikan jumlah total nilai pada suatu kolom. COUNT (*)
Mengembalikan jumlah baris pada suatu tabel.
Berikut ini merupakan pernyataan yang akan mengembalikan satu hasil berupa rata umur dari tabel pegawai. SELECT AVG (umur)
FROM pegawai;
Untuk menampilkan jumlah record yang ada pada tabel pegawai, kita dapat menuliskan pernyataan seperti di bawah ini.
SELECT COUNT (*) FROM pegawai;
Kalusa GROUP BY digunakan untuk mengambil semua record yang berisi data pada kolom tertentu dan memungkinkan penggunaan fungsi aggregate pada satu atau lebih kolom.
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Sebagai contoh, untuk menampilkan daftar umur yang tertinggi disetiap kota, kita dapat menuliskan pernyataan sebagai berikut : SELECT MAX (umur), kota
FROM pegawai GROUP BY kota;
Klausa HAVING memungkinkan kita untuk menentukan kondisi pada record disetiap group, dengan kata lain record mana yang harus dipilih berdasarkan kondisi yang kita tentukan. Kalusa HAVING digunakan bersama klausa GROUP BY.
Sebagai contoh, untuk menampilkan umur rata-rata dari pegawai disetiap kota yang umurnya diatas 30, kita dapat menulis pernyataan sebagai berikut : SELECT kota, AVG (umur)
FROM pegawai GROUP BY kota HAVING umur > 30;
Klausa ORDER BY digunakan untuk menampilkan hasil query dengan urutan tertentu (baik menaik atau menurun). Keyword ASC digunakan untuk menampilkan hasil query dengan urutan menaik dan merupakan pilihan default. ASC digunakan untuk menampilkan hasil query dengan urutan menaik dan merupakan pilihan default. Keyword DESC digunakan untuk menampilkan hasil query dengan urutan menurun.
Sebagai contoh, untuk menampilkan daftar nm_depan, nm_belakang, umur, dan kota dari tabel pegawai dengan urutan menaik berdasarkan nm_depan-nya, kita dapat menuliskan pernyataan sebagai berikut :
SELECT nm_depan, nm_belakang, umur, kota
FROM pegawai ORDER BY nm_depan ASC;
Kita dapat mengurutkan berdasarkan beberapa kolom dengan memisahkan kolom – kolom tersebut dengan tanda koma. Sebagai contoh, untuk menampilkan daftar nm_depan, nm_belakang, umur, dan kota dari tabel pegawai dengan urutan menurun berdasarkan nm_depan dan nm_belakang-nya dapat menuliskan pernyataan sebagai berikut:
SELECT nm_depan, nm_belakang, umur, kota FROM pegawai
ORDER BY nm_depan DESC;
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Meng-update Data.
Pernyataan UPDATE digunakan untuk meng-update atau merubah record yang sesuai dengan kriteria yang telah ditentukan. Berikut ini merupakan bentuk pernyataan UPDATE. UPDATE <namatabel>
SET <namakolom1> = <nilaibaru1>[ , <namakolom2> = <nilaibaru2> …. ]
[WHERE <namakolom> OPERATOR <nilai> [and | or <namakolom> OPERATOR <nilai>] ] ;
[ ] = Optional Sebagai contoh, pernyataan di bawah ini akan merubah kolom umur menjadi umur+1 pada tabel pegawai yang nm_depan-nya Mary dan nm_belakang-nya Williams. UPDATE pegawai
SET umur = umur+1
WHERE nm_depan = ‗Mary‘ AND nm_belakang = ‗williams‘;
Menghapus Data.
Pernyataan DELETE digunakan untuk menghapus record atau baris dari suatu tabel. Berikut ini merupakan bentuk pernyataan DELETE. DELETE FROM <namatabel>
WHERE <namakolom> OPERATOR <nilai> [and | or <namakolom> OPERATOR <nilai>];
[ ] = Optional
Untuk menghapus record/baris dari suatu tabel, tulis ‖DELETE FROM‖ diikuti dengan nama tabel dan klausa WHERE yang berisi kondisi/kriteria untuk menhapus.
CATATAN :
Jika klausa WHERE tidak disertakan, maka semua record pada tabel tersebut akan dihapus.
Sebagai contoh, pernyataan di bawah ini akan menghapus record dari tabel pegawai yang nm_depan-nya Mike atau Eric.
DELETE FROM pegawai
WHERE nm_depan = ‗Mike‘ OR nm_depan = ‗Eric‘;
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Menggabungkan Tabel.
Kita dapat menggabungkan dua atau lebih tabel dalam satu hasil query dengan menggunakan pernyataan SELECT. Kita dapat mengenalinya pada pernyataan SELECT, jika setelah keyword FROM ada lebih dari satu tabel. Kita dapat menggabungkan tabel pegawai dengan tabel gaji.
no_id
Sebagai contoh, untuk menampilkan daftar nm_depan, nm_belakang,gaji, dan tunjangan dari tabel pegawai dan gaji, kita dapat menuliskan pernyataan berikut : SELECT pegawai.nm_depan, pegawai.nm_belakang, gaji.gaji, gaji.tunjangan
FROM pegawai, gaji WHERE pegawai.no_id = gaji.no_id;
BAHASA PEMROGRAMAN 1
JILID PERTAMA
JDBC API Apa itu JDBC API ?
JDBC merupakan singkatan dari Java Database Connectivity. JDBC API merupakan Java API (Application Programming Interface) untuk mengakses secara virtual berbagai jenis tabular data. JDBC API terdiri dari sekumpulan class dan interface yang ditulis dalam bahasa pemrograman Java yang menyediakan standar API sebagai tools dalam mengembangkan database dan memberikan kemudahan bagi pengembang untuk membuat aplikasi – aplikasi database yang sepenuhnya dalam bahasa pemrograman Java.
JDBC API memberikan kemudahan untuk mengirim pernyataan – pernyataan SQL ke relational DBMS dan mendukung penuh fitur – fitur SQL. JDBC API juga dapat berinteraksi dengan berbagai macam sumber data, seperti file – file yang berisi tabular data.
Keuntungan dari JDBC API adalah sebuah aplikasi dapat mengakses secara virtual berbagai sumber data dan dapat berjalan pada berbagai platform dengan Java Virtual Machine. Dengan kata lain, dengan JDBC API, kita tidak perlu membuat satu program untuk mengakses database Microsoft SQL atau database lainnya. Cukup satu program menggunakan JDBC API untuk mengakses berbagai jenis atau sumber data. Kombinasi dari platform Java
dan JDBC API memungkinkan pemrograman untuk melakukan TM ‖write once and run anywhere ‖.
JDBC API memungkinkan untuk melakukan tiga hal, yaitu : Membangun koneksi dengan database atau berbagai jenis sumber datab tabular data.
Mengirim pernyataan – pernyataan SQL. Memproses hasil.
JDBC 3.0 API terdiri dari dua package, yaitu :
1. java.sql package, merupakan core package dari JDBC API.
2. javax.sql package, merupakan package tambahan untuk menambahkan kemampuan server – side dari JDBC API.
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Arsitektur Two – Tier dan Three – Tier.
JDBC API mendukung kedua arsitektur two – tier dan three – tier untuk mengakses database. Gambar di bawah ini menggambarkan arsitektur two – tier untuk mengakses database. Pada arsitektur two – tier, sebuah Java applet atau aplikasi berinteraksi langsung ke sumber data. JDBC driver dibutuhkan untuk dapat berkomunikasi dengan sumber data tertentu yang akan diakses. Perintah – perintah dari pengguna dikirim dari database atau sumber data lainnya dan hasilnya dikirim kembali ke pengguna. Sumber data dapat terletak pada komputer lain yang terkoneksi melalui jaringan. Jaringan dapat berupa intranet atau internet.
Java Application Java Application
Client Machine
JDBC
Client Machine
JDBC
DBMS DBMS – Proprietary Protocol – Proprietary Protocol
Database
Database Server Database Server
Gambar : Arsitektur Two-Tier Pada arsitektur three – tier, perintah – perintah dikirim ke layanan ‖middle – tier‖ yang kemudian
mengirimkan perintah tersebut ke sumber data. Sumber data memproses perintah dan mengirimkan hasilnya ke middle – tier, kemudian mengirimkan kembali ke pengguna. Gambar di bawah ini menggambarkan arsitektur three – tier untuk mengakses database.
Arsitektur three – tier sangat menarik karena dengan middle – tier memungkinkan untuk mengontrol akses dan menyederhanakan deployment aplikasi. Pada beberapa kasus, arsitektur three – tier dapat memberikan keuntungan dari sisi kemampuan. Middle – tier biasanya ditulis dengan bahasa pemrograman seperti C atau C++, yang memiliki kemampuan yang tinggi dan cepat.
Java Applet atau HTML Browser Java Applet atau
HTML Browser
Client Machine GUI Client Machine GUI
RMI, HTTP, CORBA, dan RMI, HTTP, CORBA, dan panggilan lainnya
panggilan lainnya
Application Server Application Server
(Business Logic) JDBC Server Machine (Business Logic)
Server Machine
JDBC
DBMS DBMS – Proprietary Protocol – Proprietary Protocol
Database
Database Server Database Server
Gambar : Arsitektur Three-Tier
BAHASA PEMROGRAMAN 1
JILID PERTAMA
JDBC Product Framework.
Sun Microsystems menyediakan framework dari produk – produk komponen JDBC, antara lain : JDBC driver manager (termasuk sebagai bagian dari Java 2 Platform).
JDBC – ODBC bridge (disertai pada Java 2 Platform untuk versi Solaris dan Windows). JDBC API Test Suite (tersedia di website JDBC).
JDBC drivermanager class merupakan backbone dari arsitektur JDBC dan memiliki fungsi utama engkoneksikan aplikasi – aplikasi Java dengan JDBC driver yang sesuai. JDBC – ODBC bridge driver memungkinkan ODBC driver digunakan sebagai JDBC driver. Hal ini diimplementasikan sebagai salah satu cara untuk mendapatkan teknologi JDBC secara cepat atau menyediakan cara untuk mengakses sumber data yang tidak memiliki JDBC driver.
JDBC API Test Suite ditujukan untuk pengembang driver. Test Suite berupa test untuk kompabilitas J2EE dan mengindikasikan apabila sebuah driver kompatibel dengan produk – produk lain yang sesuai dengan spesifikasi J2EE.
Arsitektur JDBC.
JDBC API terdiri dari 2 kumpulan interface utama, yaitu : JDBC API untuk pengembang aplikasi dan JDBC driver terbagi menjadi 4 kategori yang digabung menjadi satu. Aplikasi dan applet dapat mengakses melalui JDBC API dengan menggunakan pure Java JDBC technology-base driver, seperti terlihat pada gambar di bawah ini
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Java Applet atau Application
JDBC API
JDBC Driver atau Data Source Object
Pure Java Pure Java JDBC Driver
JDBC Driver
DB Middleware
Database Database Server
Server
Gambar : Koneksi database menggunakan pure Java JDBC Driver
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Aplikasi Java juga dapat mengakses database melalui JDBC API dengan menggunakan ODBC driver dan database client library, seperti terlihat pada gambar di bawah ini :
Java Applet atau Application
JDBC API
JDBC Driver atau Data Source Object
JDBC-ODBC Partial Java Bridge Driver
JDBC Driver
ODBC DB Client Lib DB Client Lib
Database Database Server
Server
Gambar : Koneksi database menggunakan ODBC Driver dan Database Client Library
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Berdasarkan kedua arsitektur di atas, maka JDBC Driver dapat dibagi 4 tipe, yaitu : Tipe 1 : JDBC – ODBC Bridge dan ODBC Driver.
Kombinasi ini menyediakan akses JDBC melalui ODBC driver. ODBC berupa binary code dan pada banyak kasus database client code harus diload pada setiap komputer client yang menggunakan JDBC – ODBC bridge. JDBC – ODBC bridge cocok untuk kebutuhan eksperimen dan untuk situasi dimana tidak ada JDBC driver. Ilustrasi tipe 1 ini dapat dilihat pada gambar Koneksi database menggunakan pure Java JDBC Driver.
Tipe 2 : Native API partly Java technology – enabled driver. Tipe ini mengkonversi perintah JDBC ke dalam
perintah pada client API untuk DBMS tertentu. Seperti pada tipe 1, tipe ini membutuhkan beberapa binary code yang harus diload pada setiap komputer client. Ilustrasi tipe 2 ini dapat dilihat pada gambar di atas.
Tipe 3 : Pure Java Driver for Database Middleware.
Tipe ini mengkonversi perintah JDBC ke dalam middleware vendor‘s protocol, yang kemudian diterjemahkan ke DBMS protocol oleh middleware server. Middleware menyediakan konektifitas ke banyak database yang berbeda. Ilustrasi tipe 2 ini dapat dilihat pada gambar di atas.
Tipe 4 : Direct-to-Database Pure Java Driver. Tipe ini mengkonversi perintah JDBC ke dalam Network Protocol yang digunakan langsung oleh DBMS,
memungkinkan koneksi langsung dari komputer client ke DBMS Server dan merupakan solusi yang praktis untuk akses melalui intranet. Ilustrasi tipe 4 ini dapat dilihat pada gambar di atas.
Pada materi ini hanya menggunakan driver tipe 1 (JDBC – ODBC Bridge dan ODBC Driver) dan tipe 4 (Direct-to-Database Pure Java Driver).
Membangun Database
Sebelum kita mulai pemrograman aplikasi database dengan Java, ada beberapa hal yang harus dipersiapkan terlebih dahulu, antara lan :
1. Platform Java, termasuk JDBC API. Jika anda belum memiliki Java 2 Platform Standard Edition Development Kits (JDK), anda dapat menginstall JDK. Pada materi ini menggunakan JDK versi 1.4 atau JDK versi 1.4 keatas dan untuk melihat versi terbaru dari Java 2 Platform, anda dapat melihat di alamat http://java.sun.com/products/JDK/CurrentRelease.
BAHASA PEMROGRAMAN 1
JILID PERTAMA
2. DBMS. Jika anda belum memiliki sebuah DBMS, install-lah MySQL. Pada materi ini menggunakan MySQL versi 4.
3. JDBC Driver. Install-lah JDBC driver untuk MySQL atau letakkan MySQL Connector pada path J2SDK yaitu pada path : C:\j2sdk1.4.2_05\jre\lib\ext, pada materi ini menggunakan MySQL Connector/J 3.1.11.
4. ODBC Driver. Pada materi ini tidak diharuskan meng-install ODBC Driver untuk MySQL, sebab dengan MySQL Connector pun cukup untuk mengkoneksikan program Java dengan MySQL Server. Terkecuali kita ingin mengkoneksikan program Java dengan DBMS atau DBMS Server lainnya.
Membuat Database
Buatlah sebuah database dengan nama ‘tokomajalah‘ dengan menggunakan pernyataan MySQL command line. Jalankan command prompt dan ketiklah C:\mysql\bin\mysql –u –root –p (secara default MySQL terinstall di C:\mysql) atau ketiklah C:\Program Files\xampp\mysql\bin\mysql –u –root –p (apabila menggunakan xampp, secara default xampp terinstall di C:\Program Files\xampp\mysql), kemudian ketiklah password anda untuk login ke MySQL Server atau gunakanlah MySQL-Front atau MySQL-Yog sebagai interface GUI untuk berinteraksi dengan MySQL Server.
Membangun Koneksi
Pertama kali kita perlu membangun sebuah koneksi ke DBMS atau sumber data yang akan digunakan. Untuk membangun koneksi kita perlu melakukan dua hal : me-load JDBC Driver dan membuat koneksi.
Me-load JDBC Driver
Untuk me-load JDBC Driver yang akan digunakan, sangat mudah. Pada materi ini kita hanya menggunakan beberapa cara :
1. Menggunakan ODBC.
Open Database Connectivity (ODBC) merupakan interface berbasis C untuk database engines berbasis SQL. ODBC menyediakan interface yang konsisten untuk berkomunikasi dengan database dan untuk mengakses
BAHASA PEMROGRAMAN 1 JILID PERTAMA JILID PERTAMA
Class.forName(―sun.jdbc.odbc.JdbcOdbcDriver‖);
2. Menggunakan MySQL Connector /J 3.1.11.
MySQL menyediakan aplikasi client untuk koneksi ke MySQL Server yang dikembangkan dengan bahasa pemrograman Java melalui JDBC Driver, yang disebut MySQL Connector/J. MySQL Connector/J merupakan JDBC-3.1.11 driver tipe 4 yang artinya driver tersebut dibuat dengan bahasa pemrograman Java murni yang mengimplementasikan spesifikasi JDBC versi 3.0 dan dapat berkomunikasi langsung dengan MySQL Server menggunakan protokol MySQL. Untuk me-load driver-nya, kita dapat menuliskan sebagai berikut :
Class.forName(―com.mysql.jdbc.driver‖).newInstance();
3. Menggunakan driver lain.
Jika anda menggunakan driver lain, bacalah dokumentasi driver tersebut untuk penggunaan class-nya. Sebagai contoh, jika nama class-nya jdbc.DriverX, maka anda dapat menuliskan sebagai berikut :
Class.forName(―com.mysql.jdbc.driverX‖);
Setelah kita me-load driver, maka kita dapat membangun koneksi dengan DBMS.
Membuat Koneksi.
Untuk membuat koneksi, kita dapat melakukan dengan beberapa cara :
1. Menggunakan ODBC.
Jika kita ingin menggunakan ODBC, kita perlu membuat ODBC Data Source Name (DSN). Secara umum untuk membuat koneksi dengan ODBC dapat dituliskan sebagai berikut :
Connection con = DriverManager.getConnection(
ulr, ― my_username ‖, ― my_password ‖);
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Jika kita menggunakan JDBC- ODBC Bridge Driver dan nama ODBC data source adalah ‘tokomajalah‘, maka JDBC url ditulis sebagai berikut : String url = ―jdbc:odbc:tokomajalah‖;
Connection con = DriverManager.getConnection(
ulr, ―root‖, ―‖);
2. Menggunakan MySQL Connector /J 3.1.11.
Secara umum untuk membuat koneksi dengan MySQL Connector /J 3.1.11, dapat dituliskan sebagai berikut : Connection con = DriverManager.getConnection(
―jdbc:mysql://nama_server_or_IP[:no_port]/”+
Nama_database ?user= my_username &‖+
―password= my_password ‖);
Sebagai contoh, jika nama server ‘localhost‘, menggunakan standard port MySQL Server 3306, database yang akan diakses adalah ‘tokomajalah‘, username dan password untuk login ke MySQL ‘root‘ dan ‘‘, maka kita dapat menuliskan sebagai berikut :
Connection con = DriverManager.getConnection(
―jdbc:mysql:/localhost/”+
tokomajalah ?user= root &‖+
―password= ‖);
3. Menggunakan Driver Lain.
Jika anda menggunakan JDBC Driver, bacalah dokumentasi driver tersebut untuk penulisan JDBC url-nya.
Untuk memudahkan membangun koneksi ke DBMS, anda dapat menggunakan template di bawah ini : Template untuk koneksi ke DBMS menggunakan ODBC.
/*
Template koneksi dengan ODBC @author anky
*/
import java.sql.*;
public class nama_class {
public static void main(String[]args){
String url = ―jdbc:odbc: DataSourceName ‖;
Connection con;
ty{
//me-load driver Class.forName(―sun.jdbc.odbc.JdbcOdbcDriver‖);
}catch(java.lang.ClassNotFoundException e){
System.err.print(―Class Tidak Ditemukan : ―);
System.err.println(e.getMessage()); BAHASA PEMROGRAMAN 1
} try{
JILID PERTAMA
//membuat koneksi
Lanjutannya Template untuk koneksi ke DBMS menggunakan MySQL Connector /J 3.1.11.
*Template untuk koneksi ke DBMS menggunakan MySQL Connector /J 3.1.11@author anky */
import java.sql.*;
public class nama_class {
public static void main(String[]args){
String url = ―jdbc:mysql:// nama_server_or_IP [ :no_port ]/‖+
nama_database ?user= my_username &password= my_password ‖;
Connection con; try{
//me-load driver
Class.forName(―com.mysql.jdbc.Driver‖).newInstance();
}catch(Exception e){
System.err.println(―e.getMessage());
} try{
//membuat koneksi con = DriverManager.getConnection(url);
//lakukan sesuatu dengan koneksi
…………………. BAHASA PEMROGRAMAN 1
…………………. //menutup koneksi
JILID PERTAMA
con.close();
CATATAN :
Jika anda menjalankan program Java yang menggunakan MySQL Connector
/J3.1.11 terdapat kesalahn seperti berikut :
com.mysql.jdbc.Driver SQLException : No suitable driver
Ini artinya program Java tidak dapat menemukan driver tersebut, cobalah untuk menset mysql-connector-java-3.1.11-bin.jar pada Java CLASSPATH.
C:\>set CLASSPATH=folder_mysql-connector-java-3.1.11;
Untuk lebih jelasnya anda dapat melihat dokumentasi Java mengenai
Membuat Tabel.
bagaimana menset CLASSPATH.
Mari kita membuat tabel – tabel yang dibutuhkan sebagai contoh. Tabel MAJALAH berisi informasi mengenai majalah – majalah yang terjual di suatu toko, seperti nama majalah, jumlah majalah terjual dalam seminggu, dan jumlah total majalah terjual saat ini. Secara lengkap tabel MAJALAH dapat dilihat seperti pada tabel di bawah ini :
MJH_ID
NAMA_MJH
PEN_ID
HARGA
TERJUAL TOTAL
0 0 11 Tren Ponsel
10 Java Mania
0 0 12 Sistem Informasi
0 0 13 Java Tips
0 0 14 Tren Komputer
Tabel Majalah
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Kolom MJH_ID menyimpan data nomor identifikasi dari majalah yang memiliki tipe data Integer. Kolom NAMA_MJH menyimpan data nama majalah dengan tipe data VarChar dan memiliki panjang maksimal 32 karakter. Kolom PEN_ID menyimpan data identifikasi penerbit yang memiliki tipe data Integer. Kolom HARGA menyimpan data harga majalah dengan tipe data DECIMAL. Kolom TERJUAL menyimpan data jumlah penjualan majalah dalam seminggu yang memiliki tipe data Integer. Kolom terakhir, TOTAL menyimpan data jumlah total majalah yang terjual.
Tabel kedua adalah PENERBIT yang berisi informasi mengenai setiap penerbit. Secara lengkap tabel PENERBIT dapat dilihat seperti pada tabel di bawah ini :
PEN_ID
NAMA_PEN
JALAN
KOTA
PROPINSI KODE_POS
101 Media Javatindo
DKI Jakarta 12550 49 Komputindo Media Mandiri
Harsono RM No. 70
Jakarta
DKI Jakarta 12440 150
Petogokan II Blok A No. 38
Jakarta
Pustaka Mediatama
Ir. H. Juanda No. 10
Bogor
Jawa Barat 17442
Table Penerbit
Kolom PEN_ID menyimpan data nomor identifikasi penerbit dengan tipe data Integer. Kolom NAMA_PEN menyimpan data nama penerbit yang memiliki tipe data VarChar dengan panjang maksimal 40 karakter. Kolom JALAN menyimpan data nama jalan lokasi penerbit yang memiliki tipe data VarChar dengan panjang maksimal 30 karakter. Kolom KOTA menyimpan data nama kota lokasi penerbit yang memiliki tipe data VarChar dengan panjang maksimal
20. Kolom PROPINSI menyimpan data nama propinsi lokasi penerbit yang memiliki tipe data VarChar dengan panjang maksimal 20. Kolom KODE_POS menyimpan data kode pos lokasi penerbit yang memiliki tipe data CHAR dengan panjang maksimal 5 karakter.
Tabel MAJALAH dan tabel tabel PENERBIT memiliki satu kolom yang sama, yaitu PEN_ID. Kolom PEN_ID merupakan primary key pada tabel PENERBIT sedangkan pada tabel MAJALAH kolom PEN_ID merupakan foreign key.
Pernyataan SQL yang digunakan untuk membuat tabel MAJALAH dan tabel PENERBIT, sebagai berikut :
CREATE TABLE majalah (mjh_id Integer, nama_mjh VarChar(32), pen_id Integer, harga Decimal, terjual Integer, total Integer);
CREATE TABLE penerbit (pen_id Integer, nama_pen VarChar(40), jalan VarChar(30), kota VarChar(20), propinsi VarChar(20), kode_pos Char(5));
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Untuk membuat tabel kita harus membuat JDBC Statement terlebih dahulu. Objek Statement adalah objek yang digunakan untuk mengirim pernyataan SQL ke DBMS. Untuk membuat objek statement, kita memerlukan sebuah koneksi yang aktif. Contoh berikut, kita menggunakan objek Connection con untuk membuat objek Statement stmt.
Statement stmt = con.CreateStatement(); Setelah objek Statement terbentuk, maka kita dapat menjalankannya dengan pernyataan SQL dengan metode ExecuteUpdate. Metode ExecuteUpdate digunakan karena pernyataan SQL yang akan digunakan untuk membuat tabel merupakan pernyataan DDL ( Data Definition Language). Pernyataan SQL seperti CREATE, DROP, dan ALTER merupakan pernyataan – pernyataan DDL dan dijalankan dengan metode ExecuteUpdate. Sebagai contoh, potongan program di bawah ini merupakan pernyataan SQL untuk membuat tabel MAJALAH
String createString = ‖create table majalah ‖+ ‖(mjh_id Integer, ‖+nama_mjh VarChar(32), pen_id Integer, harga Decimal, terjual Integer, total Integer)‖;
Atau kita dapat menuliskannya, sebagai berikut :
stmt.executeUpdate(createString);
stmt.executeUpdate(create table majalah ‖+ ‖(mjh_id Integer, nama_mjh VarChar(32), pen_id Integer, harga Decimal, terjual Integer, total Integer‖));
CATATAN :
Untuk pernyataan SQL pada program Java, kita tidak perlu menambahkan tanda ‗;‘ diakhir pernyataan. Walaupun pada MySQL setiap pernyataan
SQL harus diakhiri dengan tanda ‗;‘. Penambahan tanda ‗;‘ akan dilakukan
secara otomatis oleh JDBC API.
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Di bawah ini merupakan listing program BuatTabelMajalah.java untuk membuat tabel majalah. /*
*BuatTabelMajalah.java@author anky
import java.sql.*;
public class BuatTabelMajalah{ public static void main(String[]args){
String url = ―jdbc:odbc:tokomajalah‖;
Connection con; String createString;
createString = ―create table majalah ―+ ―(mjh_id Integer, nama_mjh VarChar(32), pen_id Integer, harga Decimal, ―+ ―terjual Integer, total Integer)‖;
Statement stm;
try{
Class.forName(―sun.jdbc.odbc.JdbcOdbcDriver‖);
}catch(java.lang.ClassNotFoundException e){
System.err.print(―Class.NotFoundException : ―);
System.err.println(e.getMessage());
} try{
con = DriverManager.getConnection(url, ―root‖,‖‖);
stmt = con.createStatement(); stmt.executeUpdate(createString); stmt.close();
con.close();
System.out.println(―Tabel Majalah Berhasil Dibuat….‖);
}catch(SQLException ex){
System.err.println(―SQLException : ―+ex.getMessage());
di bawah ini merupakan listing program BuatTabelPenerbit.java untuk membuat tabel penerbit.
BAHASA PEMROGRAMAN 1
JILID PERTAMA
/* *BuatTabelPenerbit.java@author anky
import java.sql.*;
public class BuatTabelMajalah{
public static void main(String[]args){
String url = ―jdbc:odbc:tokomajalah‖;
Connection con;
String createString;
createString = ―create table penerbit ―+ ―(pen_id Integer, nama_pen VarChar(40), jalan VarChar(30), ―+
―kota VarChar(20), propinsi VarChar(20), kode_pos Char(5))‖;
Statement stm; try{
Class.forName(―sun.jdbc.odbc.JdbcOdbcDriver‖);
}catch(java.lang.ClassNotFoundException e){
System.err.print(―Class.NotFoundException : ―);
System.err.println(e.getMessage());
try{
con = DriverManager.getConnection(url, ―root‖,‖‖); stmt = con.createStatement(); stmt.executeUpdate(createString); stmt.close();
con.close();
System.out.println(―Tabel Penerbit Berhasil Dibuat….‖);
}catch(SQLException ex){
System.err.println(―SQLException : ―+ex.getMessage());
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Menampilkan Struktur Tabel
Kita dapat mengambil informasi dari duatu tabel, seperti nama, tipe data, ukuran kolom, atau memeriksa apakah kolom tersebut boleh diisi nilai null atau tidak. Sebagai contoh, potongan program di bawah ini akan mengambil informasi dari suatu tabel.
try{
Statement select = con.createStatement(); ResultSet result = select.executeQuery(query);
//mengambil informasi dari hasil query
ResultSetMetaData meta = result.getMetaData();
//mengambil nama tabel String namaTabel = meta.getTableName(1);
//mengambil jumlah total kolom dari tabel int columns = meta.getColumnCount();
String namaKolom, tipeData; int ukuranKolom, nullable; for(int i=1;i<=columns;i++) {
//mengambil nama/label dari kolom namaKolom = meta.getColumnLabel(i);
//mengambil tipe data dari kolom
tipeData = meta.getColumnTypeName(i);
//mengambil ukuran dari kolom ukuranKolom = meta.getColumnDisplaySize(i);
//memeriksa apakah kolom tsb boleh berisi null //jika nilainya 1 berarti boleh (nullabel), jika 0 berarti tidak boleh (not null).
nullable = meta.isNullable(i);
} select.close();
}catch(Exception e){ e.printStackTrace(); }
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Di bawah ini merupakan listing program StrukturTabel.java untuk menampilkan struktur dari tabel majalah dan penerbit.
/* *StrukturTabel.java@author anky
import java.sql.*;
public class StrukturTabel{
public static void getRsMetaData(Connection con, String query){
try{
Statement select = con.createStatement(); ResultSet result = select.executeQuery(query); ResultSetMetaData meta = result.getMetaData();
System.out.println(―Tabel ―+meta.getTableName(1)); System.out.println(―KOLOM―+‖\t Tipe‖+‖\t UKURAN‖+‖\t isNullable‖);
int columns = meta.getColumnCount(); for(int i=1;i<=columns;i++){
//mencetak nama, tipe, dan ukuran kolom
System.out.print(―meta.getColumnLabel(i)+―\t‖ +meta.getColumnTypeName(i)+‖\t‖
+meta.getColumnDisplaySize(i));
//memeriksa apakah kolom boleh berisi Null if(meta.isNullable(i) == ResultSetMetaData.columnNullable)
System.out.println(―\t TRUE‖);
else
System.out.println(―\t FALSE‖);
} //mencetak jumlah total kolom
System.out.println(―Total Kolom : ―+column+‖\n‖);
Select.close(); }catch(Exception e){
e.printStackTrace();
} public static void main(String[]args){
String url = ―jdbc:odbc:tokomajalah‖; String username = ―root‖;
String password = ―‖; Connection con;
try{
Class.forName(―sun.jdbc.odbc.JdbcOdbcDriver‖);
}catch(Exception e){
System.out.p rintln(―Gagal Me-load JDBC/ODBC Driver‖); return;
} try{
con = DriverManager.getConnection(url, username, password);
getRsMetaData(con, ―Select * from majalah‖); BAHASA PEMROGRAMAN 1
System.out.println();
getRsMetaData(con, ―select * from penerbit‖);
JILID PERTAMA
con.close();
}catch(Exception e){
e.printStackTrace();
Jika program di atas dijalankan, maka akan terlihat tampilan seperti berikut : Table majalah
mjh_id
11 True nama_mjh
Integer
32 True pen_id
VarChar
11 True harga
Integer
10 True terjual
Decimal
11 True total
Integer
11 True Total kolom : 6
Integer
Table penerbit
pen_id
11 True nama_pen
Integer
40 True jalan
VarChar
30 True kota
VarChar
20 True propinsi
VarChar
20 True kode_pos
VarChar
5 True Total kolom : 6
Char
Menghapus Tabel
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Untuk menghapus table, kita dapat menggunakan pernyataan SQL DROP TABLE. Untuk menghapus sebuah tabel secara keseluruhan termasuk semua baris/record di dalamnya, kita dapat memberikan pernyataan DROP TABLE diikuti dengan nama tabelnya. DROP TABLE berbeda dengan menghapus semua baris pada suatu tabel. Menghapus semua baris suatu tabel tidak menghapus definisi tabel. Sedangkan DROP TABLE, akan menhapus semua baris dan definisi tabel dari database. Potongan program berikut digunakan untuk menghapus tabel dengan nama temp.
try{
Connection con = DriverManager.getConnection( …);
Statement stmt = con.createStatement();
//menghapus tabel
Stmt.executeUpdate(―drop table temp‖);
stmt.close(); con.close();
}catch(SQLException ex){
} Listing program HapusTabel.java di bawah ini, memberikan contoh bagaimana membuat tabel temp, menampilkan strukturnya dan menghapus kembali tabel tersebut.
*HapusTabel.java@author anky */
import java.sql.*;
public class HapusTabel{
public static void getRsMetaData(Connection con, String query){
try{
Statement select = con.createStatement();
ResultSet result = select.executeQuery(query);
ResultSetMetaData meta = result.getMetaData();
System.out.println(―Tabel ―+meta.getTableName(1)); System.out.println(―KOLOM‖+‖\t ―TIPE‖+‖\t UKURAN‖+ ―\t isNullable‖); int columns = meta.getColumnCount(); for(int i=1;i<=columns;i++){
System.out.print(―meta.getColumnLabel(i)+―\t‖ +meta.getColumnTypeName(i)+‖\t‖ +meta.getColumnDisplaySize(i));
if(meta.isNullable(i) == ResultSetMetaData.columnNullabel)
System.out.println(―\t TRUE‖);
else S ystem.out.println(―\t FALSE‖); } System.out.println(―Total kolom : ―+columns+‖\n‖); select.close();
BAHASA PEMROGRAMAN 1
}catch(Exception e){
System.out.println(e.getMessage());
JILID PERTAMA JILID PERTAMA
try{
Class.forName(―sun.jdbc.odbc.JdbcOdbcDriver‖);
}catch(Exception e){
System.out.println(―Gagal Me-load JDBC/ODBC Driver‖); return;
try{
con = DriverManager.getConnction(url, username, password);
//menampilkan struktur tabel temp
geRSMetaData(con, ―select * from temp‖);
//menghapus tabel temp query = ―drop table temp‖; select.executeUpdate(query);
//menampilkan kembali struktur tabel setelah dihapus getRSMetaData(con, ―select * from temp‖); con.close();
}catch(Exception e){ System.out.println(e.getMessage()); }
Jika HapusTabel.java dijalankan, maka akan terlihat tampilan seperti berikut : Tabel temp
ID Integer
11 TRUE
10 TRUE Total Kolom : 2
Nama
VarChar
[ MySQL ] [ ODBC 3.51 Driver] [mysqld-4.0.12-nt ] Table ‗tokomajalah‘ doesn‘t exist
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Pesan kesalahan Table ‗tokomajalah.temp‘ doesn‘t exist terjadi karena tabel temp telah dihapus.
Modifikasi Tabel.
Definisi dari suatu tabel dapat dimodifikasi, kita dapat menambah atau menghapus kolom, mengubah definisi dari kolom, mengubah definisi dari kolom, dan menambah atau menghapus batasan – batasan (constraints) dari suatu tabel. Kita dapat melakukannya dengan pernyataan SQL ALTER TABLE. Sebagai contoh, menambahkan kolom NO_TEL pada tabel penerbit, kita dapat menggunakan pernyataan berikut :
Connection con = DriverManager.getConnection(…);
Statement stmt = con.createStatement();
Untuk menghapus kolom kode_pos pada tabel penerbit, kita dapat menggunakan pernyataan berikut : String alterQ = ―alter table penerbit add no_tel VarChar(10)‖;
Stmt.executeUpdate(alterQ);
Connection con = DriverManager.getConnection(…);
Statement stmt = con.createStatement();
String alterQ = ―alter table penerbit drop kode_pos‖;
Stmt.executeUpdate(alterQ);
Listing program ModifikasiTabel.java di bawah ini, memberikan contoh bagaimana memodifikasi tabel penerbit. /*
*ModifikasiTabel.java@author anky */
import java.sql.*;
public class ModifikasiTabel{
public static void getRsMetaData(Connection con, String query){
try{ Statement select = con.createStatement();
ResultSet result = select.executeQuery(query); ResultSetMetaData meta = result.getMetaData();
System.out.printl n(―Tabel ―+meta.getTableName(1)); System.out.println(―KOLOM‖+‖\t ―TIPE‖+‖\t UKURAN‖+
―\t isNullable‖);
int columns = meta.getColumnCount(); for(int i=1;i<=columns;i++){
System.out.print(―meta.getColumnLabel(i)+―\t‖ +meta.getColumnTyp eName(i)+‖\t‖
+meta.getColumnDisplaySize(i));
if(meta.isNullable(i) == ResultSetMetaData.columnNullabel)
System.out.println(―\t TRUE‖);
else
System.out.println(―\t FALSE‖); }
System.out.println(―Total kolom : ―+columns+‖\n‖); select.close();
}catch(Exception e){
System.out.println(e.getMessage());
BAHASA PEMROGRAMAN 1
public static void main(String[]args){ JILID PERTAMA
String url = ―jdbc:odbc:tokomajalah‖; String username = ―root‖;
Jika ModifikasiTabel.java dijalankan, maka akan terlihat tampilan seperti berikut : Struktur tabel sebelum ditambahkan kolom no_tel
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Tabel Penerbit
pen_id
Integer
11 TRUE
nama_pen
kode_pos
VarChar
5 TRUE
Total Kolom : 6
Struktur tabel setelah ditambahkan kolom no_tel
Tabel Penerbit
pen_id
Integer
11 TRUE
nama_pen
kode_pos
VarChar
5 TRUE
no_tel
VarChar
10 TRUE
Total Kolom : 7
Struktur tabel setelah kolom no_tel dihapus
Tabel Penerbit
pen_id
Integer
11 TRUE
nama_pen
kode_pos
VarChar
5 TRUE
Total Kolom : 6
Manipulasi Database
BAHASA PEMROGRAMAN 1
JILID PERTAMA
1. Menambah Data.
Pada tulisan sebelumnya telah dibahas bagaimana membuat tabel majalah dengan menentukan nama kolom – kolomnya dan tipe – tipe data untuk kolom tersebut. Kita hanya membuat struktur tabelnya saja, tabel tersebut belum berisi data apapun. Kita akan memasukkan data ke dalam tabel tersebut satu per satu dengan memberikan data yang akan disimpan disetiap kolomnya. Nilai – nilai yang akan dimasukkan berurutan sesuai dengan urutan kolom – kolom saat tabel tersebut dibuat.
Potongan program berikut akan menambahkan satu baris/record dengan nilai 10 pada kolom terjual dan 0 pada kolom total. Kita akan membuat objek Statement dan menggunakan methode executeUpdate untuk menjalankannya. Connection con = DriverManager.getConnection(…);
Statement stmt = con.createStatement();
stmt.executeUpdate(insert into majalah ―+
―values (10, ‗Java Mania‘, ‗101, 7000, 0, 0);‖ );
Potongan program berikut akan menambahkan record selanjutnya ke dalam tabel majalah. Kita tidak perlu membuat kembali objek Statement stmt.
stmt.executeUpdate(―insert into majalah values (11, ‗Tren Ponsel‘, 49, 8000, 0, 0)); stmt.executeUpdate(―insert into majalah values(12, ‗Sistem Informasi‘, 150, 9000, 0, 0)‖); stmt.executeUpdate(―insert into majalah values(13, ‗Java Tips‘, 101, 8000, 0, 0)‖); stmt.executeUpdate(―insert into majalah values(14, ‗Tren Komputer‘, 49, 9000, 0, 0)‖);
Listing program MenambahData.java di bawah ini, memberikan contoh bagaimana memasukkan/menambah data pada tabel majalah dan tabel penerbit.
/*
*MenambahData.java@author anky
*/
import java.sql.*;
public class MenambahData{
public static void main(String[]args){
String url = ―jdbc:odbc:tokomajalah‖;
Connection con; Statement stmt; String query; ResultSet rs; int jumlahRecord;
try{
Class.forName(―sun.jdbc.odbc.JdbcOdbcDriver‖); catch(java.lang.ClassNotFoundException e){ }
Syst em.err.print(―ClassNotFoundException : ―); System.err.println(e.getMessage());
} try{
con = DriverManager.getConnection(url, ―root‖, ―‖);
stmt = con.createStatement(); BAHASA PEMROGRAMAN 1
JILID PERTAMA
//menghitung jumlah record
query = ―select count(*) from majalah‖;
//menghitung jumlah record rs = stmt.executeQuery(query); rs.next(); jumlahRecord = rs.getInt(1); System.out.println(―Tabel penerbit setelah ditambah...‖); System.out.println(‖Jumlah Record = ‖+jumlahRecord);
BAHASA PEMROGRAMAN 1
stmt.close();
JILID PERTAMA
con.close(); }catch(SQLException ex){
Jika program MenambahData.java dijalankan, akan menampilkan hasil seperti berikut : Tabel majalah sebelum ditambah Jumlah record = 0 Tabel majalah setelah ditambah Jumlah record = 5 Tabel penerbit sebelum ditambah Jumlah record = 0 Tabel penerbit setelah ditambah Jumlah record = 3
Mengambil Data
Setelah kita memasukkan atau menambah data pada tabel kita dapat mengambil data dari tabel tersebut. Untuk mengambil data dari tabel tersebut. Untuk mengambil data dari tabel, kita dapat menggunakan pernyataan SELECT, kemudian mengirim ke database melalui program Java.
JDBC API mengembalikan hasil query dalam bentuk objek ResultSet, oleh karena itu kita perlu membuat instance dari kelas ResultSet untuk menampung hasil query. Potongan program berikut merupakan contoh deklarasi objek ResultSet rs dan mengirimkan sebuah query.
ResultSet rs = stmt.executeQuery(―select nama_mjh, harga from majalah‖); Variabel rs berisi hasil query, untuk mengakses nama majalah dan harganya, kita perlu menuju ke setiap baris dan mengambil nilai-nya sesuai dengan tipe datanya. Method next digunakan untuk menggerakkan yang disebut
BAHASA PEMROGRAMAN 1 JILID PERTAMA JILID PERTAMA
Untuk mengambil nilai data yang sesuai dengan nilai pada setiap kolom tabel, kita dapat menggunakan method getXXX (sebagai contoh, getInt, getString, getDouble, dan sebagainya). JDBC API menawarkan 2 cara untuk mengidentifikasikan kolom yang digunakan oleh method getXXX untuk mengambil sebuah nilai. Cara pertama adalah dengan memberikan nama kolomnya, yang kedua adalah dengan memberikan indeks dari kolomnya.
Potongan program berikut ini merupakan contoh untuk mengambil nilai dari kolom nama_mjh dan harga dari tabel majalah. String query = ―select nama_mjh, harga from majalah‖;
Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query);
while(rs.next()){
String nama = rs.getString(―nama_mjh‖); int harga = rs.getInt(‖harga‖);
System.out.println(nama + ‖
‖ + harga);
Atau kita dapat menuliskan seperti berikut : String query = ―select nama_mjh, harga from majalah‖;
Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query);
while(rs.next()){
String nama = rs.getString(1); int harga = rs.getInt(2);
System.out.println(nama + ‖
‖ + harga);
JDBC Driver harus mengkonversi antara tipe data pada database dan tipe data yang sesuai pada Java untuk setiap method getXXX. JDBC Driver tidak memperbolehkan kita melakukan konversi yang tidak benar (sebagai
BAHASA PEMROGRAMAN 1 JILID PERTAMA JILID PERTAMA
Tabel : Konversi tipe data yang sering digunakan
Java Method SQL Type
TIME STAMP
getObject
Any type
Sebagai contoh, untuk mendapatkan ResultSet yang berisi record – record dari nama dan tanggal, kita dapat menggunakan method getString dan getDate. Listing program MengambilData.java di bawah ini memberikan contoh bagaimana menampilkan daftar nama majalah, nama penerbit, dan harganya dari tabel majalah dan penerbit diurutkan berdasarkan nama majalah. /*
*MengambilData.java@author anky */
import java.sql.*;
public class MengambilData{
public static void main(String[]args){
String url = ―jdbc:odbc:tokomajalah‖; String username = ―root‖;
String password = ―‖; Connection con;
Statement stmt; String query;
String namaMajalah, namaPenerbit; int harga, jmlMajalah;
try{
Class.fo rName(―sun.jdbc.odbc.JdbcOdbcDriver‖);
}catch(java.lang.ClassNotFoundException e){
System.err.print(―ClassNotFoundException : ―); System.err.println(e.getMessage());
} try{
con = DriverManager.getConnection(url, username, password);
stmt = con.createStatement(); BAHASA PEMROGRAMAN 1
//query untuk menampilkan nama majalah, nama penerbit, dan harganya JILID PERTAMA
query = ‖select nama_mjh, nama_pen, harga from majalah, penerbit‖+ ―where majalah.pen_id = penerbit.pen_id order by nama_mjh ASC‖;
Jika program MengambilData.java dijalankan, maka akan menampilkan hasil sebagai berikut :
DAFTAR MAJALAH DI TOKO MAJALAH
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Majalah : Java Mania Penerbit : Media Javatindo Harga : Rp. 7000,-
Majalah : Java Tips Penerbit : Media Javatindo Harga : Rp. 8000,-
Majalah : Sistem Informasi Penerbit : Pustaka Mediatama Harga : Rp. 9000,-
Majalah : Tren Ponsel Penerbit : Komputindo Media Mandiri Harga : Rp. 8000,- ______________________________________________________________________________________________________ Total Majalah = 5 Buah
Menghapus Data.
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Untuk menghapus data pada sebuah tabel, kita dapat menggunakan pernyataan SQL DELETE FROM dan mengirmkan ke database melalui JDBC API. Potongan program berikut merupakan contoh menghapus record pada tabel penerbit yang memiliki nomor identifikasi penerbit (pen_id) 200.
Connection con = DriverManager.getConnection(…);
Statement stmt = con.createStatement();
st mt.executeUpdate(―delete from penerbit where pen_id = ‗200‘ ―);
CATATAN :
Hati – hati dalam penggunaan perintah SQL DELETE FROM, sertakanlah keyword WHERE untuk memilih record – record mana yang akan dihapus.
Jika keyword WHERE tidak disertakan, maka akan menghapus semua record pada tabel tersebut…!!!!
Listing program MenghapusData.java merupakan contoh lengkap bagaimana menghapus record dari tabel penerbit. /*
*MenghapusData.java@author anky */
import java.sql.*;
public class MenghapusData{
public static void main(String[]args){
String url = ―jdbc:odbc:tokomajalah‖; String username = ―root‖;
String p assword = ―‖; Connection con;
Statement stmt; String query;
ResultSet rs; int jumlahRecord;
try{
Class.forName(―sun.jdbc.odbc.JdbcOdbcDriver‖);
}catch(java.lang.ClassNotFoundExcepton e){
System.err.print(―ClassNotFoundException : ―+e.getMessage());
try{
con = DriverManager.getConnection(url, username, password); stmt = con.createStatement();
//menambah data pada tabel penerbit stmt.executeUpdate(‖insert into penerbit ‖+
―values (200, ‗MediaJava Indonesia‘,‘Taman Sari No. 70‘, ‗Bandung‘, ―+ BAHASA PEMROGRAMAN 1
―‘Jawa Barat‘, ‗22550‘)‖);
JILID PERTAMA
//mengambil record setelah ditambah
Jika program MenghapusData.java dijalankan, maka akan menghasilkan tampilan seperti berikut :
BAHASA PEMROGRAMAN 1
JILID PERTAMA
Tabel Penerbit Sebelum Dihapus... Pen_ID
Nama Penerbit 101
Media Javatindo
49 Komputindo Media Mandiri 150
Pustaka Mediatama 200
MediaJava Indonesia
Tabel Penerbit Setelah Dihapus… Pen_ID
Nama Penerbit 101
Media Javatindo
49 Komputindo Media Mandiri 150
Pustaka Mediatama
Meng-update Data.
Untuk meng-update kolom pada suatu tabel, kita dapat menggunakan pernyataan SQL UPDATE dan mengirimkannya ke database. Potongan program berikut akan meng-update satu record pada tabel majalah yang kolom nama_mjh- nya ‘Java Mania‘ dengan mengisi nilai 75 pada kolom terjual.
String updateString = ―update majalah ―+
―set terjual = 75 ―+ ―where nama_mjh = ‗Java Mania‘ ―;
stmt.executeUpdate(updateString);
Program MengupdateData.java merupakan contoh program lengkap yang akan meng-update record pada tabel majalah yang nama_mjh- nya ‘Java Mania‘ dengan merubah nilai 75 pada kolom terjual dan kemudian menambahkan kolom total dengan kolom terjual.
BAHASA PEMROGRAMAN 1
JILID PERTAMA
2.