BAB 3
-
Upload
calvinders -
Category
Documents
-
view
218 -
download
0
description
Transcript of 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.
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
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
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
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
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
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
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
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
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
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
}
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
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
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
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
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
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
//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
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
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
(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
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
//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
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
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
Gambar 9.18 Memasukkan Data Pembelian
Gambar 9.18 Konfigurasi Ketika Data Barang Belum Valid
Gambar 9.20 Informasi Input data Sukses
56