BAB 3

33
BAB 3 Akses Database Menggunakan DBPaket DBPaket adalah sebuah paket untuk melakukan akses database secara mudah dengan kelas yang sudah umum dipakai dalam perancangan database. Seperti objek koneksi, query, table, dan viewer (kelas untuk menampilkan data) alam bentuk baris dan kolom seperti JTable yang sudah dilengapi dengan fasilitas lebih. Dalam bab ini kita, Anda akan mempelajari penggunaannya untuk membuat sebuah aplikasi. III.1 Sekilas DBPaket Paket ini berisi objek dan kelas-kelas yang dipakai untuk keperluan akses ke dalam system database.Yang secara umum menggunakan objek ResultSet untuk melakukan manipulasi data, yang juga didukung dengan objek yang mengirimkan query dalam database. III.1.1 DriverConnection Kelas ini untuk menangani koneksi dengan driver DBMS, dan instant kelas ini akan selalu dibutuhkan oleh objek-objek yang terkait dengan database lainnya. Adapun metode yang sering dipakai, antara lain: setDatabaseName(String value) untuk menetukan nama database. setPassword(String value) untuk menentukan password account database, default=’admin’. setUserId(String value) untuk menentukan user id, default=’root’. setHostName(String value) untuk menentukan computer default=’localhost’. getConnection (String value) untuk mendapatkan instant koneksi (objek Connection). Bagi konfigurasinuser MySQL yang sama dengan kami, tentunya tinggal mengeset nama databasenya saja. III.1.2 DBTable Kelas ini diturunkan dari kelas DB, yang dikhususkan untuk menangani hubungan dengan sebuah tabel saja. Metode yang dimiliki dan diwarisi dari kelas nenek moyangnya, antaralain: setTableName(String value) untuk mengubah/menentukan nama table.

description

Scipts dasar

Transcript of BAB 3

Page 1: BAB 3

BAB 3

Akses Database Menggunakan DBPaket

DBPaket adalah sebuah paket untuk melakukan akses database secara

mudah dengan kelas yang sudah umum dipakai dalam perancangan database.

Seperti objek koneksi, query, table, dan viewer (kelas untuk menampilkan data)

alam bentuk baris dan kolom seperti JTable yang sudah dilengapi dengan fasilitas

lebih. Dalam bab ini kita, Anda akan mempelajari penggunaannya untuk membuat

sebuah aplikasi.

III.1 Sekilas DBPaket

Paket ini berisi objek dan kelas-kelas yang dipakai untuk keperluan akses ke

dalam system database.Yang secara umum menggunakan objek ResultSet untuk

melakukan manipulasi data, yang juga didukung dengan objek yang mengirimkan

query dalam database.

III.1.1 DriverConnection

Kelas ini untuk menangani koneksi dengan driver DBMS, dan instant kelas ini

akan selalu dibutuhkan oleh objek-objek yang terkait dengan database lainnya.

Adapun metode yang sering dipakai, antara lain:

setDatabaseName(String value) untuk menetukan nama database.

setPassword(String value) untuk menentukan password account database,

default=’admin’.

setUserId(String value) untuk menentukan user id, default=’root’.

setHostName(String value) untuk menentukan computer default=’localhost’.

getConnection (String value) untuk mendapatkan instant koneksi (objek

Connection). Bagi konfigurasinuser MySQL yang sama dengan kami, tentunya

tinggal mengeset nama databasenya saja.

III.1.2 DBTable

Kelas ini diturunkan dari kelas DB, yang dikhususkan untuk menangani

hubungan dengan sebuah tabel saja. Metode yang dimiliki dan diwarisi dari kelas

nenek moyangnya, antaralain:

setTableName(String value) untuk mengubah/menentukan nama table.

setDriver(driverConnection value) untuk mendapatkan instance objek

DriverConnection

makeActive(Bolean value) untuk mengaktifkan data atau table.

getAutoNumberInt() untuk mendapatkan nomor urut otomatis secara urutan

angka naik berikutnya dari kunci primer table yang ditentukan. Tentu saja

urut dari data terakhir yang dimiliki.

locate(String wordFind) untuk mencari dan mengarahkan kursor pada record

tertentu.

Page 2: BAB 3

delete() untuk menghapus record yang aktif.

append() untuk menyiapkan record baru dalam table (saat menambah data).

edit() untuk menyunting atau edit data.

post() untuk menyimpan record yang ditamabahkan, yang diawali dengan

append atau edit().

updateString(String colomName, String value) untuk memasukkan data/value

(bertipe string) baru ke dalam table sebelum disimpan atau pemanggilan

post().

updateInt(String colomName, int value) untuk memasukkan data/value

(bertipe angka) baru ke dalam table sebelum disimpan atau pemanggilan

post().

getRowCount() untuk mendapatkan jumlah record.

next() untuk membaca data berikutnya.

cancel() untuk membatalkan operasi.

setRequesOperation() untuk mengubah mode operasi (append/edit).

setStrSql() untuk mengganti isi perintah SQL.

Absolute(int curRow) untuk mengarahkan record ke baris tertentu (dipakai

untuk menampilkan data record tertentu bisaanya saat mau mengedit).

III.1.3 DBQuery

Kelas ini hamper sama dengan DBTable (diturunkan dari kelas yang sama),

tetapi memiliki kelebihan khusus, yaitu mampu menjalankan perintahSQL (Insert,

Update dan Delete) melalui metode doQuery ( ). Tentu saja selain metode diatas,

komponen ini juga memiliki seluruh kemampuan nenek moyangnya, yaitu kelas DB.

III.1.4 MyTable

Komponen ini adalah sebuah container yang membuat kelas JScrollPanel dan

Jtable dengan model tabelnya adalah MyModelTable. Dengan kemampuan khusus

untuk menampilkan dari data database ke dalam bentuk table (tabular data)

dibungkus dalam satu kelas agar memudahkan dalam pengembangan dan

mengurasi kompleksitas program. Satu hal yang menarik lagi objek ini juga bisa

dipakai untuk input data sehingga tidak harus terhubung dengan sebuah objek

database. Beberapa propertu yang dimilkinya sebagai berikut:

setParent(javax.swing.Jpanel value) untuk menentukan lokasi objeknya.

setDB(DB value) untuk menentukan objek database yang akan ditampilkan.

RenameCol( int vCol, String vName) untuk mengubah nama field dalam table

ketika ditampilkan.

setColumnWidth(int[] value) untuk menentukan lebar kolom.

setShow(Boolean value) untuk menampilkan objek data ke dalam bentuk

table (perintah ini hanya perlu di lakukan pertama kali ketika formnya

dibuka). Selanjutnya untuk memperbaharui data tinggal dipanggil metode

refresh() saja.

32

Page 3: BAB 3

refresh() memperbaharui data dalam table sesuai dalam database.

getJTableObject() untuk mendapatkan instance dari objek Jtable, sehingga

Anda bisa melakukan objek tersebut dari luar kelas secara fleksibel.

getRowSelected() untuk mendapatkan nomor record yang aktif dalam

tampilan tabelnya, bukan dari databasenya.

getRowCount() untuk mendapatkan jumlah baris dalam table yang

ditampilakan.

Anda bisa mendapatkan distribusi yang siap pakai(dalam bentuk file jar) versi

terakhir secara gratis lewat http://bukujava2.jogjaspace.com, atau bisa didapatkan

dari bonus CD buku ini.

III.1.5 Sekilas ComboUI

Kelas ComboUI berada dalam paket UIObject.jar. Kelas ini adalah Combobox

yang membuat pilihat(list) dari database (terhubung ke database) secara otomatis.

Berikut ini property yang dimilikinya:

driver (DriverConnection) untuk menentukan objek driver databasenya.

columnList(Int) untuk menentukan field ke beberapa (dari table) yang aka

ditampilakan dalam pilihan tersebut.

queryList(String) untuk mengirimkan query agar pengambilan data dari

database ke dalam list lebih fleksibel.

objLinked yaitu instance kelas ini sendiri agar bisa berkomunikasi dengan

kelas yang serupa atau sama dengan dirinya sendiri.

isInFocus (boolean) ini bersifat readonly, agar tidak terjadi overflow ketika

masing-masing mengendalikan atau memerintahkan untuk mengganti pilihan

yang terpilih pada objek lainnya. Jadi, ketika ada objek terpilih, dia akan

memberikan perintah pada objek lain untuk menyesuaikan diri, tetapi objek

tersebut tidak perlu mengirim perintah balik pada objek yang member signal

pertama tadi. Begitu sebaliknya, kalau objek lainnya yang terpilih, maka objek

tersebut (yang tidak terpilih oleh user) harus menyesuaikan diri.Objek terpilih

itulah yang dimaksud dengan property isInfocus.

Berikut metode-metode yang dimiliki kelas ComboUI:

getInFocus untuk mengetahui objek tersebut objek tersebut terpilih atau

tidak.

setLinkedCombo untuk menentukan pasangan dengan objek lain.

ItemChanged untuk bisa merespon ketika user melakukan kegiatan memilih

pada kelas ini.

setResultSet dan getResultSet untuk memberikan atau memperoleh data dari

kelas ini.

setQueryList dan getQueryList untuk mengganti atau memperoleh perintah

query.

33

Page 4: BAB 3

setColumnList dan getColumnList untuk menentukan nilai nomor kolom yang

akan ditampilkan.

setDriver untuk menentukan koneksi databasenya.

iniCombo untuk mengaktifkan dan membuat isi pilihan (list).

ResetComboFill untuk memperbaharui pilihan.

getSelectedKey untuk memperoleh nilai kunci utama dari pilhan yang terpilih

(sangat berguna jika yang ditampilkan klom nama atau yang lain).

ToFocusGained dan ToFocusLost untuk memantau focus pada kelas ini.

III.2 Latihan Akses Database dengan DBPaket

Pada subbab ini di bicarakan teknik untuk menggunakan paket DBPaket mulai

dari pembuatan untuk form input, pencarian dan form transaksi yang melibatkan

data detail, misalkan memasukkan transaksi pembelian. Penekanan bab ini adalah

pengguna sebuah paket yang sudah ada.

III.2.1 Membuat Form Input

Form input digunakan untuk melakukan penyimpanan data. Data yang ada

berasal dari penguna yang akan memakai aplikasi tersebut. Sehingga from input

diupayakan mengikuti kaedah user interface yang friendly, yakni tampilan yang

mudah untuk dipahami dan mudah untuk dijalankan(pengguna) seta unsure

keindahan (art). Dalam hal ini, yang dikedepankan adalah aspek programming dan

standart design, pembaca bisa melakukan eksperimen yang lebih setelah

mempelajari latihan pada bab ini.

Berikut ini membuat desing form dengan memanfaatkan template yang sudah

disediakan NetBeans, lakukan langkah-langkah berikutL

1. Buat proyek baru, File New Project. Pilih Java pada kotak masukan Categories,

pilih Java Desktop Application pada kotak isian Projects, kemudian klik tombil

Next.

2. Pada langkah kedua (Name and Location), isikan nama proyeknya Proyek921

pada kotak masukan Project Name. Pilih Basic Application untuk masukan

Choose Application Shell, kemudian pilih Finish.

3. Pada saat pertama kali halaman proyek muncul, sudah terdapat tiga buah kelas,

yaitu Proyek921AboutBox, Proyek921App, Proyek921View.

34

Page 5: BAB 3

Gambar 9.1 Template Form NetBeans

4. Tambahkan sebuah menu dalam form menu tesebut, sisipkan di bawah menu file

dengan cara buka design kelas Proyek921View. Klik objek JMenuBar, perhatikan

jendela Inspector, klik kanan fileMenu Add From Palette Menu Item.

5. Setelah menu tersebut menempel pada menu File, angkat menu baru tersebut

dengan cara drag, sehingga sekarang menjadi di atas menu ‘Exit’.

6. Untuk mengganti nama menu tersebut, klik kanan melalui jendela Inspector. Klik

menu baru tersebut, kemudian menuju jendela Properties, pilih property text,

isikan ‘Input Pelanggan’.

7. Tambah sebuah form baru dengan cara klik kanan paket Proyek921New

JFrame Form. Beri nama kelas tersebut dengan

FrmPelangggan dan klik tombol Finish.

8. Sebelum melakukan program, buatlah sebuah database dan table dalam

database, beri nama databasenya bab9. Buat tabelnya dengan perintal SQL(pada

localhost/phpMyAdmin) berikut:

CREATE TABLE pelanggan (

kd_plg INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

nama_plg VARCHAR ( 30 ) NOT NULL,

alamat VARCHAR ( 30 ) NOT NULL

)

Setelah membuat database dalam phpMyAdmin, Anda bisa memasukkan query

diatas jendela query, atau membuat secara desing seperti dalam latihan

sebelumnya.

9. Tambahkan tiga buah Jpanel (atas, tengah, bawah), lima buah objel Jlabel, tiga

buah JtextField, dan sebuah JButton.

Gambar 9.2 Form Design Input Pelanggan

Tentunya pembaca sudah mampu membuat design sendiri, bahkan lebih

aktraktif. Jika Anda masih kesulitan, bukalah bab tentang Layout Manajer. Berikut

ini gambaran design form tersebut:

35

Page 6: BAB 3

set frame manjadi borderlayout, kemudian letakkan tiga buah JPanel pada posisi

Fist, Center, dan Last. Selanjutnya masukkan JLabel pada panel atas dan panel

bawah.

Atur panel atas dan panel bawah tesebut menjadi FlowLayout.

Selanjutnya tambahkan tiga buah JLabel dan tiga buah JTextField pada panel

tengah. Atur sedemikian rupa sehingga menjadi seperti form Gambar 9.2 .

10. Berikan nama variabelnya untuk kotak masukan nama = “txtnama”, dan kotak

masukan alamat= “txtalamat”. Untuk mengubah nama variabelnya, klik kanan

objeknya Change Variabel Name…

Gambar 9.3 Hierarki Objek Form FrmPelanggan

11. Kopi file DBPaket.jar dan jcalender-1.3.2.jar dari Cd buku ini (dalam folder com)

dan letakkan dalam director program Anda, untuk setting classpath.

12. Lakukan pemasangan classpath untuk DBPaket, melalui Project Properties,

dengan cara klik kanan Proyek921 Properties. Sehingga muncul jendela

Project Properties - Proyek921, pilih Libraries pada kotak Categories, selanjutnya

pada jendela sebelah kanan pilih tab Compile. Klik tombol Add Jar/Folder,

sehingga muncul jendela pemilihan file jar, pilih DBPaket.jar yang telah Anda

kopi sebelumnya.

13. Pasang juga JDBC MySQL, melalui menu Project Properties. Dalam node libraries,

pilih Add Library.

14. Tambahkan pada bagian Package Proyek921 seperti berikut:

import com.miftah.db.*;

import java.sql.SQLException;

15. Tambahkan metode untuk membersihkan form, letakkan di bagian paling bawah

sebelum ada tanda akhir kelas ( } ). Berikut ini metodenya:

private void clearForm(){

txtnama.setText("");

txtalamat.setText("");

}

36

Page 7: BAB 3

16. Tambahkan metode untuk melakukan pengecekan input nama pelanggan,

sedangkan alamat bersifat opsional tidak harus diisi. Letakkan metode ini

dibawah metode clearForm.

private boolean isValidInput(){

if (txtnama.getText()== "") {

Utils.showMessage(this,

"Masukkan Nama Pelanggan",

"Perhatian");

return false;

}else

return true;

}

17. Tambahkan sebuah eventklik tombol Simpan, dan masukkan kode program

seperti berikut:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)

{

// validasi

if (isValidInput()==false){

return;

}

//konfigurasi database;

DriverConnection dr= new DriverConnection();

dr.setDataBaseName("input");

dr.setUserId("root");

dr.setPassword("123456");

//setting tabel

DBTable tPel = new DBTable();

tPel.setDriver(dr);

tPel.setTableName("pelanggan");

//aktifkan tabel dan simpan

try

{

tPel.makeActive(true);

tPel.append();

tPel.updateString("Nama_Pelanggan",

txtnama.getText());

37

Page 8: BAB 3

tPel.updateString("Alamat",

txtalamat.getText());

tPel.post();

Utils.showMessage(this,"Penambahan Sukses",

"Informasi");

clearForm();

}

catch (SQLException e){

System.out.println(e);

}

}

Berikut penjelasan dari perintah –perintah tersebut:

Pertama kali adalah melakukan konfigurassi database menggunakan

DriverConnection. Selanjutnya objek table akan melakukan hubungan dengan table

fisik dalam database. Metode makeActive adalah untuk mengaktifkan table,

sedangkan metode append adalah untuk menyiapkan objek table ke dalam mode

penambahan data. Metode updateString (“<nama field>”,”<nilai yang akan

dikirim>”) adalah untuk memberikan nilai baru ke dalam field table. Selanjutnya

program diakhiri dengang metode post, perintah ini akan melakukan penyimpanan

data ke dalam table.

18. Buka form Proyek921View, buka menu Input Pelanggan, berikan even klik pada

menu tersebut dengan cara: klik kanan menu tersebut Events Action

actionPerformed. Lakukan modifikasi pada metode klik tersebut sehingga

menjadi sebagai berikut:

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent

evt) {

// TODO add your handling code here:

FrmPelanggan Form1= new FrmPelanggan();

Form1.setVisible(true);

}

Hal ini untuk membuka form Input Pelanggan, dengan cara menciptakan

instance FrmPelanggan ( new FrmPelanggan ), lalu melakukan perintah untuk

menampilkan dengan mengeset fasibilitasnya menjadi TRUE.

19. Lakukan kompilasi program, kemudian jalankan program dan buka menu Input

Pelanggan, masukkan nama dan alamatnya saja, kemudian klik tombol Simpan.

38

Page 9: BAB 3

Gambar 9.4 Menambahkan Data Pelanggan

Gambar 9.5 Form Ketika Menyimpan Data

III.2.2 Membuat Form Pencarian

Berikutnya membuat form untuk melakukan pencarian, maksudnya untuk

menampilkan data-data tertentu menggunakan sebuah criteria pencarian tertentu.

Misalnya tampilkan data pelanggan yang memiliki nama depan “Mariana” dan

sebagainya.

Untuk membuat latihan ini, cukup dengan membuka proyek latihan sebelumnya

(Proyek921). Kita nanti hanya menambahkan sebuah form baru pencarian

pelanggan, berikut langkah-langkahnya:

1. Buka Proyek921, kemudian buat form baru dengan cara klik kanan paket

Proyek921 New JFrame Form…, berikan nama kelasnya FrmCariPelanggan.

2. Buatlah desain form pencarian seperti Gambar 9.6.

Gambar 9.6 Design Form Pencarian Data Pelanggan

Jika Anda masih kesulitan, bukalah bab tentang Layout Manajer. Berikut ini

gambaran design form tersebut:

39

Page 10: BAB 3

Gambar 9.7 Hierarki Objek Form FrmCariPelanggan

3. Set frame utama menjadi Border Layout, dengan cara klik kanan JFrame pada

jendela Inspector Set Layout Border Layout.

4. Tambahkan tiga objek utama dari frame border layout tersebut, yaitusebuah

Jlabel pertama(jLabel1) dengan posisi/layout (Direction) = First, kemudian JPanel

dengan posisi Center, dan jLabel kedua (jLabel2) dengan posisi Last.

5. Ubah property text pada jLabel1=”Form Pencarian Pelanggan”, dan jLabel2=

“Masukkan nama pelanggan, kemudian klik tombol Cari”.

6. Lakukan setting layout pada JPanel1 tersebut menjadi Border Layout.

7. Tambahkan dua buah JPanel diatas JPanel1 sebelumnya, dengan Panel pertama

(JPanel2) pada posisi First, dan panel kedua (JPanel3) pada posisi Center.

8. Ubah nama variable JPanel3 (pada posisi Center) manjadi pGrid, dengan cara klik

kanan panelnya Change Variable Name…, kemudian ubah layoutnya menjadi

Border Layout, dengan cara klik kanan pGrid Set Layout Border Layout. Ini

adalah syarat mutlak untuk kelas ini, karena akan dipakai untuk tempat (parent

container) objek MyTable.

9. Ubah juga property preferredSize dari PGrid menjadi [400, 300]. Untuk inisial

panjang dan lebar objek, minimal adalah [11, 11]. Jika terlalu kecil, tidak akan

tampak dilayar. Ini juga syarat mutlak untuk diset. Jadi,ada dua property yang

harus dipenuhi untuk menjadi parent container (papan untuk meletakkan objek)

MyTable, yaitu set menjadi Border Layout panelnya dan isi preferredSize.

Pengaturan ini berhasil jika ada tanda bold pada property ini.

10.Tambahkan sebuah JLabel (jLabel3) di atas JPanel2 (panel First) dan ubah

property JLabel3 tersebut menjadi “Nama Pelanggan”.

11.Tambahkanlah sebuah jTextField di atas JPanel2 (panel First) dan ubah

variabelnya manjadi txtnama. Caranya , klik kanan Change Variable Name…,

kosonhkan property textnya, dengan cara klik kanan Edit Text dan hapus

textnya.

12.Tambahkan JButton diatas JPanel2 (panel First) dan ubah property text-nya

menjadi Simpan, dengan cara klik kanan Edit Text .

13.Masukkan dalam jendela Source dan masukkan sebuah metode untuk melakukan

inisial objek, berikut metodenya ;

private void initObject(){

try {

//setting driver

DriverConnection dr= new DriverConnection();

dr.setDataBaseName("input");

dr.setUserId("root");

40

Page 11: BAB 3

dr.setPassword("ana");

//setting DBQuery dan aktifkan dataset

qpelanggan = new DBQuery();

qpelanggan.setDriver(dr);

qpelanggan.setStrSql("select * from pelanggan");

qpelanggan.makeActive(true);

//setting tampilan dalam bentuk tabel

mytable = new MyTable();

//meletakkan mytable dalam panel pGrid

mytable.setParent(pGrid);

mytable.setDB(qpelanggan);

mytable.RenameCol(0, "ID");

mytable.RenameCol(1, "Nama Pelanggan");

mytable.RenameCol(2, "Alamat");

mytable.setColumnWidth(

new int[] {50,100, 150});

//tampilkan bentuk tabel

mytable.setShow(true);

}

catch (SQLException e){}

}

Letakkan metode ini sebelum adanya tanda akhir kelas [ } ], berikutini

penjelasannya. Objek dr melakukan inisialisasi koneksi database yang akan

dipakai oleh DBQuery

(qPelanggan). Setelah pelanggan aktif dan datasetnya (melalui sebuah query),

myTable diinisialisasi dan ditampilakn ke dalam form melalui panel pGrid.

14.Tambahkan sebuah event klik pada jButton 1 dengan cara klik kanan Event

Action actionPerformed, masukkan kode seperti berikut ;

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)

{

// TODO add your handling code here:

try {

qpelanggan.setStrSql(

"SELECT * FROM pelanggan where Nama_Pelanggan like ('%" +

txtNama.getText() + "%') " );

qpelanggan.makeActive(true);

mytable.refresh();

41

Page 12: BAB 3

}

catch (SQLException e) {}

}

Perintah qpelanggan.setStrSql tersebutuntuk memperbaharui isi perintah query-

nya sesuai dengan apa yang dimasukkan oleh user dalam input nama

pelanggan. Misalkan memasukkan “Mariana”, berarti bunyi query-nya menjadi :

SELECT * FROM pelanggan where Nama_Pelanggan like ('%Mariana%’)"

Ini berarti semua data pelanggan dengan nama yang terdapat karakter

“Mariana” baik di depan, belakang maupun di tengah, akan tampiul ke dalam

objek myTable.

Perintah qpelanggan.makeActive adalah untuk menjalankan query-nya,

sedangkan mytable.refresh untuk memperbaharui isi data ke dalam myTable

sesuai dengan data terbaru.

15.Buka form Proyek921View dan tambahkan sebuah menu dalam form menu

tersebut. Sisipka di bawah menu File dengan cara membuka design kelas

Proyek921View, klik objek menu JMenuBar pada form, perhatikan jendela

Inspector, klik kanan fileMenu Add from Palette Menu Item.

16.Setelah menu tersebut menempel pada menu File, angka menu beru tersebut

dengan cara drag, sehingga diatas menu Exit.

17.Untuk mengganti nama tersebut, klik kanan melalui jandela Inspector, klik pada

menu baru tersebut. Kemudian menuju pada jendela Properties, pilih property

text, isikan “Cari Pelanggan”.

18.Buka menu utama & tambahkan sebuah event klik pada menu “Cari Pelanggan”

sebelumnya dengan cara klik kanan menu tersebut Event Action

actionPerformed. Lakukan modifikasi pada metode klik tersebut sehingga mejadi

seperti berikut ;

private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent

evt) {

// TODO add your handling code here:

FrmPelanggan Form1= new FrmPelanggan();

Form1.setVisible(true);

}

Hal ini untuk membuka form Pencarian Data Pelanggan, dengan cara

menciptakan instance FrmCariPelanggan ( new FrmcariPelanggan ), lalu

melakukan perintah untuk menampilkan dengan mengeset fasibilitasnya menjadi

TRUE.

19.Kemudian laukan kompilasi (Clean and Build).

20.Jalankan program, dan masukkanbeberapa nama. Jika Anda mengosongkan

kotak masukan nama pelanggan maka akan ditampilkan semua data pelanggan.

Hal ini karena criteria adalah string kosong.

42

Page 13: BAB 3

Gambar 9.8 Tampilan Form Pencarian

III.2.3 Membuat Form Transaksi

Sebagai penutup dalam bab ini adalah latihan membuat sebuah form

transaksi yang melibatkan pemasukan data detail transaksi. Misalkan form

pembelian, penjualan, pemesanan, dan peminjaman. Secara umumn, form transaksi

tersebut memiliki detail data (sejumlah data item) yang harus disimpan sekaligus

pada saat user menkan tombol Simpan. Berikut ini sebuah contoh form pembelian,

yang melibatkan tiga buah table, yaitu table beli, detail_beli, dan barang. Berikut

adalah langkah-langkah untuk membuat latihannya :

1. Latihan ini menggunakan database sebelumnya, yakni bab9, kalau belum

membuat sebaiknya buat dahulu. Jika lupa caranya, Anda dapat membuka

kembali materi sebelumnya tentang pembuatan database.

2. Dalam database bab9 tersebut, buat table barang melalui perintah Query, baik

lewat command atau dari halaman pahMyAdmin:

CREATE TABLE barang (

kd_brg VARCHAR (3)NOT NULL AUTO_INCREMENT,

nama_brg VARCHAR (25) NOT NULL,

harga double NOT NULL,

PRIMARY KEY (kd_brg)

);

INSERT INTO barang values(

‘AL0’, ‘Alfa link EI458T’, 2500000);

INSERT INTO barang values(

‘NK0)’, ‘Nokia N5700’, 500000);

INSERT INTO barang values(

‘SM0’, ‘Printer Samsung’, 600000);

INSERT INTO barang values(

‘ST0’, ‘Stabilizer 45x Kasugawa’, 70000);

Perintah di atas dipakai untuk membuat table barang serta memasukkan

beberapa dat ke dalamnya, sehingga tidak perlu ada form pengisian barang

(input barang). Untuk membuatnya, kalian dapat mencontoh form input data

pelanggan yang sudah dibuat sebelumnya.

3. Masih dalam database bab9 juga, buat lagi table beli. Berikut ini perintahnya;

43

Page 14: BAB 3

CREATE TABLE beli (

faktur INT (11)NOT NULL AUTO_INCREMENT,

tgl date NOT NULL,

pembeli varchar (30) NOT NULL,

PRIMARY KEY (faktur)

)AUTO_INCREMENT=1;

Berikut keterangan field table tersebut : faktur adalah nomor transaksi, tgl

adalah tanggal transaksi pembelian, pembeli adalah untuk menyimpan nama

pembeli.

4. Masih dalam database bab9 juga, buat lagi table detil_ beli. Berikut ini

perintahnya :

CREATE TABLE beli (

faktur INT (11)NOT NULL AUTO_INCREMENT,

kd_brg VARCHAR (3)NOT NULL AUTO_INCREMENT,

harga double NOT NULL,

jumlah int(11) NOT NULL,

PRIMARY KEY (faktur,kd_brg)

);

Table ini dipakai untuk menyimpan data detail transaksi, karena ada lebih dari dari

stu record data pada setiap satu transaksi penyimpanan data pembelian ( untuk

satu record di table beli ). Field harga disimpan juga dalam table ini karena secara

umum, harga beliu bisa berubah-ubah setiap saat, sehingga setiap transaksi bahkan

dimungkinkan berbeda-beda. Maka tidak bisa hanya mengandalkan table barang

yang hanya menyimpan informasi harga yang berlakusaat ini ( up to date ). Jumlah

adalah banyaknya satuan barang dibeli. Untuk informasisubtotal dan total

pembelian tidak perlu disimpan dalam table ini, karena bersifat kalkutif ( bisa

dihasilkan dari perhitungan field yang ada), jadi bukan data yang sebenarnya.

Kunci utama ( primary ) dalam table ini adalah gabungan ( composite key ) dan

faktur dan kd_brg, yang artinya setiap gabungan field dari nomor faktur dan

kd_brg adalah bersifat unik.

5. Selanjutnya buatlah form baru ( JFrame Form), dengan nama FrmPembelian,

dengan cara klik kanan Proyek921 New JFrame From….

6. Kopi file UIObject.jar untuk ComboUI, yang mampu membuat list atau pilihan

secar otomatis dari database, dari [CD buku]/com ke computer Anda.

7. Lakukan setting classpath untuk DBPaket.jar, UIObject.jar, JDBC MySQL.

Gambar 9.10 Library Proyek

44

Page 15: BAB 3

8. Buat kelompokbaru dalam jendela Palette Netbeans, dengan cara klik menu

Tools Palette Swing/Awt Component, sehingga muncul jendela Palette

Manager.

9. Dalam jendela Palette Manager tersebut, klik tombol New Category, masukkan

kategorinya MyCombo, lalu klik tombol OK. Dengan cara tersebut, category baru

tersebut masuk ke dalam Palette Content.

Gambar 9.11 Kategori Baru

10.Masih dalam jendela Palette Manager, klik tombol Add Form Jar, sehingga

muncul jendela Install Components To Palette.

11.Pada jendela Install Components To Palette, pada langkah (1) pemilihan file jar-

nya, pilih UIObject.jar dalam computer Anda. Klik tombol Next ,sehingga muncul

jendela langkah kedua (2).

Gambar 9.12 Pemilihan UIObject.Jar

12.Pada langkah kedua (Choose the Components to Add to the Palette ), pilih

ComboUI pada kotak Available Components, lalu klik tombol Next, sehingg

muncul jendela langkah tiga (3).

Gambar 9.13 Pemilihan Komponen

13.Pada jendela langkah ketiga ( untuk memilih kategori), pilih My Combo pada

kotak Palette Categories, dan klik tombol Finish.

45

Page 16: BAB 3

Gambar 9.14 Pemilihan Letak Kategori

Gambar 9.15 Tanda Komponen Sudah Terpasang

14.Selanjutnya rancang sebuah form seperti Gambar 9.16

Gambar 9.16 Design Form Pembelian

Berikut penjelasan Pembuatan Form di atas

Anda bisa menggunakan kemapuan layout manajer dalam java. Kali ini akan

dicontohkan tanpa layout manajer agar penjelasan tidak rumit. Tambahkan

tiga buah panel utama pada form jPanel1 (paling atas), jPanel2 (tengah),

jPanel3 ( bawah) dan sebuah JButton (letakkan paling bawah) untuk menjadi

penyimpanan transaksi. Ubah variable jButton tersebut manjadi bSimpan, dan

textnya Simpan Trnasaksi.

Pada panel atas, tambah tiga buah JLabel dan tiga buah JTextField. Ubah

variabelny menjadi txtFaktur, txtTgl, dan txtPembeli, dan sesuaikan label

masing-masing.

Pada panel tengah tambahkan empat buah JLabel dan dua buah ComboUI,

dua buah JTextField, dan sebuah JButton (untuk menambahkan item ke

dalamdaftar pembelian/detail). Ubah variable kedua ComboUI tersebut

46

Page 17: BAB 3

menjadi cmbKode dan cmbNama. Ubah variable kedua JTextField tersebut

menjadi txtHarga, txtjumlah. Ubah variable JButton menjadi bTambah, dan

sesuaikan masing-masing labelnya.

15.Set Layout JPanel3 (bawah) menjadi border layout. Caranya , klik kanan JPanel3

Set Layout Border Layout.

Gambar 9.17 Hierarki Objek Form Pembelian

16.Masuk dalam jendela Source, dan masukkan kode sebagai berikut dalam

Package Proyek921 ;

import com.miftah.db.*;

import java.sql.SQLException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Vector;

17.Tambahkan property form ini, yaitu pada bagian deklarasi property. Berikut ini

kodenya (ketik yg dicetak tebal saja);

public class FrmTransaksi extends javax.swing.JFrame {

private DriverConnection driverCon;

private DBTable tBeli;

private DBTable tDetil_Beli;

private DBTable tBarang;

private MyTable mytable;

18.Tambahkan metode untuk melakukan inisialisasi objek. Berikut kodenya;

private void inisialObjek() {

try {

//tampil tgl

Date current = new Date();

SimpleDateFormat frmtl =

new SimpleDateFormat("dd/MM/yyyy");

String dateString1 = frmtl.format(current);

txtTgl.setText(dateString1);

47

Page 18: BAB 3

//settibg driver

driverCon = new DriverConnection();

driverCon.setDataBaseName("transaksi");

driverCon.setUserId("root");

driverCon.setPassword("123456");

//memasang tabel beli

tBeli = new DBTable();

tBeli.setDriver(driverCon);

tBeli.setTableName("beli");

tBeli.makeActive(true);

//memasang tabel detil_beli

tDetil_Beli=new DBTable();

tDetil_Beli.setDriver(driverCon);

tDetil_Beli.setTableName("detil_beli");

tDetil_Beli.makeActive(true);

//memasang tabel barang

tBarang=new DBTable();

tBarang.setDriver(driverCon);

tBarang.setTableName("barang");

tBarang.makeActive(true);

//menyeting MyTable (detil data)

mytable = new MyTable();

mytable.setParent(jPanel3);

//membuat kolom header

Vector kol = new Vector();

kol.add("Kd brg");

kol.add("Nama Barang");

kol.add("Harga");

kol.add("Jumlah");

kol.add("Subtotal");

//memasang kolom header

mytable.setColumnNames(kol);

//memasang lebar kolom

mytable.setColumnWidth(

new int[] {50, 100, 50, 50, 50});

//menampilkan header tabel

48

Page 19: BAB 3

mytable.setHeader();

}

catch (Exception e) {

System.out.println("error:"+e);

}

}

Tuliskan metode ini pada bagian paling bawah, tetapi sebelum tanda akhir kelas

“}”. Selanjutnya untuk kode lain bisa Anda tuliskan di bawah metode ini.

19.Tambahkan metode untuk pilihan pada cmbKode dan cmbNama. Berikut

kodenya ;

void creatingCombo(){

//inisial driver

cmbKode.setDriver(driverCon);

cmbKode.setQueryList("select * from barang");

//mengisi pilihan/list

cmbKode.iniCombo();

//mengkopi dataset

cmnama.setResultSet(cmbKode.getResultSet());

//menentukan pilihan pada nama

cmnama.setColumnList(2);

cmnama.iniCombo();

//menentukan link objek

cmbKode.setLinkedCombo(cmnama);

cmnama.setLinkedCombo(cmbKode);

}

Metode tersebut membuat pilihan dalam combobox.

20.Buat metode untuk membersihakan input utama yaitu text pembelian dan isi

dalam list barang (dalam myTable). Berikut kodenya ;

private void clearInput(){

txtPembeli.requestFocus();

txtPembeli.setText("");

mytable.removeAllRows(); }

requestFocus adalah untuk mengarahkan focus pada objek tertentu dalam hal ini

focus ke dalam txtPembeli.

21.Buat metode membersihkan input detail barang, yaitu ketika di tekan tombol

Tambah, maka yang dibersihkan hanya input barang atau detail. Jadi, tidak

membersihkan semua masukan pada form ini. Berikut kodenya ;

private void clearInputDetail(){

49

Page 20: BAB 3

cmbKode.setSelectedIndex(-1);

cmnama.setSelectedIndex(-1);

txtJumlah.setText("");

txtharga.setText("");

}

22. Selanjutnya sisipkan pemanggilan beberapa metode saat inisialisasi objek form

dilakukan. Berikut kodenya (tulis dicetak tebal);

public FrmTransaksi() {

initComponents();

inisialObjek();

creatingCombo();

clearInput();

clearInputDetail();

}

23.Tambahkan sebuah metode untuk mengecek data barang yang akan di

masukkan dalam daftar barang pembelian, apakah item tersebut sudah ada

dalam daftar atau barang. Berikut ini metodenya ;

private boolean isAlreadyItem(String item) {

int totalrecord = mytable.getRowCount();

boolean result = false;

for (int i=0 ; i>totalrecord; i++) {

if (item.equals(mytable.getData(i, 0).toString()))

result=true;

}

return ! result;

}

equals() adalah untuk mengecek kesamaan (identik) dalam bentuk objek

apapun, sehingan kalau item yang baru (item) ternyata ada yang sama, maka

akan menghassilkan nilai logik True. Akan tetapi, di akhir metode terdapat

pembalikan hasil logik, yaitu return ! result. Artinya jika menghasilkan logik True

(sudah ada dalam daftar), maka akan diberikan nilai False dari segi validasinya

( artinya data baru tersebut tiidak valid).

24.Buat metode baru untuk melakukan pengecekan terhadap data yang akan di

masukkan secara keseluruhan. Kode adalah;

private boolean isInputDetilValid(){

boolean result=false;

String strNote="";

try {

if ( (cmbKode.getSelectedItem().equals("")) ||

50

Page 21: BAB 3

(Integer.parseInt(txtJumlah.getText()) < 1)

) {

cmbKode.requestFocus();

result=false;

}

else result =true;

if (result==true){

result=isAlreadyItem(

cmbKode.getSelectedItem().toString());

strNote=", (Barang tersebut sudah ada)";

}

if (result==false)

Utils.showMessage(this,

"Data belum valid" + strNote,

"INFORMASI");

} catch (Exception e){

Utils.showMessage(this,

"Masukkan Barang dengan Benar ",

"Perhatian");

return false;

}

return result;

}

Metode ini melakukan pengecekan terhadap input yang dimasukkan, yaitu kotak

masukan kode barang, nama barang, dan jumlah barang yang dimasukkan.

Selanjutnya memanggil metode isAlreadyItem untuk memastikan tidak terjadi

duplikasi data dalam daftar barang.

25.Selanjutnya perlu membuat metode untuk mengecek input keseluruhan,

sebelum data disimpan melalui tombol Simpan Transaksi. Kodenya adalah;

private boolean isInputValid (){

boolean result=true;

int intRow=mytable.getRowCount();

if ( (intRow<1) ) {

cmbKode.requestFocus();

result=false;

}

else result =true;

51

Page 22: BAB 3

if (result==false)

Utils.showMessage(this,

"Silahkan Menambahkan Barang","INFORMASI");

return result;

}

Metode tersebut untuk melakukan pembacaan jumlah barang yang sudah

dimasukkan dalam daftar barang(myTable), melalui metode getRowCount.

26.Buat metode baru untuk melakukan operasi penyimpananke database. Kodenya

adalah;

private void save() throws SQLException{

try {

//menciptakan Transaction

//membuat sesi baru

driverCon.getConnection().setAutoCommit(false);

//mendapatkan nomor otomatis selanjutnya

//untuk menyimpan tabel detil

String nextId = String.valueOf(

tBeli.getAutoNumberInt());

//menambah data baru

tBeli.append();

//buat tgl dari java.Utils.Date

Date current = new Date();

SimpleDateFormat frmtl=

new SimpleDateFormat("yyyy-MM-dd");

String dateString1= frmtl.format(current);

//konfersi tgl ke bentuk SQL.Date

java.sql.Date dt;

dt=java.sql.Date.valueOf(dateString1);

//isikan data

tBeli.updateDate("tgl", dt);

tBeli.updateString("pembeli",

String.valueOf(txtPembeli.getText()));

52

Page 23: BAB 3

//simpan data beli

tBeli.post();

//pembelian_detil

int totalRecord=mytable.getRowCount();

for (int i=0; i<totalRecord; i++){

tDetil_Beli.append();

tDetil_Beli.updateString("Faktur", nextId);

tDetil_Beli.updateString("Kode_barang",

(mytable.getData(i, 0).toString()) );

tDetil_Beli.updateDouble("Harga",

Double.parseDouble(

mytable.getData(i, 2).toString()));

tDetil_Beli.updateDouble("Jumlah",

Integer.parseInt(

mytable.getData(i, 3).toString()));

tDetil_Beli.post();

}

//melakukan Commit

driverCon.getConnection();

}

catch (SQLException sqle) {

//membatalkan transaction

driverCon.getConnection().rollback();

System.err.println(sqle);

}

}

Metode tersebut melakukan penyimpanan menggunakan konsep Transaction,

karena melakukan operasi penyimpanan yang melibatkan lebih dari satu table,

yakni menyimpan ke table beli dan detail_beli sekaligus untuk satu kali proses

pembelaian. Hal tersebut akan sangat berbahaya jika terjadi kegagalan

penyimpanan pada salah satu table, karena ada missing relasi, yakni hilangnya data

master (table beli) atau hilangnya detail pembelian (detail_beli).

Selanjutnya setelah proses penyimpanan data selesai, dilakukan commit, yaitu

penyimpanan secara pemanen ke dalam database. Jika terjadi kesalahan dalam

prosesnya, secara otomatis pada bagian exception akan dijalankan perintah untuk

membatalkan semua proses penyimpanan dengan rollback. Ini adalah mekanisme

paling mendasar dalam operasi database. Jika anda terbisaa dengan program tanpa

transaction, sebaiknya Anda berpikir ulang, karena hal itu akan fatal akibatnya.

53

Page 24: BAB 3

27.Tambahkan sebuah event ItemStateChange pada cmbKode, dengan cara klik

kanan Event Item ItemStateChange, dan masukkan beberapa statement

seperti berikut ;

private void cmbKodeItemStateChanged(java.awt.event.ItemEvent evt) {

// TODO add your handling code here:

try {

if (tBarang.locate(

cmbKode.getSelectedItem().toString())) {

txtharga.setText(tBarang.getString("harga"));

}

}

catch ( Exception e) { }

}

Ketika terjadi perubahan pada item/pilihan dari objek cmbKode, maka event ini akan

dikerjakan.locate adalah untuk mengarahkan kursorpada record yang dituju (dicari)

berdasarkan item yang terpilih pada cmbKode. Sehingga ketika menampilkan data

harga barang yang ditampilkan melalui cmbKode.

28.Tambahkan sebuah event klik pada JButton ( bTambah) seperti berikut :

private void bTambahActionPerformed(java.awt.event.ActionEvent evt)

{

// TODO add your handling code here:

if (isInputDetilValid()==true) {

//membuat objek array lima element

Object[] data= new Object[5];

//mendapat nilai Double harga

double thePrice =

Double.parseDouble(txtharga.getText());

//mendapatkan nilai Integer jumlah

int theQuantity = Integer.parseInt(txtJumlah.getText());

//mengisi element array

data[0] = cmbKode.getSelectedItem().toString();

data[1] = cmnama.getSelectedItem().toString();

data[2] = new Double(thePrice);

data[3] = new Integer(theQuantity);

data[4] = new Double(thePrice * theQuantity);

//memasukkan data dalam mytable

54

Page 25: BAB 3

mytable.addRow(data);

//membersihkan input barang

clearInputDetail();

//fokus ke kombo kode

cmbKode.requestFocus();

}

}

Metode tersebut adalah untuk menambahkan item barang pada myTable (daftar

barang pembelian), yang sebelumnya dilakukan validasi dahulu dengan

memanggil metode isInputDetailValid.

29.Yang terakhir adalah menambahkan event pada JButton bSimpan. Kodenya

adalah :

private void bSimpanActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

if (isInputValid()==true)

try {

save();

} catch ( SQLException ex) {

}

Utils.showMessage(this,"Data Telah Tersimpan", "INFORMASI");

clearInput();

clearInputDetail();

}

Metode ini untuk menyimpan semua informasi tentang pembelian dalam

transaksi form.

30.Selanjutnya lakukan kompilasi. Apabila anda mengalami kesulitan silahkan dicek

lagi dalam langkah-langkahnya. Kemudian dicek dan dilihat isi pesan kesalahan

yang ditampilkan dalam jendela output,

31.Jika sudah bisa dijalakan, coba masukkan beberapa data, lalu perhatikan

hasilnya dalam database And.

55

Page 26: BAB 3

Gambar 9.18 Memasukkan Data Pembelian

Gambar 9.18 Konfigurasi Ketika Data Barang Belum Valid

Gambar 9.20 Informasi Input data Sukses

56