Sunday, November 30, 2014

Praktikum 9 Koneksi postgresql pada java (netBeans)

A. LANDASAN TEORI
Langkah-langkah Koneksi database
Terdapat beberapa langkah yang secara umum harus dilakukan sehingga aplikasi yang berbasis Java dapat berinteraksi dengan database server. Langkah -langkah tersebut sebagai berikut :
1.  Impor package java.sql
2.  Memanggil Driver JDBC
3.  Membangun Koneksi
4.  Membuat Statement
5.  Melakukan Query
6.  Menutup Koneksi

1.  Impor package java.sql
Pertama-tama yang harus dilakukan sebelum Anda membuat program JDBC adalah mengimpor package java.sql terbih dahulu, karena di dalam package java.sql tersebut  terdapat  kelas-kelas  yang  akan  digunakan  dalam  proses-proses  berintekasi engan database server misalnya kelas DriverMaganer, Connection, dan ResultSet.Hal  ini  sangat  penting  dilakukan  karena  bagi  pemula  seringkali  lupa  untuk mengimpor  package  yang  kelas-kelas  yang  akan  digunakan  terdapat  di  dalamnya, sehingga mengakibatkan kegagalan dalam mengkompile program Java Adapun listing untuk mengimpor package java.sql adalah sebagai berikut :
Import java.sql.*;
Listing ini dituliskan sebelum Anda menulis kelas.

2.  Memanggil Driver JDBC
Langkah  pertama  untuk  melakukan  koneksi  dengan  database  server  adalah dengan  memanggil  JDBC  Driver  dari  database  server  yang  kita  gunakan.  Driver adalah library  yang digunakan untuk berkomunikasi dengan database server. Driver dari setiap database  server berbeda-beda, sehingga Anda harus menyesuaikan Driver JDBC sesuai dengan database server yang Anda gunakan. Berikut ini adalah listing program untuk memanggil driver JDBC. Class.forName(namaDriver);  atau  Class.forName(namaDriver).newInstance();
Kedua  cara  di  atas  memiliki  fungsi  yang  sama  yaitu  melakukan  registrasi class  driver  dan  melakukan  intansiasi.  Apabila  driver  yang  dimaksud  tidak ditemukan,  maka  program  akan  menghasilkan  exception  berupa ClassNotFoundException.  Untuk  menghasilkan  exception  apabila  driver  tidak ditemukan,  maka  diperlukan  penambahan  try-catch.  Adapun  cara  menambahkan try-catch untuk penanganan error apabila driver tidak ditemukan, sebagai berikut :

Try {
Class.forName(namaDriver);
} catch (ClassNotFoundException e) {
... Penanganan Error ClassNotFoundException
}
Contoh listing memanggil driver menggunakan PosqgreSQL adalah :
try {
Class.forName(“org.postgresql.Driver”);
} catch (ClassNotFoundException e) {
System.out.println(“Pesan Error : “ + e)

Berikut ini adalah daftar nama-nama driver dari beberapa database server yang sering
digunakan.




3.  Membangun Koneksi
Setelah  melakukan  pemanggilan  terhadap  driver  JDBC,  langkah  selanjutnya adalah  membangun  koneksi  dengan  menggunakan  interface  Connection.  Object Connection  yang  dibuat  untuk  membangun  koneksi  dengan  database  server  tidak
dengan  cara  membuat  object  baru  dari  interface  Connection  melainkan  dari  class DriverManager dengan menggunakan methode getConnection().
Connection koneksi = DriverManager.getConnection(<argumen>);
Untuk menangani error yang mungkin terjadi pada proses melakukan koneksi dengan database maka  ditambahkan try-catch. Exception yang akan dihasilkan pada proses  ini  adalah  berupa  SQLException.  Adapun  cara  penulisan  listingnya  adalah sebagai berikut :

try {
... koneksi database
} catch (SQLException sqle){
... penanganan error koneksi
}

Ada beberapa macam argumen yang berbeda dari methode getConnection() yang dipanggil dari DriverManager, yaitu :

getConnection(String url)

Pada methode diatas hanya memerlukan argumen URL, sedangkan untuk data user dan password sudah diikutkan secara langsung.   Adapun penulisan nilai sebagai berikut :
jdbc:<DBServer>://[Host][:Port]/<namaDB>?<user=User>&<password=Pasword>
Berikut ini contoh penggunaan methode ini didalam program :
try {
String url = “jdbc:  postgresql://localhost:3306/Dbase? User  =  adi  &  password= pas”;
Connection koneksi = DriverManager.getConnection(url);
System.out.prinln(“Proses apabila koneksi sukses”);
} catch (SQLException sqle) {
System.out.println(“Proses apabila koneksi gagal dilakukan”);
}

getConnection(String url, Properties info)

Pada  methode  ini  memerlukan  URL  dan  sebuah  object  Properties. Sebelum  menggunakan  methode  ini,  Anda  harus  melakukan  import  package berupa  java.util.*,  ini  dikarenakan  object  Properties  terdapat  pada  package tersebut.  Object  roperties  berisikan  spesifikasi   dari  setiap  parameter  database misalnya user name, password, autocommit, dan sebagainya. Berikut ini contoh penggunaan methode ini didalam program :
try {
String url = “jdbc: postgresql://localhost:5432/praktikumdbd”;
Properties prop = new java.util.Properties(); // tidak mengimpor kelasprop.put(“user”,”NamaUser”);
prop.put(“password”,”datapassword”);
Connection koneksi = DriverManager.getConnection(url, prop);
System.out.prinln(“Proses apabila koneksi sukses”);
} catch (SQLException sqle) {
System.out.println(“Proses apabila koneksi gagal dilakukan”);
}

getConnection(String url, String user, String password)

Pada  methode  ini  memerlukan  argumen  berupa  URL,  user  name,  dan password.  Methode  ini  secara  langsung  mendefinisikan  nilai  URL,  user  name dan password.
Berikut ini contoh penggunaan methode ini didalam program :
try {
String url = “jdbc: postgresql://localhost:5432/ praktikumdbd”;
String user = “adi”
String password “ternate”
Connection koneksi = DriverManager.getConnection(url, user, password);
System.out.prinln(“Proses apabila koneksi sukses”);
} catch (SQLException sqle) {
System.out.println(“Proses apabila koneksi gagal dilakukan”);
}
Berikut  ini  adalah  daftar  penulisan  URL  dari  beberapa  database  server  yang sering digunakan.



4.  Membuat Statement

JDBC  API  menyediakan  interface  yang  berfungsi  untuk  melakukan  proses pengiriman statement SQL yang terdapat pada package java.sql.  Statement yang ada secara umum digunakan terdiri dari berikut  :

Statement
Interface ini dibuat oleh methode  Connection.createStatement(). Object Statement  digunakan  untuk  pengiriman  statement  SQL  tanpa  parameter  serta Setiap SQL statement yang dieksekusi dikirim secara utuh ke database.
Statement stat = Connection.createStatement();

PreparedStatement
Interface  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

Setelah  kita  memiliki  object  statement,  kita  dapat  menggunakannya  untuk melakukan pengiriman perintah SQL dan mengeksekusinya. Methode eksekusi yang digunakan  untuk  perintah  SQL  terbagi  menjadi  dua  bagian  yaitu  untuk  perintah SELECT  methode  eksekusi  yang  digunakan  adalah  executeQery()  dengan  nilai kembaliannya adalah  ResultSet, dan untuk perintah  INSERT, UPDATE, DELETE methode eksekusi yang digunakan adalah executeUpdate().
Berikut ini adalah contoh melakukan eksekusi perintah SQL dan mengambil hasilnya (ResultSet) dengan menggunakan perintah SELECT :
String sql = “SELECT kode, nama, alamat, kelas FROM dataSiswa”;
ResultSet set = stat.executeQuery(sql);
while (set.next()) {
String kode = set.getString("kode");
String nama = set.getString("nama");
String alamat = set.getString("alamat");
String kelas = set.getString("kelas");
}
Berikut  ini  adalah  contoh  melakukan  eksekusi  perintah  SQL  dengan
menggunakan perintah DELETE.
String sql = "DELETE FROM data_siswa WHERE kode = “1234”;
PreparedStatement stat = konek.prepareStatement(sql);
stat.executeUpdate();

6.  Menutup Koneksi

Penutupan terhadap koneksi database perlu dilakukan agar sumber daya yang digunakan  oleh  object  Connection  dapat  digunakan  lagi  oleh  proses  atau  program yang  lain.  Sebelum  kita  menutup  koneksi  database,  kita  perlu  melepas  object
Statement dengan kode sebagai berikut :
statement.close();
Untuk  menutup  koneksi  dengan  database  server  dapat  kita  lakukan  dengan kode sebagai berikut :
connection.close();

B. Hasil Praktikum
1. Membuat koneneksi postgtres dengan java netbeans
berikut kuerinya

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package prakdbd;
import java.sql.Connection;
import java.sql.DriverManager;
import javax.sql.*;
public class PrakDBD{
    Connection connection=null;
    void koneksi(){
        try{
            String connectionURL ="jdbc:postgresql://localhost/praktikumdbd";
            String username="postgres";
            String password="anang";
            connection=DriverManager.getConnection(connectionURL,username,password);
            System.err.println("koneksi berhasil");
        }
        catch (Exception e){
            System.err.println("koneksi gagal"+e);
            System.exit(1);
        }
    }
    public static void main(String[] args){
        PrakDBD kb=new PrakDBD();
        kb.koneksi();
    }
}

Gambarnya :



2. Membuat Tabel seperti berikut :


3. Membuat fungsi pada tombol simpan, edit, hapus, tampil, cari dan reset

Berikut adalah Querinya beserta Print skin hasil praktikum:

Void Simpan/Insert

 private void tsimpanActionPerformed(java.awt.event.ActionEvent evt) {                                        
        int a = Integer.parseInt(isinim.getText());
        String b = isinama.getText();
        String c = isialamat.getText();
        int d = Integer.parseInt((String) pilihkode.getSelectedItem());
        String e = "";
        if (lk.isSelected()) {
            e = lk.getText();
        } else {
            e = pr.getText();
        }
        
        try {
            Class.forName("org.postgresql.Driver");
            Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost/praktikumdbd", 

"postgres", "anang");
            Statement statemen = connection.createStatement();
            String sql = "insert into mahasiswa values ('" + a + "','" + b + "','" + c + "','" + d + "','" + e + "')";
            statemen.executeUpdate(sql);
            statemen.close();
            JOptionPane.showMessageDialog(null, "data tersimpan");
        } catch (Exception f) {
            JOptionPane.showMessageDialog(null, "Nim sudah ada");
        }
    }        



hasil e





                               


Void Hapus

  int a = Integer.parseInt(isinim.getText());
        String b = isinama.getText();
        String c = isialamat.getText();
        int d = Integer.parseInt((String) pilihkode.getSelectedItem());
        String e = "";
        if (lk.isSelected()) {
            e = lk.getText();
        } else {
            e = pr.getText();
        }
        
        try {
            Class.forName("org.postgresql.Driver");
            Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost/praktikumdbd", 

"postgres", "anang");
            Statement statemen = connection.createStatement();
            String sql = "delete from mahasiswa where nim='" + a + "'";
            statemen.executeUpdate(sql);
            statemen.close();
            JOptionPane.showMessageDialog(null, "data terhapus");
        } catch (Exception f) {
            JOptionPane.showMessageDialog(null, "Gagal");
        }        // TODO add your handling code here:
    }              




hasil e



                        


Void Edit/Update

 int a = Integer.parseInt(isinim.getText());
        String b = isinama.getText();
        String c = isialamat.getText();
        int d = Integer.parseInt((String) pilihkode.getSelectedItem());
        String e = "";
        if (lk.isSelected()) {
            e = lk.getText();
        } else {
            e = pr.getText();
        }
        
        try {
            Class.forName("org.postgresql.Driver");
            Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost/praktikumdbd", 

"postgres", "anang");
            Statement statemen = connection.createStatement();
            String sql = "update mahasiswa set nama='" + b + "',alamat='" + c + "',id_fak'" + d + "',gender='" + e + 

"'where nim='" + a + "'";
            statemen.executeUpdate(sql);
            statemen.close();
            JOptionPane.showMessageDialog(null, "Berhasil di UPdate");
        } catch (Exception f) {
            JOptionPane.showMessageDialog(null, "Gagal");
        }        // TODO add your handling code here:
    }      








Void Tampil/select

  int a = Integer.parseInt(isinim.getText());
        String b = isinama.getText();
        String c = isialamat.getText();
        int d = Integer.parseInt((String) pilihkode.getSelectedItem());
        String e = "";
        if (lk.isSelected()) {
            e = lk.getText();
        } else {
            e = pr.getText();
        }
        
        try {
            Class.forName("org.postgresql.Driver");
            Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost/praktikumdbd", 

"postgres", "anang");
            Statement statemen = connection.createStatement();
            String sql = "select * from mahasiswa  ";
            ResultSet rs = statemen.executeQuery(sql);
            while (rs.next()) {
                a = Integer.parseInt(rs.getString("nim"));
                b = rs.getString("nama");
                c = rs.getString("alamat");
                d = Integer.parseInt(rs.getString("id_fak"));
                e = rs.getString("gender");
                tampil.append(a + " " + b + " " + c + " " + d + " " + e + "\n");
            }
            statemen.close();
        } catch (Exception f) {
            JOptionPane.showMessageDialog(null, "gagal");
        }        // TODO add your handling code here:
    }                                









Void Reset

 private void tresetActionPerformed(java.awt.event.ActionEvent evt) {                                       
        isinim.setText("");
        isinama.setText("");
        isialamat.setText("");
        tampil.setText("");        // TODO add your handling code here:
    }     







Void Cari

int a = Integer.parseInt(isinim.getText());
        String b = isinama.getText();
        String c = isialamat.getText();
        int d = Integer.parseInt((String) pilihkode.getSelectedItem());
        String e = "";
        if (lk.isSelected()) {
            e = lk.getText();
        } else {
            e = pr.getText();
        }
        
        try {
            Class.forName("org.postgresql.Driver");
            Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost/praktikumdbd", 

"postgres", "anang");
            Statement statemen = connection.createStatement();
            String sql = "select * from mahasiswa where nim = '"+a+"'";
           ResultSet isi = statemen.executeQuery(sql);
           while (isi.next()){
               isinim.setText(isi.getString("nim"));
               isinama.setText(isi.getString("nama"));
               isialamat.setText(isi.getString("alamat"));
              pilihkode.setSelectedItem(isi.getString("id_fak"));
            
               
           }
            statemen.close();
            //JOptionPane.showMessageDialog(null, "data tersimpan");
        } catch (Exception f) {
            JOptionPane.showMessageDialog(null, "Gagal");
        }       // TODO add your handling         // TODO add your handling code here:
            // TODO add your handling code here:
    }                       





                 
                             


4. Membuat seperti soal no 3 namun pada soal 4 ini koneksi ke postgresqlnya sedikit berbeda seperti berikut


Menambah Void koneksi

public class empat extends javax.swing.JFrame {

    PrakDBD k = new PrakDBD();



Void Simpan/Insert

 int a = Integer.parseInt(isinim.getText());
        String b = isinama.getText();
        String c = isialamat.getText();
        int d = Integer.parseInt((String) pilihkode.getSelectedItem());
        String e = "";
        if (lk.isSelected()) {
            e = lk.getText();
        } else {
            e = pr.getText();
        }

        try {
            Statement statemen = k.connection.createStatement();
            String sql = "insert into mahasiswa values ('" + a + "','" + b + "','" + c + "','" + d + "','" + e + "')";
            statemen.executeUpdate(sql);
            statemen.close();
            JOptionPane.showMessageDialog(null, "data tersimpan");
        } catch (Exception f) {
            JOptionPane.showMessageDialog(null, "Nim sudah ada");
        }
    }                            


hasil e





Void Hapus

  int a = Integer.parseInt(isinim.getText());
        String b = isinama.getText();
        String c = isialamat.getText();
        int d = Integer.parseInt((String) pilihkode.getSelectedItem());
        String e = "";
        if (lk.isSelected()) {
            e = lk.getText();
        } else {
            e = pr.getText();
        }

        try {
           Statement statemen = k.connection.createStatement();
            String sql = "delete from mahasiswa where nim='" + a + "'";
            statemen.executeUpdate(sql);
            statemen.close();
            JOptionPane.showMessageDialog(null, "data tersimpan");
        } catch (Exception f) {
            JOptionPane.showMessageDialog(null, "Nim sudah ada");
        }        // TODO add your handling code here:
    }     


hasil e


                                 




Void Edit/Update

 int a = Integer.parseInt(isinim.getText());
        String b = isinama.getText();
        String c = isialamat.getText();
        int d = Integer.parseInt((String) pilihkode.getSelectedItem());
        String e = "";
        if (lk.isSelected()) {
            e = lk.getText();
        } else {
            e = pr.getText();
        }

        try {
            Statement statemen = k.connection.createStatement();
            String sql = "update mahasiswa set nama='" + b + "',alamat='" + c + "',id_fak'" + d + "',gender='" + e + 

"'where nim='" + a + "')";
            statemen.executeUpdate(sql);
            statemen.close();
            JOptionPane.showMessageDialog(null, "data tersimpan");
        } catch (Exception f) {
            JOptionPane.showMessageDialog(null, "Nim sudah ada");
        }      






Void Select / Tampil

 int a = Integer.parseInt(isinim.getText());
        String b = isinama.getText();
        String c = isialamat.getText();
        int d = Integer.parseInt((String) pilihkode.getSelectedItem());
        String e = "";
        if (lk.isSelected()) {
            e = lk.getText();
        } else {
            e = pr.getText();
        }

        try {
            Statement statemen = k.connection.createStatement();
            String sql = "select * from mahasiswa  ";
            ResultSet rs = statemen.executeQuery(sql);
            while (rs.next()) {
                a = Integer.parseInt(rs.getString("nim"));
                b = rs.getString("nama");
                c = rs.getString("alamat");
                d = Integer.parseInt(rs.getString("id_fak"));
                e = rs.getString("gender");
                tampil.append(a + " " + b + " " + c + " " + d + " " + e + "\n");
            }
            statemen.close();
        } catch (Exception f) {
            JOptionPane.showMessageDialog(null, "gagal");
        }        


Void Reset


 private void tresetActionPerformed(java.awt.event.ActionEvent evt) {                                       
        isinim.setText("");
        isinama.setText("");
        isialamat.setText("");
        tampil.setText("");        // TODO add your handling code here:
    }                






Void Cari

   int a = Integer.parseInt(isinim.getText());
        String b = isinama.getText();
        String c = isialamat.getText();
        int d = Integer.parseInt((String) pilihkode.getSelectedItem());
        String e = "";
        if (lk.isSelected()) {
            e = lk.getText();
        } else {
            e = pr.getText();
        }

        try {
            Statement statemen = k.connection.createStatement();
            String sql = "select * from mahasiswa where nim = '" + a + "'";
            ResultSet isi = statemen.executeQuery(sql);
            while (isi.next()) {
                isinim.setText(isi.getString("nim"));
                isinama.setText(isi.getString("nama"));
                isialamat.setText(isi.getString("alamat"));
                pilihkode.setSelectedItem(isi.getString("id_fak"));
          

            }
            statemen.close();
            //JOptionPane.showMessageDialog(null, "data tersimpan");
        } catch (Exception f) {
            JOptionPane.showMessageDialog(null, "Gagal");
        }



C. PENUTUP

Maksud , Tujuan dan Manfaat

a. Maksud
- Pada bab kali ini akan membahas tentang koneksi PostgreSQL dengan bahasa pemrograman java.
- Selain hal itu akan dibahas juga mengenai kode pemrograman untuk manipulasi data.
b. Tujuan 
- Mahasiswa memahami dalam penggunaan Database PostgreSQL dan Bahasa pemrograman Java untuk membuat suatu program aplikasi.
c. Manfaat. 
 -Mahasiswa memahami dan mampu  menggunakan  database PostgreSQL dan       bahasa pemograman untuk membuat suatu program aplikasi dan  bisa bermanfaat untuk kehidupan.


D. Daftar Pustaka

Modul Praktikum Desain Basis Data 2014
Populer IlmuKomputer.Com  Copyright ©2003- 2006 IlmuKomputer.Com




Sunday, November 23, 2014

Praktikum VIII Fungsi , PL/SQL dan Trigger

A. LANDASAN TEORI
1. Pendukung Fungsi
PostgreSQL memiliki fungsi yang dapat mengubah suatu nilai dalam suatu kolom atau barismenjadi huruf besar. Fungsi tersebut bernama upper(nama_kolom), berfungsi memanggilfungsi upper dengan nama_kolom sebagaii argumen sehingga menghasilkan nilai padakolom dalam huruf besar. Berikut Struktur SQL untuk menampilkan data dalam huruf besar semua :
SELECT upper ([nama kolom]) FROM [nama tabel];
- Berikut struktur SQL untuk menampilkan data dimana huruf pertama saja yang besar :
SELECT initcap ([nama kolom]) FROM [nama tabel];

2. Fungsi
a. Fungsi pada PostgresSQL
Fungsi SQL adalah sebuah kumpulan query, biasanya query yang detail dan panjangyang dibungkus menjadi satu dan disimpan dalam database dan kemudian apabiladiperlukan hanya tinggal mengaksesnya tanpa mengetikan query detail. Ada beberapa konsep yang menarik dari fungsi antara lain:
• Bahasa yang dipakai dapat didefenisikan sendiri dengan tersedianya parameter LANGUAGE, tanpa harus mengkompilasi ulang PostgreSQL.
•  Kita dapat membuat dua buah fungsi dengan nama yang sama namun parametermasukkannya yang berbeda, baik tipe data maupun jumlahnya.

Ada beberapa faktor yang perlu diperhatikan dalam membuat fungsi antara lain:
• Nama Fungsi
• Nomor dari fungsi argument
• Tipe data dari setiap argument
• Tipe dari hasil fungsi
• Fungsi action
• Bahasa yang digunakan oleh fungsi action.
- Berikut contoh sederhana pembuatan fungsi SQL untuk perkalian dari tiga inputan :  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)


b. Fungsi pada MySQL
Secara default, routine (procedure/function) diasosiasikan dengan database yang sedang aktif. Untuk dapat mengasosiasikan routine secara eksplisit dengan database yang lain, buat routine dengan format: db_name.sp_name.
MySQL mengijinkan beberapa routine berisi statemen DDL, seperti CREATE dan DROP. MySQL juga mengijinkan beberapa stored procedure (tetapi tidak stored function) berisi statemen SQL transaction, seperti COMMIT. Stored function juga berisi beberapa statemen baik yang secara eksplisit atau implisit commit atau rollback.
Sintak :
CREATE FUNCTION sp_name ([func_parameter[,...]])  
RETURNS type     [characteristic ...] routine_body        

proc_parameter:     [ IN | OUT | INOUT ] param_name type        

func_parameter:     param_name type

type:  
Any valid MySQL data type

characteristic:  
 LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL
| NO SQL
| READS SQL DATA
| MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'

routine_body:  
Valid SQL procedure statement or statements
Keterangan :
- sp_name: Nama routine yang akan dibuat
- proc_parameter: Spesifikasi parameter sebagai IN, OUT, atau INOUT valid hanya untuk
PROCEDURE. (parameter FUNCTION selalu sebagai parameter IN)
- returns: Klausa RETURNS dispesifikan hanya untuk suatu FUNCTION. Klausa ini digunakan untuk mengembalikan tipe fungsi, dan routine_body harus berisi suatu statemen nilai RETURN.
- comment: Klausa COMMENT adalah suatu ekstensi MySQL, dan mungkin digunakan untuk mendeskripsikan stored procedure. Informasi ini ditampilkan dengan statemen SHOW CREATE PROCEDURE dan SHOW CREATE FUNCTION.

Contoh: mysql> delimiter //
mysql> create function fcNamaMHS(x char(25)) returns char(40)  
-> return concat('Nama : ', x);  
-> // Query OK, 0 rows affected (0.00 sec)
mysql> select fcNamaMHS('Sholihun');




Dari contoh diatas terlihat bahwa parameter “x” diperlakukan sebagai IN karena sebagaimana dijelaskan sebelumnya bahwa fungsi hanya bisa dilewatkan dengan
parameter IN. Kemudian untuk pengembalian nilainya, digunakan tipe data dengan kisaran nilai tertentu (dalam hal ini char(40)) dengan diawali pernyataan returns.

Pernyataam “concat('Nama : ', x)” merupakan routine_body yang akan menghasilkan gabungan string “Nama :” dengan nilai dari parameter “x” yang didapat ketika fungsi ini dieksekusi. Perintah yang digunakan untuk mengeksekusi fungsi adalah “select fcNamaMHS('Sholihun')”.

c. Fungsi PL/PGSQL PL/PGSQL
Merupakan bahasa yang lain untuk membuat sebuah fungsi, biasanya bahasa ini digunakan untuk menangani fungsi yang lebih kompleks. Pl/pgsql sudah terdapat dalam instalasi PostgreSQL.  Keuntungan penggunaan Fungsi PL/PGSQL :
1. Meningkatkan kinerja karena mengurangi pengiriman kode dari klien ke server.
2. Meningkatkan keamanan karena pengaksesan data tertentu ditangani dalam server.
3. Meningkatkan konsistensi data saat sejumlah aplikasi memanggil prosedur yang sama;

Sebaliknya kelemahannya yaitu server akan lebih terbebani karena banyak proses yang harus ditangani. Sedangkan query PL/PGSQL agar lebih mudah di pahami akan dibagi menjadi 2 yaitu pembuatan fungsi dan pembuatan definisi

- Berikut 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);

d. Triger
a. Triger pada PostgresSQL
Trigger digunakan untuk menyisipkan sebuah fungsi pada saat suatu record di- INSERT, UPDATE dan DELETE. Trigger sangat ideal untuk mengecek atau memodifikasi sebuah data pada kolom sebelum dimasukkan ke dalam database, sehingga sebuah fungsi dapat dipanggil setiap saat secara otomatis ketika sebuah row akan dimodifikasi. Ciri khas dari fungsi yang diperuntukkan untuk trigger adalah menghasilkan output bertipe OPAQUE. Tipe opaque adalah sebuah tipe yang menginformasikan pada database bahwa fungsi tersebut tidak menghasilkan satu dari tipe data yang ditetapkan SQL dan tidak secara langsung dapat digunakan dalam statemen SQL. Language (bahasa) PL/PGSQL dapat digunakan untuk trigger procedure, fungsi untuk trigger ini memiliki beberapa variabel khusus yang terdeklarasi secara otomatis. Variabel tersebut antara lain:
• NEW:  Variabel yang berisi nilai baru suatu record pada saat INSERT atau UPDATE, bertipe RECORD.
• OLD:  Variabel yang berisi nilai lama suatu record pada saat UPDATE atau DELETE, juga bertipe RECORD. Berikut ini beberapa contoh penggunaan fungsi sebagai trigger procedure: Contoh : trigger berikut ini memastikan isi field atau kolom nama pada tabel anggota selalu huruf besar.

b. Triger pada MySQL
Pernyataan CREATE TRIGGER digunakan untuk membuat trigger, termasuk aksi apa yang dilakukan saat trigger diaktifkan. Trigger berisi program yang dihubungkan dengan suatu tabel atau view yang secara otomatis melakukan suatu aksi ketika suatu baris di dalam tabel atau view dikenai operasi INSERT, UPDATE atau DELETE.
Sintak :
CREATE     [DEFINER = { user | CURRENT_USER }]  
TRIGGER trigger_name trigger_time trigger_event  
ON tbl_name FOR EACH ROW trigger_stmt

Keterangan :
- [DEFINER = { user | CURRENT_USER }]: Definisi user yang sedang aktif, sifatnya opsional.
- trigger_name: Nama trigger.
- trigger_time: waktu menjalankan trigger. Ini dapat berupa BEFORE atau AFTER.
o BEFORE: Membuat trigger diaktifkan sebelum dihubungkan dengan suatu operasi.
o AFTER: Membuat trigger diaktifkan setelah dihubungkan dengan suatu operasi.
- trigger_event: berupa kejadian yang akan dijalankan trigger.
- trigger_event dapat berupa salah satu dari berikut:
o INSERT : trigger diaktifkan ketika sebuah record baru disisipkan ke dalam tabel. Contoh: statemen INSERT, LOAD DATA, dan REPLACE.
o UPDATE : trigger diaktifkan ketika sebuah record dimodifikasi. Contoh: statemen UPDATE.
o DELETE : trigger diaktifkan ketika sebuah record dihapus. Contoh: statemen DELETE dan REPLACE. Catatan : trigger_event tidak merepresentasikan statemen SQL yang diaktifkan trigger sebagai suatu operasi tabel. Sebagai contoh, trigger BEFORE untuk INSERT akan diaktifkan tidak hanya oleh statemen INSERT tetapi juga statemen LOAD DATA.
- tbl_name: Nama tabel yang berasosiasi dengan trigger.
- trigger_stmt: Statemen (tunggal atau jamak) yang akan dijalankan ketika trigger aktif.
Contoh yang akan dibahas adalah mencatat kejadian-kejadian yang terjadi beserta waktunya pada tabel mahasiswa, dan catatan-catatan tadi disimpan dalam tabel yang lain, misal log_mhs. Misalkan struktur tabel log_mhs adalah sebagai berikut.
mysql> describe log_mhs;

Contoh 1:
mysql> create trigger ins_mhs after insert on mahasiswa  
-> for each row insert into log_mhs values('Tambah data',now());
mysql> insert into mahasiswa values('00631','Hanif','Kalasan','P01');
mysql> select * from log_mhs;


Dari contoh diatas dapat dilihat bahwa ketika satu record pada tabel mahasiswa disisipkan (insert), maka secara otomatis tabel log_mhs akan disisipkan satu record, yaitu kejadian ‘Tambah data’ dan waktu saat record pada tabel mahasiswa disisipkan.

B. HASIL PRAKTIKUM
1. Membuat fungsi konversi suhu dari Fahrenheit ke derajat celcius dengan rumus konversi sebagai berikut : celcius=5/9 * (nilai Fahrenheit-32) Kemudian jalankan hasilnya dengan menSELECT fungsi tadi
seperti gambar berikut :




2. Memuat fungsi untuk mencari alamat mahasiswa dari tabel mahasiswa berdasarkan nama mahasiswa dan di jalankan melalui select






3. Membuat fungsi untuk menghitung nilai dengan menggunakan bahasa pl/sql seperti berikut ;






4. Membuat fungsi menggunakan pl/pgsql untuk mencari bilangan ganjil atau genap dari bilangan yang diinputkan dan tampilkan select




5. Tambahkan kolom modifikasi pada tabel mahasiswa. Dimana setiap ada insert atau update maka tanggal pada kolom modifikasi akan menunjukkan tanggal perubahan tersebut dilakukan.



C. PERBEDAAN DBMS
Banyak perbedaan yang terjadi di antara Postgres dengan Mysql apalagi dalam querinya , untuk Mysql kalau membuat query fungsi harus ada delimeternya berikut perbedaannya ;
-PostgresSQL 
Perbedaan :
1. Perlu menuliskan Bahasa yang dipakai seperti pl pgsql.
2. Pada tipe Char atau Varchar tidak perklu diberi ukuran.
3. Tentang percabangan, setelah query if, atau else if serta else maka menggunakan select  into variable (values).
-MySQL 
Perbedaan : 
1. Tidak perlu menuliskan Bahasa yang dipakai dan bisa langsung meng eksekusi query.
2. Pada tipe Char atau Varchar tidak diberi ukuran jika tidak maka akan error.
3. Perlu adanya concat (nilai kembalian di akhir query).
4. Tentang percabangan, setelah query if, atau else if serta else maka menggunakan then return concat (values).


D. KESIMPULAN
Berdasarkan apa yang telah kita pelajari pada praktikum ini tentang Fungsi, plpgsql dan trigger maka dapat disimpulkan bahwa antara PostgresSQL dengan MySQL sangatlah berbeda. Dan itu banyak juga perbedaannya.
Semoga sedikit ilmu yang kami tularkan nantinya akan dapat mempermudah pembaca dalam memcahkan masalah-masalah atau mungkin tugas-tugas pembaca sekalian. 

E. DAFTAR PUSTAKA
Modul Praktikum Desain Basis Data 2014

Sunday, November 9, 2014

Laporan Praktikum VII "Sub Query dan Indeks"

A. Landasan Teori

SELECT INTO STATEMENT
Query select  into statement merupakan query SQL yang digunakan untuk mengopi informasi dari tabel ke tabel yang lain tanpa membuat tabel sebelumnya. Berikut  struktur  query  penggunaan  select  into  statement  untuk mengopi semua data dari tabel1 ke tabel yang baru :
SELECT * INTO newtable FROM table1;
Berikut struktur query penggunaan select into statement  untuk mengopi data berdasarkan kolom tertentu dari tabel1 ke tabel yang baru :
SELECT column_name(s) INTO newtable [IN externaldb] FROM table1;

SUB QUERY
Subquery atau query Nested merupakan bentuk query yang terdapat dalam query yang lain. Subquery dapat ditempatkan dalam klausa where, having, from bersama dengan  operator perbandingan seperti = untuk baris tunggal dan untuk baris berganda menggunakan in, not in atau <>, < any, >, >=,<=. Penggunaan  sub  query  dapat diterapkan  pada  pernyataan  SELECT,  UPDATE,  DELETE,  dan  INSERT.  Bentuk penggunaannya sebagai berikut :
Select  nama_kolom  from  nama_tabel  where  nama_kolom  operator
(subquery);

INDEKS
Indeks disini berguna dalam suatu pencarian nilai atau  data dalam database. Dalam suatu kasus ketika mengakses sebuah tabel biasanya DBMS akan membaca seluruh tabel baris perbaris hingga selesai. Ketika baris sangat banyak dan hasil dari query hanya sedikit, maka hal ini sangat tidak efisien. Seperti halnya ketika kita membaca sebuah buku dan ingin mencari kata atau istilah tertentu dalam buku maka biasanya akan di cari dengan membuka setiap halaman dari awal sampai akhir. Dengan adanya indeks buku maka kita cukup dengan membuka indeks, sehingga akan cepat dalam pencarian
kata tersebut. PostgreSQL tidak bisa membuat indeks dengan otomatis, sehingga user dapat membuat indeks tersebut untuk sering kali digunakan kolom,  biasanya dalam clause WHERE. Berikut struktur SQL :
CREATE INDEX nama_index ON nama_tabel (nama kolom);

indeks sebaiknya jangan digunakan  pada tabel atau kolom yang sangat jarang atau tidak pernah diakses. Selain untuk perintah SELECT Indeks juga bermanfaat untuk UPDATE dan DELETE yang menggunakan kondisi pencarian.  Sedangkan Unique index mirip dengan indeks tetapi lebih digunakan untuk mencegah duplikasi nilai yang terdapat dalam tabel. Jadi dengan adanya unique index berarti pembaca tidak dapat meng-insert nilai yang sama dalam sebuah tabel. Berikut struktur SQL nya :
CREATE UNIQUE INDEX nama_index ON nama_tabel (nama kolom);

Untuk menghapus index berikut strukturnya :
DROP INDEX Nama_index;


KOLOM UNIK
Unique berfungsi untuk menjaga agar tidak terjadinya duplikasi nilai (kesamaan data) dalam sebuah kolom, hal ini dapat ditangani dengan membuat sebuah indeks unik atau fungsi unik sendiri pada kolom yang dimaksud.  Unique ini sering digunakan dalam pembuatan bukan primary key namun membutuhkan cek dupikasi agar tidak ada yang sama, karena dalam  primary key  sudah otomatis mempunyai sifat unik. Berikut Struktur SQL saat pembuatan tabel baru :
CREATE TABLE nama_tabel (nama_kolom tipe_data unique);

Ketika tabel sudah ada kita bisa menggunakan cara seperti pada BAB.2 berikut struktur SQL nya :

ALTER TABLE nama_tabel ADD UNIQUE (nama_kolom);
Untuk menghapus unique berikut caranya :
ALTER TABLE nama_table DROP CONSTRAINT NAMA_CONSTRAIN

Check
Check berfungsi untuk melakukan pembatasan nilai masukan dalam sebuah kolom, sebagai contoh misalkan kita ingin agar kolom gender yang terdiri  dari  satu karakter hanya memiliki dua pilihan karakter yaitu  M (male) atau  F  (Fimale) ini dapat kita seting dengan menggunakan CHECK. Dengan menggunakan CHECK maka sebuah kolom hanya bisa diisi dengan data yang memenuhi kriteria  dalam  CHECK. Berikut query contoh pengunaan check :
db_contoh=> CREATE TABLE pelanggan (
db_contoh(> nama varchar(35),
db_contoh(> kode_area CHAR(10) CHECK
(length(trim(kode_area)) = 2),
db_contoh(> umur INTEGER CHECK (umur >= 0),
db_contoh(> gender CHAR(1) CHECK (gender IN ('L', 'P')),
db_contoh(> ttl DATE CHECK (ttl BETWEEN '1998-01-01' AND
CURRENT_DATE),
db_contoh(> CHECK (upper(trim(nama)) != 'nita' OR
db_contoh(> upper(trim(nama)) != 'jeki')
db_contoh(> );
CREATE

Penggunaan TRIM
Suatu ketika pasti akan memiliki data yang di dalamnya terdapat spasi kosong yang tidak diperlukan, misalnya spasi ganda. Jika ada masalah seperti ini, kita dapat membersihkan spasi-spasi kosong yang tidak diperlukan menggunakan fungsi TRIM, RTRIM, dan LTRIM. Ketiga fungsi ini memiliki bentuk penggunaan sebagai berikut :
-  RTRIM : digunakan untuk membersihkan spasi kosong yang ada di bagian kanan (Right) String.
-  LTRIM : digunakan untuk membersihkan spasi kosong yang ada di bagian kiri (Left) String.
-  TRIM : digunakan untuk membersihkan spasi kosong yang ada di bagian kiri, kanan, maupun tengah String
Berikut Struktur SQL nya :
Select trim(nama_kolom) from nama_tabel;
Dalam penggunaannya, fungsi TRIM memiliki tiga opsi. Ketiga opsi ini dapat digunakan untuk menentukan  karakter apa yang akan dihapus dari suatu String. Jadi, fungsi TRIM juga dapat menghilangkan karakter tertentu (bukan spasi kosong saja) dari suatu string. Opsinya sebagai berikut :
-  LEADING  : merupakan opsi untuk menghilangkan karakter terpilih yang ada di sebelah kiri. Parameter Leading diartikan sebagai sufik dari karakter yang ada.
-  TRAILING  : merupakan opsi untuk menghilangkan karakter terpilih yang ada di sebelah kanan String. Parameter Trailing diartikan sebagai sufik dari  karakter yang ada.
-  BOTH : merupakan opsi yang dapat menangani parameter Leading maupun Trailing.
Berikut Struktur SQL nya :
Select trim(LEADING ‘karakter, misal : -’ from nama_kolom) from nama_tabel;





B. Hasil Praktikum

Setelah melakukan praktikum ke 7 ini kita dapa mengetahui tentang Sub Query dan Indeks. Kita juga telah mengerjakan beberapa soal tentang sub query dan index berikut adalah hasil praktikum kita yang di kerjakan menggunakan my SQL :

1. Menampilkan nama fakultas dan jumlah mahasiswa yang mampunyai ketentuan nama fakultas yang dimunculkan dengan jumlah mahasiswanya terkecil

ketik queri seperti berikut :



2. Menampilkan nama mahasiswa, nama fakultas, alamat dengan syarat nama fakultas sama dengan ian dan alamatnya tidak sama dengan ismail ;
masukan query seperti gambar di bawah ini :



3. Membuat index di tabel mahasiswa(alamat). Kemudian membuat lagi index yang bersifat unik pada tabel fakultas(fak_nama) kemudian amati perbedaannya ketika memasukkan data yang sama

ketikan queri seperti di bawah ini ;






dan ini ;




4. Membuat kolom nama di mahasiswa menjadi unik dan inputkan 2 data yang sama. Kemudian amati perbedaannya




5. Memindahkan data dari tabel mahasiswa, fakultas ambil kolom nim, nama mahasiswa, alamat, nama fakultas ke tabel baru yang dinamai tabel identitas‟.





6. Membuat contoh penggunaan check pada sub bab pembahasan CHECK. Kemudian masukkan beberapa data baik yang sesuai dengan criteria check maupun yang bukan dan amati perbedaannya



7. Menginput data di tabel mahasiswa dimana pada kolom nama sebelum inputkan karakter dahulukan  dengan spasi dan di akhiri dengan tanda “+” seperti berikut : “   andi cahyono++++”. kemudian munculkan seluruh data dan hilangkan spasi didepan





8. Memunculkan data mahasiswa dengan hilangkan karakter “+” di akhir data dan karakter “a” di awal kata pada kolom nama




C. Evaluasi


Dari hasil kita praktikum , menurut saya sub query dalam postgres ataupun mysql tidak jauh beda namu pada indeks terjadi beberapa perbedaan, yang mana pada penghapusan indeks di postgress dan mysql sedikit berbeda berikut dapat kita lihat perbedaannya

POSTGRESS

drop index nama_index;

MYSQL

alter table nama_table_dari_index drom index nama_index;

Dalam mysql spasi pada count () pun mempengaruhi queri.



D. Kesimpulan


Dari hasil praktikum ini dapat kita simpulkah bahwa sub query pada postgress dan my sql tak jauh beda , adapun beberapa yang dapat kita ambil garis besarnya adalah sub queri ini terdiri dari dua perintah select yang pertama disebut outer query atau disebut induk queri dan yang kedua disebut inner query, unique sendiri berfungsi agar tidak ada kesamaan data yang kita inputkan lebih mirip dengan primari keys.
 serta disini kita juga mengenal tentang check yang mana di gunakan untuk pembatasab nilai masukan dalam sebuah kolom.

E. Daftar Pustaka

Modul Praktikum Desain Basis Data 2014