Minggu, 07 Desember 2014

Pembuatan Laporan dengan IREPORT


Oke, kali ini postingan terakhir untuk praktikum Desain Basis Data, step selanjuntnya semoga bisa lanjut dengan postingan-postingan materi tentang dunia IT, (*semoga). Meskipun dengan kondisi  situasi yang berbeda dengan yang sebelum-sebelumnya, yang penting kita harus selalu share ilmu.oke..!!!

Pembahasan sabtu ini, tentang pembuatan laporan dengan IREPORT menggunakan pemrograman bahasa java, yang dipakai kali ini yaitu Netbeans. Oiya, cari tahu dulu apa sih IREPORT itu ?. ireport adalah program open source yang biasanya dipake untuk mencetak laporan dengan parameter. dan apa itu jasper. Jasperreports itu adalah reporting engine yang sangat bagus dari open source. JasperReports ini bisa menghasilkan format laporan CSV, Excel, HTML, PDF.

Jumat, 28 November 2014

Koneksi PostgreSQL pada Java (Netbeans)




Baiklah teman-teman semua..

See me again with all of my assignment.. ya you know that, right?? About DBD. Sekarang kita bakalan bahas tentang membuat "koneksi postgresql ke java (netbeans)". Langsung aja ya..

Langkah-langkah yang musti kita lakukan sebelum mengkoneksikan postgresql ke netbeans, ada beberapa langkah umum yang bisa membuat netbeans terhubung dengang database server, begini  :
  1. Impor package java.sql
    Kenapa ? karena di dalam package java.sql itu ada kelas-kelas yang bakalan dipake waktu proses berinteraksi sama database server, misal : KelasDriverManager, Connection, maupun ResultSet. Kalo nggak ngimpor package java.sql, nnti bakalan gagal buat ngompile javanya. listingnya begini : impor java.sql.*;
  2. Memanggil Driver JDBC
    Driver itu library yang dipakai untuk komunikasi sama database server. Driver dari tiap database itu berbeda-beda, jadi musti menyesuaikan Driver JDBC nya yang sesuai sama database server yang dipakai. seperti ini listingnya :
    Class.forName(NamaDriver); atau (Class.forName(namaDriver).newInstance();

    Kedua Listing punya fungsi yang sama yaitu meregistrasi class driverdan melakukan instansi.

    Daftar nama-nama driver dari beberapa database server  yang sering dipakai







  3. Membangun Koneksi
    Objek koneksinya kita pake dengan membuat class DriverManager dengan method getConnection().
    Connection koneksi = DriverManager.getConnection(<argumen>);

    Untuk nanganin eror ditambahin try-catch. Nih listingnya :
    try {
    ... koneksi database
    } catch (SQLException sqle){
    ... penanganan error koneksi }

    Berikut ini ada daftar penulisan URL dari ebberapa database server

     
  4. Buat Statement
    Statement yang ada secara umum digunakan terdiri dari berikut :
    a.)  StatementI
    Ini dibuat dengan methode Connection.createStatement(). Object Statement dipakai untuk pengiriman statement SQL tanpa parameter serta Setiap SQL statement yang dieksekusi dikirim secara utuh ke database. Statement stat = Connection.createStatement(); 
    b.)  PreparedStatement
    Ini dibuat oleh methode Connection.prepareStatement(). Object PreparedStatement digunakan untuk pengiriman statement SQL dengan atau tanpa parameter. Interface ini memiliki performa lebih baik dibandingkan dengan interface Statement karena dapat menjalankan beberapa proses dalam sekali pengiriman perintah SQL, pengiriman selanjutnya hanya parametered querynta saja. PreparedStatement stat = Connection.prepareStatement();
  5. Melakukan Query
    Abis punya objek statement, kita bisa pakai untuk mengirim perintah SQL dan ngeksekusi. Metode eksekusi terbagi jadi dua ,yaitu untuk perintah SELECT = executeQuery(), nilai kembalinya = ResultSet, sedangkan untuk perintah INSERT, UPDATE, DELETE = executeUpdate().
  6. Nutup Koneksi
    Kenapa msuti nutup koneksi ? karena ini akan berpengaruh pada sumber daya yang dipakai oleh object connection , agar bisa dipakai lagi sama program lain. seperti ini statementnya menutup object statement  :
    statement.close();

    Untuk nutup koneksinya sendiri dengan database server :
    connection.close();

    Dibawah ini ada langkah-langkah Koneksi Database dengan Java Netbeans :
  1. Buat projek baru pada netbeans
  2. Di projek tsb klik tanda panah
  3. Klik kanan pada libraries ,trus pilih add library
  4. Di Add library, pilih Java DB Driver
  5. Pilih add library lagi, klik kanan trus pilih add JAR/Folder
  6. Browse file konektor Postresql 
  7. Ambil file konektor, misal :  postgresql-9.0-801.jdbc4.jar atau versi yang lain ya boleh.
  8. Setelah itu Open
  9. Ok
  10. Seperti ini nantinya

  11. Di atas udah ada driver javaDB dan jdbc.jar

    Sudah selesai, setelah itu bisa dilanjutin buat kelas.

    *) HASIL PRAKTIKUM

  1.  Buatlah koneksi seperti contoh listing kode diatas dengan database kalian masing2




         





    2.  Buatlah form pada netbeans dan buatlah tombol insert, update, delete, tampil dan pencarian seperti dibawah.


seperti ini hasilnya ..


3.  Buat Event tiap tombol seperti contoh listing diatas dengan catatan memakai database praktikan sendiri dan menggunakan tabel mahasiswa. Untuk tampil, data munculkan pada jtabel atau text area.

 
gambar1.1 tombol cari

kita coba cari mahasiswa yang nim nya 18. begini jadinya ..

 gambar1.2 tabel cari

Setelah itu ke tombol simpan

 
menuju ke aksi tombol edit, kaya begini..



Setelah itu ke tombol hapus..



 Tombol Tampil..


nah, yang terakhir kita aksikan RESET..


4. Buatlah seperti nomor 2. Dengan aturan terdapat kelas koneksi sendiri sehingga tidak menulis ulang pemanggilan driver jdbc, url, dan koneksi nya pada saat insert,update, delete dan tampil data.

Sebelumnya kita lihat dulu tampilan tablenya, meskipun sama tapi saya buat berbeda di sisi warnanya


kita lihat tampilan kodingannya, berbeda dengan yang nomer 3, kita ngga perlu nulis ulang pemanggilan driver nya


sebelumnya kita ketik listingannya untuk ngoneksiin
public class soalke4 extends javax.swing.JFrame {
    koneksi_postgre e = new koneksi_postgre(); 


untuk yang tombol CARI..

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                       
       String a = txtnim.getText();
       try {
           Statement statemen = e.conn.createStatement();
           String sql = "select*from mahasiswa nim_mah = '" + a + "';";
           ResultSet rs= statemen.executeQuery(sql);
           if (rs.next()){
               txtnim.setText(rs.getString(1));
               txtnama.setText(rs.getString(2));
               txtalamat.setText(rs.getString(3));
               txtnoTelp.setText(rs.getString(4));
               cbkode.setSelectedItem(rs.getString(5));
               if (rs.getString(6) == "L"){
                   rbA.setSelected(true);
              } else {
                   rbB.setSelected(true);
               }
           }else {
               JOptionPane.showMessageDialog(null, "Data tidak ditemukan");
           }
           statemen.close();
           JOptionPane.showMessageDialog(null,"Data ditemukan");
       } catch (Exception ex){
           System.out.print(ex);
       }
     
    }                                        


Begini tampilannya ..

Untuk tombol SIMPAN..

listingannya :
 private void jbsimpanActionPerformed(java.awt.event.ActionEvent evt) {                                        

        String nim = txtnim.getText();
        String nama = txtnama.getText();
        String alamat = txtalamat.getText();
        String noTelp = txtnoTelp.getText();
        String kode = (String)cbkode.getSelectedItem();
        String gender = "";
        if (rbA.isSelected()){
            gender = "Laki-Laki";
        }else if(rbB.isSelected()){
            gender = "Perempuan";
        }
        try{
           Statement statemen = e.conn.createStatement();
           String sql = "insert into mahasiswa values ('" + nim + "', '" + nama + "', '" + alamat + "', '"+ noTelp +"', '"
                   + kode + "', '" + gender + "')";
           statemen.executeUpdate(sql);
           statemen.close();
           JOptionPane.showMessageDialog(null, " DATA MAHASISWA tersimpan");
        }catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Maaf, DATA MAHASISWA belum tersimpan"+ e);
        }
        // TODO add your handling code here:
    }                                       


Hasilnya ..

Untuk Tombol EDIT
Listing :

 private void jbeditActionPerformed(java.awt.event.ActionEvent evt) {                                      
       
        String nim = txtnim.getText();
        String nama = txtnama.getText();
        String alamat = txtalamat.getText();
        String noTelp = txtnoTelp.getText();
        String kode = (String)cbkode.getSelectedItem();
        String gender = "";
        if (rbA.isSelected()){
            gender = "Laki-Laki";
        }else if(rbB.isSelected()){
            gender = "Perempuan";
        }
        try{
           Statement statemen = e.conn.createStatement();
           String sql = "update mahasiswa set nama_mah ='" + nama + "', alamat_mah='" + alamat + "', no_Telp='" + noTelp
                   + "', id_fak='"+ kode +"', gender='"+ gender + "' where nim_mah='" + nim+"'";
           statemen.executeUpdate(sql);
           statemen.close();
           JOptionPane.showMessageDialog(null, "DATA MAHASISWA teredit");
        }catch (Exception e){
            JOptionPane.showMessageDialog(null, "Maaf, DATA MAHASISWA tidak teredit" + e);
        }
        // TODO add your handling code here:
    }                                     


Begini hasilnya..                         



Untuk tombol HAPUS..
Listing :
private void jbhapusActionPerformed(java.awt.event.ActionEvent evt) {                                       

        String nim = txtnim.getText();
        try{
           Statement statemen = e.conn.createStatement();
           String sql = "delete from mahasiswa where nim_mah'"+ nim + "'";
           statemen.executeUpdate(sql);
           statemen.close();
           JOptionPane.showMessageDialog(null, "DATA MAHASISWA terhapus");
        }catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Maaf, DATA MAHASISWA tidak bisa terhapus");
            // TODO add your handling code here:
         }
    }                                      


Hasilnya



Untuk Tombol TAMPIL
Listing :

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

        String nim = "";
        String nama = "";
        String alamat = "";
        String noTelp = "";
        String kode = "";
        String gender = "";
        try{
           Statement statemen = e.conn.createStatement();
           String sql = "select*from mahasiswa ";
           ResultSet rs= statemen.executeQuery(sql);
           while (rs.next())
           {
              nim = rs.getString("nim_mah");
              nama = rs.getString("nama_mah");
              alamat = rs.getString("alamat_mah");
              noTelp = rs.getString("no_telp");
              kode = rs.getString("id_fak");
              gender = rs.getString("gender");
              TAhasil.append("NIM : "+ nim + "\nNAMA : "+ nama + "\nALAMAT : "+ alamat +"\nNo.Telpon : " + noTelp
                      +"\nKode_FAKULTAS : "+ kode+"\nGENDER : "+ gender+"\n\n");
           }
           statemen.close();
        }catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Maaf, coba lagi ");
        }
            // TODO add your handling code here:
    }              


Hasilnya :

Nah, terakhir giliran tombol RESET
Listing :
private void jbresetActionPerformed(java.awt.event.ActionEvent evt) {                                       

        txtnim.setText(null);
        txtnama.setText(null);
        txtalamat.setText(null);
        txtnoTelp.setText(null);
        jbtampil.setText(null);
        // TODO add your handling code here:
    }                   


seperti ini hasilnya :



          *) KESIMPULAN

             
Dalam mengkoneksikan postgresql dengan java netbeans, terdapat banyak langkah-langkah yang musti kita lakukan. seperti yang terlihat di atas postingan ini. Kita juga musti memanggil driver JDBC, agar bisa terhubung ke database server.

          *) MANFAAT

             
Kita bisa tahu cara penggunaan database postgresql dan bahasa pemrograman java untuk membuat suatu program aplikasi. Semoga bermanfaat untuk kalian, teman-teman.

          *) DAFTAR PUSTAKA

Musthafa, Aziz.Modul Praktikum Desain Basis Data.Malang

Senin, 17 November 2014

Pemahaman dan Penggunaan Fungsi serta PL/PGSQL


 Fungsi dan PL/PGSQL

Dalam database terdapat fungsi-fungsinya, fungsi SQL di sini itu adalah sebuah kumpulan query, biasanya query yang detail dan panjang dan djadikan satu, abis itu disimpen ke database, nah kalo waktu mau kita pakai, kita cuma langsung ngakses nggak perlu ngetik lagi. Ada juga konsep yang menarik dari si FUNGSI, apa itu ?
  1. Bahasa yang dipakai itu bisa didefinisikan sendiri dengan adanya LANGUAGE, tanpa harus      mengkompilasi ulang PostgreSQL 
  2. Kita bisa buat dua fungsi dengan nama yang sama, tapi parameter dan tipe data maupun jumlahnya berbeda.

Ada beberapa faktor yang patut diperhatin juga, guys :
1. Nama Fungsi
2. Nomor dari fungsi argument
3. Tipe data dari setiap argument
4. Tipe dari hasil fungsi
5. Fungsi action
6. Bahasa yang dipakai sama fungsi action

Langsung aje kita lihat contoh pembuatan fungsi SQL untuk operasi penjumlahan dan perkalian dari tiga variable di bawah ini :

db_personal=> CREATE FUNCTION perkalian (FLOAT, FLOAT, FLOAT)
db_personal-> RETURNS FLOAT
db_personal-> AS ‘SELECT ($1 + $2) * $3;’
db_personal-> LANGUAGE ’sql’;
CREATE

db_personal=> SELECT perkalian (10,10,10);
perkalian
———–
200
(1 row)
====================================
Fungsi PL/PGSQL

PL/PGSQL ini bahasa lainnya untuk buat fungsi, biasanya dipakai sama bahasa yang lebih kompleks. 

Keuntungannya :
1. Kinerja jadi meningkat, karena mengurangi pengiriman kode dari klien ke server
2. Keamanannya meningkat, karena pada pengaksesan data tertentu ditangani dalam server
3. Konsistensi data jadi meningkat juga waktu sejumlah aplikasi itu manggil prosedur yang sama

Kelemahannya :
Server bakalan lebih terbebani karena banyak proses yang harus ditangani (kaya manusia aja yang serting ngrasa terbebani => kuli kali).

Struktur pembuatan fungsi dalam pl/pgsql :
 
1. Pembuatan fungsi : 

   CREATE [OR REPLACE] FUNCTION nama_fungsi ( argtype , ... 
   RETURNS tipe_data 
   AS "definisi" 
   LANGUAGE "plpgsql‟;
2. Pembuatan definisi : 

   DECLARE nama_variable tipe_data /* deklarasi variabel, type */ 
   BEGIN
 /* prosedural dan SQL masuk disini seperti select, update dan sebagainya*/ Return nama_variable      
/* blok ini yang wajib */ 
   END;

Menghapus fungsi : 
DROP FUNCTION nama_fungsi(paramater, parameter, parameter ... ); Contoh : DROP FUNCTION pembagian(text);


Ada beberapa faktor yang musti diperhatiin pada bahasa ini, yaitu :

DECLARE 
Mendeklarasikan variable yang dipakai dalam fungsi

SELECT INTO
Sebuah form spesial dari select yang memperbolehkan hasil query menempati ke dalam variable.

RETURN
Exit dan merupakan hasil value dari fungsi.

Berikut ini implementasi dari fungsi PL/PGSQL :

db_personal=> CREATE FUNCTION nama_kota (text)
db_personal-> RETURNS text
db_personal-> AS ‘DECLARE hasil TEXT;
db_personal’> BEGIN
db_personal’> SELECT INTO hasil CAST(kota AS TEXT)
db_personal’> FROM identitas
db_personal’> WHERE state = $1;
db_personal’> RETURN hasil;
db_personal’> END;’
db_personal-> LANGUAGE ‘plpgsql’;
CREATE

db_personal=> SELECT nama_kota (‘YK’);
nama_kota
—————–
Yogya
(1 row)
db_personal=> SELECT nama_kota (‘MG’);
nama_kota
——————–
Mangga Dua
         (1 row)
=========================================

TRIGGER

Trigger biasanya digunakan untuk menyisipkan fungsi waktu baris di-INSERT, UPDATE, maupun DELETE. Trigger juga bisa untuk mengecek atau memodifikasi data pada kolom sebelum dimasukkan ke database, sehingga fungsi dapat dipanggil setiap saat (kaya Re**** "setia setiap saat.. :D ga boleh sebut merk..#Bahaya). Yang paling membedakan dari trigger ini yaitu menghasilkan output bertipe OPAQUE bukan Opak sama Kue loh. Tipe OPAQUE ini tipe yang menginformasikan database kalau fungsi tersebut tidak menghasilkan satu dari tipe data yang udah ditetapkan sama SQL dan tidak bisa secara langsung dipakai dalam statement SQL.

Trigger juga memiliki variable khusus yang berdeklarasi secara otomatis, yaitu :
  • NEW : berisi nilai baru suatu record pada saat INSERT atau UPDATE, bertipe record
  • OLD  : berisi nilai lama suatu record pada saat INSERT atau UPDATE, bertipe record
Contohnya :
Memastikan isi field atau kolom nama pada table anggota memakai huruf besar

Pertama-tama, kita buat fungsinya dulu :
db_personal=> CREATE FUNCTION tes_trigger()
db_personal-> RETURNS opaque
db_personal-> AS 'BEGIN
db_personal'> NEW.nama := UPPER(NEW.nama);

db_personal'> RETURN NEW;
db_personal'> END;'
db_personal-> LANGUAGE 'plpgsql';

CREATE


Lalu, dilanjutkan dengan pembuatan trigger yang berfungsi untuk memanggil fungsi secara otomatis ketika kita melakukan INSERT ataupun UPDATE pada tabel anggota.

db_personal=> CREATE TRIGGER tes1_trigger
db_personal-> BEFORE INSERT

db_personal-> ON anggota
db_personal-> FOR EACH ROW
db_personal-> EXECUTE PROCEDURE tes_trigger();

CREATE


kita coba check INSERT beberapa data ke dalam tabel anggota:

db_personal=> INSERT INTO anggota (id, nama)
db_personal-> VALUES (20, 'iqbal');

INSERT 70831 1

db_personal=> INSERT INTO anggota

db_personal-> VALUES (22, 'sasa');

INSERT 70832 1

Tampilkan isi dari tabel anggota, hasilnya pada tabel di bawah ini. Jadi setiap data yang kita INSERT walaupun dalam penulisannya kita pakai huruf kecil tapi secara otomatis trigger akan memanggil fungsi yang bertugas untuk mengganti setiap data yang masuk agar hasilnya nanti selalu menjadi huruf besar, begitu :

db_personal=> SELECT * FROM anggota;
id | nama

--------+-------------
20 | IQBAL

22| SASA

(2 rows)


*) HASIL PRAKTIKUM
   
    POSTGRESQL

  1. Membuat fungsi konversi suhu dari fahrenheit ke derajat celcius dengan rumus konversi sebagai berikut : ((nilai-32)/1,8). di sini kita mengisi nilai = 32.  



     2. Membuat fungsi mencari alamat di table mahasiswa lewat nama mahasiswa


     3. Membuat fungsi untuk menghitung nilai


     4. Membuat fungsi untuk mencari bilangan ganjil atau genap dari bilangan yang diinputkan
    
     5.  Menambahkan kolom modifikasi pada tabel mahasiswa. Dimana ada insert atau update maka tanggal pada kolom modifikasi akan menunjukan tanggal perubahan tsb dilakukan




      MySQL

        1.  Membuat fungsi konversi suhu dari fahrenheit ke derajat celcius dengan rumus konversi         sebagai berikut : ((nilai-32)/1,8). di sini kita mengisi nilai = 32.   




        2.  Membuat fungsi mencari alamat di table mahasiswa lewat nama mahasiswa

            3.  Membuat fungsi untuk menghitung nilai
                
                 


        4.   Membuat fungsi untuk mencari bilangan ganjil atau genap dari bilangan yang diinputkan


        5.   Menambahkan kolom modifikasi pada tabel mahasiswa. Dimana ada insert atau update maka tanggal pada kolom modifikasi akan menunjukan tanggal perubahan tsb dilakukan.

              Pertama, kita buat kolom tambahan di table mahasiswa nama nya "modifikasi"

abis itu, insert kolom di table mahasiswa
 
      
 kita select table mahasiswa nya buat nge-check kolom modifikasinya


ini yang update nya. aku nyoba ganti alamat mahasiswa yang bernama "vani", yang awalnya alamatnya "cimahi" diupdate jadi "bogor". :)

      Evaluasi Perbandingan PostgreSQL dan MySQL


  1. PostgreSQL
    Pada sintaks pembuatan fungsi tidak memerlukan awalan kata "delimiter"
    MySQL
    Pada sintaks pembuatan fungsi harus diawali dengan kata "delimiter"
  2. PostgreSQL
    Fungsi deretan perintah selalu diakhiri dengan karakter ';' untuk setiap kalimat perintahnya
    MySQL
    Fungsi deretan perintah diakhiri sesuai dengan perintah interaktif pada delimiternya, jika delimiter // ,maka kalimat perintahnya diakhiri dengan tanda '//' ,terkecuali delimiter sudah dikembalikan dengan perintah delimiter ;, maka kalimat perintah diakhiri dengan tanda ';'
  3. PostgreSQL
    Pada parameter di sintaks fungsi yang diapit oleh tanda kurung berisikan type data, dan tidak harus ditambahkan dengan nilai dari tipe data tersebut
    create function perkalian (float,float)
    MySQL
    Pada parameter di sintaks fungsi yang diapit oleh tanda kurung berisikan type data harus ditambahkan dengan nilai dari tipe data tersebut
    create function perkalian (varchar (20))


    *) KESIMPULAN
    Fungsi sql itu sebuah kumpulan query, yang biasanya mendapati query yang panjang, lalu dibungkus jadi satu dan disimpan dalam database. Kalau lagi dibutuhin, tinggal diakses tanpa ngetik query lagi. Sedangkan PL/PGSQL itu bahasa yang dipakai untuk menangani fungsi yang lebih kompleks. Lain halnya dengan Trigger, trigger itu digunakan untuk menyisipkan sebuah fungsi pada record yang di insert, update maupun delete. Ini juga dapat mengecheck atau memodifikasi data pada kolom sebelum dimasukkan ke database, jadi fungsi itu bisa dipanggil otomatis. Dan dalam hal ini, sintak atau query dari masing-masing aplikasi (dibaca:Postgresql dan mysql) berbeda-beda.

    *)   KRITIK DAN SARAN

    Dalam praktikum kali ini yang berjudul Fungsi, PL/PGSQL, dan Trigger terdapat query yang berbeda-beda pada aplikasi postgresql dan mysql. Sehingga, dibutuhkan referensi dalam tiap query agar dapat mengetahui penyelesaiannya.

    *)   MANFAAT
    Manfaat yang didapat dari pembelajaran praktikum ini, yaitu para pembaca mampu memahami dan mengaplikasikan fungsi serta dasar penggunaan pada pl/pgsql dan trigger dalam database postgresql, serta mysql.


          *)     DAFTAR PUSTAKA

          Musthofa, aziz.2004.Modul Praktikum Desain Basis Data.Malang.

          http://www.postgresql.org/docs/8.2/static/plpgsql.html
          http://informatikanote.blogspot.com/2014/01/fungsi-plpgsql-dan-trigger.html