Dhafiq Sagara adalah orang bodoh yang tidak bisa apa-apa, tapi dia selalu berusaha untuk terus menjadi yang lebih baik. Rasa keingin-tahuannya sangat tinggi, selalu berusaha dan terus berusaha, trial dan error adalah prinsip belajarnya.

Tampilkan postingan dengan label Database. Tampilkan semua postingan
Tampilkan postingan dengan label Database. Tampilkan semua postingan

3 Okt 2011

SQL Function - Query Menjumlahkan Isi Kolom Numeric


Kita bisa menjumlahkan isi kolom yang ada dalam tabel dengan memanfaatkan query database. Sehingga dapat memudahkan kita dalam membuat sebuah aplikasi yang membutuhkan hasil total, seperti aplikasi penjualan dan lain-lain. Kita bisa mengetahui total penjualan dengan menggunakan SQL atau biasa disebut query.

Secara umum, query penjumlahan dirumuskan seperti berikut:
SELECT SUM(kolom_numeric) FROM nama_tabel
atau
SELECT SUM(kolom1 + kolom2 + kolom3) 
FROM nama_tabel1, nama_tabel2, nama_tabel3



Studi Kasus 1

Misalkan kita mempunyai tabel seperti berikut:









Kita ingin tau berapa total penjualan yang telah dilakukan.
Gunakanlah query berikut untuk menjumlahkan isi dalam satu kolom tabel
SELECT sum(harga) FROM penjualan

Sehingga didapatkan hasil seperti berikut:






Studi Kasus 2

Misalkan kita memiliki 3 tabel penjualan, yaitu penjualan_flashdisk, penjualan_harddisk, dan penjualan_mouse.







Dan kita ingin mengetahui jumlah total penjualan dari semua tabel tersebut.
Gunakan query berikut:
SELECT SUM( harga_fd + harga_hd + harga_mouse ) 
FROM penjualan_flashdisk, penjualan_hd, penjualan_mouse


Dan hasilnya adalah seperti berikut:

26 Mei 2011

Menambahkan Fungsi Search Pada Aplikasi Java Desktop

Tutorial ini merupakan lanjutan dari artikel saya pada tahap 1 dan tahap 2 mengenai pembuatan aplikasi sederhana menggunakan java dan database oracle.

Pada tutorial kali ini kita tambahkan fungsi search yaitu pencarian suatu data yang ada didalam database sehingga yang ditampilkan pada tabel adalah isi data sesuai pencarian.




Untuk langkah awal, buatlah satu textfield dan satu button untuk pencarian. Seperti gambar desain berikut:
Spoiler for open Tampilan Dengan Tombol Search:

Kemudian pada sisi Design di Netbeans, double klik pada button Search tersebut atau klik kanan - Events - Action - actionPerformed

Kemudian isikan dengan code berikut:
TableModelMhs model = (TableModelMhs)jTable1.getModel();
String query=null;
query="lower(nama) like '%"+jTextField4.getText()+"%' ";
model.getRecDB(query);
if(model.getRowCount() > 0){jTable1.setRowSelectionInterval(0,0);}
jTable1.tableChanged(new javax.swing.event.TableModelEvent(model));

Pencarian tersebut hanya untuk pencarian nama saja. jTextField4 merupakan nama text field pencarian. jTable1 merupakan nama tabel yang akan menampilkan data.

Berikut screenshot jalannya program:
Spoiler for open Full data:

Spoiler for open Data Hasil Pencarian:

Jika ingin mengembalikan ke posisi awal yaitu pada posisi full data, perlu anda tambahkan tomboh refresh untuk menampilkan seluruh data. Kemudian berikan actionPerformed dengan cara double klik pada button Search tersebut atau klik kanan - Events - Action - actionPerformed dan isikan dengan code berikut:
jTable1.setModel(new TableModelMhs());

jTable1 merupakan nama tabel untuk menampilkan data, sedangkan TableModelMhs merupakan nama tabel model yang telah dibuat sesuai artikel tahap 2
Spoiler for open Tampilan dengan tombol refresh:

6 Feb 2011

Database Link Oracle dan MySQL

Jika sudah mempelajari database link antara oracle-oracle, kali ini kita mempelajari bagaimana konfigurasi database link antara Oracle-MySQL.

Pada dasarnya, konsep database link adalah remote database yang bisa dilakukan melalui localhost maupun host yang berbeda.

Untuk tutorial kali ini, kita akan mencoba melakukan konfigurasi database link Oracle-MySQL melalui host yang berbeda.



Contoh kasus: Oracle sebagai master/server yang meremote data yang ada di MySQL, dan MySQL sebagai client/slave sebagai penyedia data, sehingga kita bisa melakukan insert, update, delete pada MySQL melalui Oracle. Host MySQL memiliki IP address: 172.16.16.3 dan MySQL memiliki database dengan nama student.


KONFIGURASI PADA HOST CLIENT/SLAVE (MYSQL)
  1. Lakukan konfigurasi secara console melalui CommandPrompt (windows) dan terminal (linux).
  2. Login ke MySQL menggunakan username MySQL anda (secara default, username=root)
    mysql -u root
    

    Jika MySQL anda memiliki password, tambahkan opsi -p untuk memasukkan password user MySQL anda
    mysql -u root -p
    
  3. Jika anda telah berhasil masuk ke mysql anda, lakukan konfigurasi berikut:
    grant usage on *.* to root@localhost with grant option;
    
    Yaitu untuk memberi grant agar user root anda dapat diakses oleh host lain.
  4. Memanggil nama database yang akan digunakan untuk database link ini
    use student;
    Pada kasus ini, kita menggunakan database student.
  5. Kemudian mendaftarkan IP dan user yang dibolehkan untuk mengakses data
    grant all on student.* to 'studentuser'@'172.16.16.9' identified by 'studentpass';
    
    Untuk code di atas, yang diperbolehkan untuk mengakses database student ada IP 172.16.16.9 dengan username=studentuser dan password=studentpass
    Username dan password tersebut kita deklarasikan sendiri.
    Perintah di atas itu memberikan privileges untuk semua akses insert, update, delete sehingga host server (172.16.16.9) bisa mengakses seluruh tabel yang ada di database student (student.*).
  6. Jalankan perintah berikut untuk mengijinkan privileges tersebut di atas
    flush privileges;
    


KONFIGURASI ODBC DRIVER PADA HOST SERVER/MASTER (ORACLE)
Setelah host MySQL selesai dikonfigurasikan, sekarang saatnya melakukan konfigurasi pada host Oracle. Untuk konfigurasi koneksi ke MySQL, perlu menggunakan MySQL ODBC Driver. Secara default, windows tidak menyediakan ODBC Driver untuk MySQL, sehingga harus diinstal terlebih dahulu. Silahkan download MySQL ODBC Driver.
  1. Jalankan ODBC Driver (Start -> Control Panel -> Administrative Tool -> Pilih Data Sources ODBC).
  2. Setelah menampilkan jendela ODBC Data Souce Administrator, pilih tab System DSN
  3. Buatlah sebuah data source baru dengan meng-klik tombol Add, kemudian pilihlah MySQL ODBC 5.1 Driver. Kemudian klik tomboh Finish. 
  4. Isi field seperti berikut:
    • Data Source Name = mysqlstudent.
    • Description = MySQL ODBC 5.1 Driver
    • Server = 172.16.16.3 (IP ini merupakan IP dari host yang menggunakan MySQL)
    • User = studentuser (username yang telah didaftarkan oleh host MySQL tersebut)
    • Password = studentpass (password yang telah didaftarkan oleh host MySQL tersebut)
    • Database = pilih database student  
    • Kemudian tes koneksi dengan menekan tombol Test. Jika sukses, silahkan lanjutkan ke langkah selanjutnya.




KONFIGURASI NET SERVICE UNTUK KONEKSI ANTARA ORACLE DAN MYSQL
  1. Buatlah script menggunakan notepad untuk koneksi datasource yang telah dibuat di atas menggunakan script berikut:
    # HS init parameters
    # ODBC data source name
    
     HS_FDS_CONNECT_INFO = mysqlstudent
     HS_FDS_TRACE_LEVEL = 0
    #---------------------------------------------
    mysqlstudent adalah nama Data Source. Kemudian simpan dengan nama initmysqlstudent.ora dan kemudian letakkan pada alamat directory C:\oracle\product\10.2.0\db_1\hs\admin
  2. Pada alamat direktori C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN edit file listener.ora menggunakan notepad. Akan tetapi alangkah baiknya jika file listener.ora anda backup terlebih dahulu untuk mewaspadai jika terjadi error. Kemudian tambahkan script pada SID_NAME = mysqlstudent pada listener.ora. Gunakan script berikut:
    (SID_DESC=
     (SID_NAME=mysqlstudent)
     (ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
     (PROGRAM = hsodbc)
    )
    Lihat gambar berikut untuk penempatan syntax di atas:
  3. Pada service, restart TNSListener (Run -> ketikkan services.msc -> restart service OracleOraDb10g_home1TNSListener).
  4. Pada alamat directory C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN, edit script pada file tnsname.ora menggunakan notepad editor, tetapi alangkah baiknya jika file tersebut di backup terlebih dahulu. Tambahkan script berikut:
    MYSQLSTUDENT=
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = mysqlstudent)
        )
        (HS = OK)
      )
  5. Untuk cek tnsname yang telah ditambahkan tersebut, jalankan Net Manager kemudian pilih Oracle Net Configuration -> Local -> Service Naming. Silahkan apakah nama MYSQLSTUDENT telah muncul di Net Manager tersebut? jika sudah ada, silahkan melanjutkan ke langkah selanjutnya, apabila belum muncul, ulangi langkah di atas.


MEMBUAT DATABASE LINK PADA ORACLE UNTUK MEMANGGIL DATA DI MYSQL
  1. Untuk mencoba koneksi mysqlstudent, buatlah sebuah database link dengan nama mysql_student. Gunakan perintah berikut:
    create database link mysql_student using 'mysqlstudent'
  2. Silahkan lihat data yang ada di MySQL menggunakan query berikut:
    select * from student@mysql_student
  3. Untuk insert data ke MySQL, gunakan query berikut:
    insert into student@mysql_student values ('07560242', 'Mudafiq Riyan P', 'Malang')
  4. Jika sudah berhasil, maka kitapun bisa melakukan insert, update, delete, and view data yang ada di MySQL.

13 Jan 2011

Membuat Kolom Auto Increment Pada Oracle

Dalam membuat kolom auto increment pada MySQL dan pada Oracle memiliki cara yang berbeda. Jika menggunakan MySQL, kita dimudahkan untuk pembuatan auto increment data, karena bisa langsung menggunakan fungsi auto_increment, sedangkan pada Oracle tidak semudah itu. 

Mari kita bahas bagaimana membuat kolom auto increment pada oracle mulai dari pembuatan table sampai insert data.



Create Table
Misalkan kita mempunyai schema table seperti yang dibuat berikut:
create table buku_telepon(
id number,
no_hp varchar2(20),
nama varchar2(50),
alamat varchar2(100),
email varchar2(100)
)
Dan pada id merupakan data yang di auto increment.


Create Sequence
Pada oracle, untuk membuat auto increment itu di atur melalui sequence. Gunakan query berikut:
create sequence buku_telepon_id_seq
start with 1
increment by 1
maksudnya adalah kita membuat sequence dengan nama buku_telepon_id_seq (nama tersebut bebas) yang nilainya dimulai dari angka 1 dan peningkatannya 1 kali. Jadi ketika data diinputkan, maka angka awal untuk kolom auto increment adalah angka 1 dan meningkat 1 kali tiap ada inputan data baru.

Insert Data
Berikut contoh insert data:
insert into buku_telepon values (buku_telepon_id_seq.nextval, '085612345667', 'Dhafiq Sagara', 'Jember', 'mudafiq.riyan@yahoo.com');
Maka akan muncul data tersebut dengan id = 1

Akan tetapi dengan cara tersebut sungguh sangat rumit, karena untuk menginputkan data, kita harus memanggil nama sequence (buku_telepon_id_seq.nextval). Sebenarnya kita pun bisa menyederhanakan caranya dengan memanfaatkan fungsi trigger.

Menggunakan Fungsi Trigger
Berikut syntax trigger untuk membuat auto increment secara otomatis pada oracle.
CREATE OR REPLACE TRIGGER auto_telepon
BEFORE INSERT
ON buku_telepon
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT buku_telepon_id_seq.nextval INTO :NEW.ID FROM dual;
END;
Pada fungsi trigger di atas, id akan secara otomatis di tambahkan ketika data baru ditambahkan.


2 Jan 2011

Membuat Aplikasi Java Sederhana Menggunakan Database Oracle (Tahap 2)

Setelah mencoba tahap 1, kita coba untuk membuat aplikasi untuk CRUD (Create, Read, Update, Delete) pada data di Oracle.

Kita mencoba untuk membuat aplikasi tersebut bisa select, insert, update delete dengan sederhana. Mulai dari menampilkan data di tabel java, sampai memberi fungsi CRUD di dalamnya.







Langsung aja deh gak usah banyak cingcong ^_^
  1. Buatlah New - Java Class, kemudian beri nama TableModelMhs. Berikut source codenya:
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.Vector;
    import javax.swing.table.AbstractTableModel;
    
    public class TableModelMhs extends AbstractTableModel {
    //daftar judul-judul kolom tabel
    
    private String kolom[] = {"Nim", "Nama", "Alamat"};
    // definisi variabel Vector untuk menyimpan data dari database
    private Vector baris = new Vector();
    // set koneksi ke database
    // objek Connection kita ambil dari objek Login yang telah
    // dibuat di class FormLogin
    // Mengapa dapat kita akses? karena objek Login kita definisikan 
    // sebagai public static
    private Connection conn = LoginForm.myLgn.getConnDB();
    
    public TableModelMhs() {
    getRecDB(null);
    }
    
    public void finalize() {
    baris = null;
    conn = null;
    }
    
    // method ini berfungsi melakukan query ke database server
    // dan menampung hasilnya (dari ResultSet) ke masing-masing Vector    
    public void getRecDB(String kondisi) {
    String query;
    
    // persiapkan perintah SQL yang akan dijalankan di database server
    query = "SELECT * FROM mahasiswa";
    if (kondisi != null) {
    query = query + " WHERE " + kondisi;
    }
    query = query + " ORDER BY nim asc";
    
    try {
    // buat objek Statement dari Connection
    //  agar dapat mengeksekusi query
    Statement statement = conn.createStatement();
    ResultSet resultSet = statement.executeQuery(query);
    
    // kosongkan semua Vector
    baris.removeAllElements();
    
    // jika ada record yang diberikan dari database server
    // baca record demi record sampai selesai
    while (resultSet.next()) {
    // simpan ke dalam array masing-masing field
    //berhubung pada tabel mahasiswa ini hanya terdapat 3 kolom (nim, nama, alamat) maka dideklarasikan 3 object yang disimpan dalam array
    Object[] r = {resultSet.getString(1), resultSet.getString(2), resultSet.getString(3)};
    // tambahkan ke Vector
    baris.addElement(r);
    
    //beri nilai null untuk mencega garbage
    r = null;
    }
    } catch (java.sql.SQLException e) {
    System.out.println("Error : " + e);
    }
    query = null;
    }
    
    public int getColumnCount() {
    return kolom.length;
    }
    
    public int getRowCount() {
    return baris.size();
    }
    
    public Object getValueAt(int rowIndex, int columnIndex) {
    if (!baris.isEmpty()) {
    Object r[] = (Object[]) baris.elementAt(rowIndex);
    return r[columnIndex];
    } else {
    return null;
    }
    }
    
    public String getColumnName(int columnIndex) {
    return kolom[columnIndex];
    }
    
    // method untuk mengubah nilai pada sel Tabel
    public void setValueAt(Object aValue, int row, int column) {
    Object[] r = (Object[]) baris.elementAt(row);
    r[column] = aValue;
    baris.setElementAt(r, row);
    fireTableCellUpdated(row, column);
    }
    
    public boolean isCellEditable(int row, int column) {
    return false;
    }
    }
  2. Kemudian buatlah New - JFrame Form untuk membuat tampilannya - beri nama misalkan FormMahasiswa. Pasangkan tabel pada form ini (Palette - Swing Control - Table). Misalkan tampilan formnya adalah seperti gambar berikut:
  3. Klik kanan pada jTable - Properties - pilih pada model - pada pilihan drop down (set jTable1's model property using) pilih Costum code - isikan dengan new TableModelMhs() - Kemudian tekan OK - Close window properties. Yang dipanggil adalah class TableModel yang telah dibuat di atas.
  4. Kemudian pada menu utama, link-kan menu data mahasiswa pada FormMahasiswa yang telah dibuat diatas.
  5. Caranya double klik pada button data mahasiswa, atau klik kanan pada button data mahasiswa kemudian pilih Events - Actions - actionPerformed, isikan dengan syntax berikut:
    new FormMahasiswa().setVisible(true);//memanggil jendela FormMahasiswa
    this.setVisible(false);//menutup jendela dari class itu sendiri
    Memanggil class FormMahasiswa yang kemudian di tampilkan dengan perintah setVisible(true).
  6. Pada button Exit, lakukan hal yang sama seperti perintah 5 (double klik pada button Exit) kemudian isikan code berikut untuk mematikan proses/exit proses:
    System.exit(0);
  7. Cobalah untuk menjalankan program, Run LoginForm kemudian login sesuai user dan password pada oracle anda.
  8. Pilih menu Data Mahasiswa, maka data dari oracle anda akan ditampilkan pada jTable
  9. Jika ingin memberi fungsi pada tombol Back, beri actionPerformed dan tambahin script berikut:
    this.setVisible(false); //untuk menutup jendela dari class itu sendiri yaitu FormMahasiswa
    new MenuForm().setVisible(true);//kemudian menampilkan menu utama 


Setelah data berhasil ditampilkan, kita berikan fungsi CRUD:
  1. Pada Class FormMahasiswa tersebut, tambahkan import berikut:
    import java.sql.SQLException;
    import java.sql.Statement;
    import javax.swing.JOptionPane;
  2. Berikan actionPerformed pada tombol insert, dan tambahkan syntax berikut:
    koneksiOracle co = new koneksiOracle(); //membuat object dari class koneksiOracle
    Statement st = co.sambung();
    int a=0;
    try {
    String nim =jTextField1.getText(); //textfield nim
    String nama =jTextField2.getText(); //textfield nama
    String alamat =jTextField3.getText();//textfield alamat
    
    
    String sql = "insert into mahasiswa values('" +nim+ "', '"+nama+"','"+alamat+"')";
    
    try {
    a =st.executeUpdate(sql);
    } catch (Exception se) {
    se.printStackTrace();
    }
    if(a==0){
    JOptionPane.showMessageDialog(null, "DATA GAGAL DISIMPAN \n Silahkan Coba Lagi");
    }
    else{
    JOptionPane.showMessageDialog(null, "DATA TERSIMPAN");
    //mengosongkan textfield jika data telah tersimpan
    jTextField1.setText("");
    jTextField2.setText("");
    jTextField3.setText("");
    jTable1.setModel(new TableModelMhs());
    }
    
    } catch (Exception se) {}
  3. Pada actionPerformed Update:
    koneksiOracle co = new koneksiOracle();
    Statement st = co.sambung();
    int a = 0;
    try {
    String nim = jTextField1.getText();
    String nama = jTextField2.getText();
    String alamat = jTextField3.getText();
    String sql = "update mahasiswa set nim='" + nim + "', nama='" + nama + "', alamat='" + alamat + "'";
    
    
    try {
    a = st.executeUpdate(sql);
    } catch (Exception se) {
    se.printStackTrace();
    }
    if (a == 0) {
    JOptionPane.showMessageDialog(null, "DATA GAGAL DIUBAH \n Silahkan Coba Lagi");
    } else {
    JOptionPane.showMessageDialog(null, "DATA TELAH DIUBAH");
    jTable1.setModel(new TableModelMhs());
    }
    } catch (Exception se) {
    }
  4. Pada actionPerformed Delete:
    koneksiOracle co = new koneksiOracle();
    Statement st = co.sambung();
    
    String nim = jTextField1.getText();
    String sql = "delete from mahasiswa where nim='" + nim + "'";
    int proses = 0;
    try {
    proses = st.executeUpdate(sql);
    } catch (SQLException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
    if (proses != 1) {
    JOptionPane.showMessageDialog(null, "DATA GAGAL DIHAPUS \n Ulangi Sekali Lagi");
    } else {
    JOptionPane.showMessageDialog(null, "DATA BERHASIL DIHAPUS");
    jTextField1.setText("");
    jTable1.setModel(new TableModelMhs());
    }
  5. Silahkan di coba insert data baru, update berdasarkan nim yang dipanggil di textfield nim, dan delete berdasarkan nim yang dipanggil di textfield nim. 
Semoga sukses!!!

1 Jan 2011

Membuat Aplikasi Java Sederhana Menggunakan Database Oracle (Tahap 1)

Tujuan dari tutorial ini adalah untuk membuat aplikasi Java yang terkoneksi dengan database Oracle. Pada tahap 1 ini saya akan menerangkan mengenai bagaimana membuat form login untuk user di Oracle. Saya terangkan dari tiap langkahnya membuat project sampai berhasil login user Oracle melalui aplikasi Java. Sebelum mencoba tutorial ini, alangkah baiknya jika memahami tutorial saya tentang koneksi Java dan Oracle.






Langsung saja ikuti step by step berikut:
  1. Buatlah new project di Netbeans (New Project - Java - Java Application). Kemudian beri nama project tersebut.
  2. Tambahkan library ojdbc.jar yang ada di directory oracle C:\oraclexe\app\oracle\product\10.2.0\server\jdbc\lib
  3. Pada project baru yang telah dibuat tersebut, buatlah Class baru (New - Java Class) dan beri nama koneksiOracle. Kemudian berikut isi source code koneksi dengan oracle.
    import java.sql.*;
    
    public class koneksiOracle {
    
    String db = "jdbc:oracle:thin:@localhost:1521:XE";
    String user = "mhs"; //ini user oracle
    String pass = "taurus"; //password oracle
    Statement stm = null;
    Connection co = null;
    
    public koneksiOracle() {
    }
    
    public Statement sambung() { //method utk memanggil driver oracle
    
    try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    } catch (ClassNotFoundException e) {
    
    e.printStackTrace();
    }
    
    try {
    co = DriverManager.getConnection(db, user, pass);
    } catch (SQLException e) {
    
    e.printStackTrace();
    }
    
    try {
    stm = co.createStatement();
    } catch (SQLException e) {
    
    e.printStackTrace();
    }
    
    return stm;
    }
    }
  4. Buatlah class untuk action dari aplikasi login dengan nama class LoginAction.
    public class LoginAction {
    
    private String username;
    private String password;
    private String koneksi = "localhost";
    private boolean isOK = false;
    private String cURLDB;
    private java.sql.Connection conn;
    
    /** Creates a new instance of Login */
    public LoginAction() {
    this.username = "";
    this.password = "";
    }
    
    public LoginAction(java.lang.String cUser, java.lang.String passwd) {
    this.username = cUser;
    this.password = passwd;
    }
    
    @Override
    protected void finalize() {
    conn = null;
    }
    
    public String getUsername() {
    return this.username = "";
    }
    
    public String getPassword() {
    return this.password = "";
    }
    
    public boolean cekLogin() {
    try {
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    } catch (java.lang.ClassNotFoundException cnfe) {
    System.out.println("Error loading driver: " + cnfe);
    } catch (java.lang.InstantiationException e) {
    System.out.println("Error loading driver: " + e);
    } catch (java.lang.IllegalAccessException e) {
    System.out.println("Error loading driver: " + e);
    }
    
    String server = "127.0.0.1";
    String port = "1521";
    String sid = "XE";
    String url = "jdbc:oracle:thin:@" + server + ":" + port + ":" + sid;
    try {
    conn = java.sql.DriverManager.getConnection(url, username, password);
    conn.setAutoCommit(true);
    isOK = true;
    cURLDB = url;
    } catch (Exception e) {
    System.out.println(e);
    isOK = false;
    }
    return isOK;
    }
    
    public void closeConnDB() {
    try {
    conn.close();
    } catch (Exception e) {
    System.out.println("Tidak dapat menutup koneksi database!" + e);
    }
    conn = null;
    }
    
    public java.sql.Connection getConnDB() {
    return this.conn;
    }
    
    public boolean getIsOK() {
    return this.isOK;
    }
    }
  5. Buatlah form untuk frame login (New - JFrame Form) dan beri nama LoginForm. Seperti tampilan login berikut.
    Ingat bahwa field untuk password gunakan komponen Password Field yang ada di Palette. Dan untuk username gunakan Text Field.
  6. Pada button OK, klik kanan - Events - Actions - actionPerformed atau langsung double klik pada button OK. Kemudian tambahkan code berikut:
    String pass = new String(jPasswordField1.getPassword());
    myLgn = new LoginAction(jTextField1.getText(), pass);
    
    
    if (myLgn.cekLogin()) {
    setVisible(false);
    JOptionPane.showMessageDialog(this,"Connection Succes",
    "Welcome",JOptionPane.INFORMATION_MESSAGE);
    new MenuForm().setVisible(true);
    } else {
    
    JOptionPane.showMessageDialog(null,
    "Login Anda tidak diterima server.\n" +
    "Silahkan di periksa ulang!", "Konfirmasi...",
    javax.swing.JOptionPane.ERROR_MESSAGE);
    }
  7. Kemudian tambahkan code yang bercetak tebal berikut pada code LoginForm tersebut:
    import javax.swing.JOptionPane; 
    
    public class LoginForm extends javax.swing.JFrame {
    
    public static LoginAction myLgn; 
    
    /** Creates new form LoginForm */
    public LoginForm() {
    initComponents();
    }
  8. Buatlah form untuk menu utama (New - JFrame Form - beri nama MenuForm), dimisalkan setelah login berhasil maka form yang akan dipanggil adalah menu utama tersebut. Misal menu utamanya tampilannya seperti ini:
  9. Pada class main dari MenuForm tersebut, silahkan di hilangkan atau diberi tanda comment seperti ini agar tidak menggangu saat running project.
    //    public static void main(String args[]) {
    //        java.awt.EventQueue.invokeLater(new Runnable() {
    //            public void run() {
    //                new MenuForm().setVisible(true);
    //            }
    //        });
    //    }
  10. Kita coba apakah berhasil login atau tidak. Run Project.
    Masukkan username dan password dari user di Oracle anda.

    Konfirmasi bahwa koneksi berhasil.

    Maka akan masuk pada form menu utama:

Database Link Oracle

Konsep utama dari sistem basisdata distribusi adalah database link. Database Link adalah suatu koneksi antara dua database fisik yang memungkinkan client untuk mengakses datanya sebagai satu databaselogic.


Database link merupakan sebuah pointer yang didefinisikan sebagai satu-arah jalur komunikasi dari server Oracle Database kepada server database lainnya. Koneksi database link memungkinkan user-user lokal untuk mengakses data pada database remote. Agar koneksi ini berhasil, setiap database pada sistem distribusi harus memiliki global database name yang unik pada domain jaringan.


Database link bisa bersifat private (pribadi) atau public (umum). Jika bersifat private, maka hanya user yang telah membuatnya memiliki akses dan jika link adalah public maka semua user database bisa menggunakannya untuk mengakases. Satu perbedaan signifikan mengenai database link adalah bagaimana caranya koneksi dengan database remote.

Silahkan download artikel yang saya tulis di ilmukomputer.com: Mudafiq-DatabaseLinkOracle

4 Des 2010

Fragmentasi Data Dalam Database Terdistribusi

Fragmentasi merupakan sebuah proses pembagian atau pemetaan dari tabel-tabel berdasarkan kolom-kolom dan baris-baris data menjadi unit data terkecil.


Fragmentasi Data merupakan sebuah proses pembagian atau pemetaan database  dimana database dipecah-pecah berdasarkan kolom dan baris yang kemudian disimpan didalam site atau unit komputer yang berbeda dalam suatu jaringan data, sehingga memungkinkan untuk pengambilan keputusan terhadap data yang telah terbagi. Data yang telah dipecah-pecah masih memungkinkan untuk digabungkan lagi dengan maksud untuk kelengkapan pendataan.

Dalam melakukan fragmentasi data harus memenuhi beberapa kondisi agar proses fragmen tersebut benar, diantaranya:
  1. Completeness, sebuah unit data yang masih dalam bagian dari relasi utama, maka data harus berada dalam satu fragmen. Ketika ada relasi, pembagian datanya harus menjadi satu kesatuan dengan relasinya.
  2. Reconstruction, sebuah relasi asli dapat dibuat kembali atau digabungkan kembali dari sebuah fragmen. Ketika telah dipecah-pecah, data masih memungkinkan untuk digabungkan kembali dengan tidak mengubah struktur data.
  3. Disjointness, data didalam fragmen tidak boleh diikutkan dalam fragmen lain agar tidak terjadi redundancy data, kecuali untuk atribut primary key dalam fragmentasi vertikal.

Adapun aturan untuk pelaksanaan fragmentasi:
  1. Fragmen dibentuk dari predikat yang telah dipilih dan diasosiasikan dengan transaksi yang terdapat dalam database. Predikat secara spesifik mencantumkan nilai atribut yang digunakan dalam format conjuctive (AND) dan disjunctive (OR) yang digunakan untuk memilih command, dan kolom (record) yang berisi nilai yang sama dengan format fragment.
  2. Fragment harus terpisah dan gabungan dari fragment-fragment tersebut harus terdiri atas keseluruhan fragment. Fragment yang mendahului akan menjadi lebih sulit untuk dianalisis dan diimplementasikan.
  3. Fragment yang terbesar adalah keseluruhan tabel, fragment terkecil merupakan sebuah record. Fragment harus didesain sedemikian rupa untuk memelihara keseimbangan diantara perbedaan ini.


Jenis Fragmentasi Data:

Fragmentasi data dapat diselesaikan melalui beberapa cara, antara lain fragmentasi horizontal, fragmentasi vertikal, dan fragmentasi campuran (mixed atau hybrid):
  1. Fragmentasi Horizontal terdiri dari tuple dari fragment global yang kemudian dipecah-pecah atau disekat menjadi beberapa sub-sets. Penyekatan tipe ini sangat berguna didalam database terdistribusi, dimana setiap sub-setsdapat berisi data yang memiliki properti secara umum. Fragmentasi horizontal didefinisikan menurut sebuah kondisi atau predikat yang menyatakan bahwa tuple yang ada telah mencukupi.

  2. Fragmentasi Vertikal akan membagi lagi atribut-atribut dari fragment global yang tersedia menjadi beberapa grup. Bentuk yang paling simple dari fragmentasi vertical adalah dekomposisi, dimana sebuah row-id yang unik dapat disertakan dalam setiap fragment untuk menjamin dan memungkinkan terjadinya proses rekonstruksi melalui sebuah operasi join. Dengan kata lain bahwa fragmentasi jenis ini akan membagi sebuah data menjadi beberapa tabel yang atributnya saling terkait.

  3. Fragmentasi Mixed/Hybrid
    Berikut gambaran dari fragmentasi hybrid.

    Relasi A seperti yang digambarkan diatas telah mengalami tiga tingkatan frakmentasi (bukan lima) – dua kali fragmentasi horizontal dan satu kali fragmentasi vertical. Fragmentasi horizontal pertama membagi relasi menjadi dua bagian yaitu H1 dan H2. kemudian fragmentasi kedua adalah fragmentasi vertical terhadap fragment horizontal H2, yang membagi fragment horizontal H2 menjadi dua bagian secara vertical yang kemudian disebut H2V1 dan H2V2. dan kemudian fragmentasi terakhir yang dilakukan adalah fragmentasi horizontal terhadap fragment vertical pertama yaitu H2V1.
    1. Pada kenyataannya banyak aplikasi/query yang membutuhkan fragmentasi yang lebih kompleks daripada hanya menggunakan fragmentasi vertical atau fragmentasi horizontal saja.
    2. Teknik penggunaan tipe fragmentasi ini adalah dengan mengaplikasikan teknik fragmentasi horizontal terlebih dahulu yang kemudian diikuti dengan teknik fragmentasi vertical kepada satu atau lebih fragment horizontal yang telah dibentuk sebelumnya.
    3. Teknik fragmentasi mixed merupakan sebuah proses yang menggabungkan teknik fragmentasi horizontal dan vertical.

    Sehingga dapat disimpulkan bahwa Fragmentasi hybrid atau mixed merupakan penggabungan dari penggunaan kedua proses fragmentasi data yang telah dijelaskan diatas (fragmentasi horizontal dan vertikal).

Pengenalan Database Terdistribusi

Database Terdistribusi adalah sekumpulan data yang saling terhubung secara logic dan digunakan bersama-sama dalam suatu jaringan komputer. Dengan kata lain, distribusi data ini memungkinkan unit lain dapat mengakses data dari suatu unit tertentu.

DMBS itu apa sih? DBMS merupakan kependekan dari Database Managemen System merupakan perangkat lunak yang mengatur dan menangani semua pengaksesan database yaitu bisa insert, update, delete, dan memelihara database. DBMS itu yang umum dipakai diantaranya adalah MySQL, PostgreSQL, Oracle, Access, dan lain-lain.

DBMS (Database Management System) Terdistribusi adalah sebuah perangkat lunak yang membuat pendistribusian data dan memberikan mekanisme akses data yang akan membuat basis data ini transparan kepada user yang menggunakan.



Data akan disimpan dalam beberapa site dimana setiap site secara logic memiliki sebuah processor, dimana processor dari site yang berlainan akan terhubung didalam sebuah jaringan computer, sehingga tidak akan ditemukan adanya multiprocessor.

Tiga faktor penting yang dapat menjadi acuan pada saat mendesain basis data terdistribusi :
  1. Fragmentasi data = dimana data akan dipecah-pecah kedalam unit logic yang kemudian akan disimpan dalam site yang berbeda.
  2. Replikasi data = merupakan salinan dari tiap-tiap fragment yang dapat pula disimpan dalam beberapa site.
  3. Alokasi data = tiap fragment data harus dialokasikan kepada satu atau beberapa site, dimana fragment tersebut akan disimpan.

Tipe Database Terdistribusi
  1. Homogen adalah suatu sistem yang menjalankan tipe DBMS yang sejenis di setiap unit distribusi data. Misal: MySQL didistribusikan dengan MySQL. Oracle dengan Oracle. Jadi keterhubungan DBMS tersebut antara DBMS yang sama.
  2. Heterogen adalah suatu sistem yang menjalankan tipe DBMS yang berbeda di setiap unit distribusi datanya, baik secara relational DBMS ataupun non relational DBMS. Misalkan di suatu unit memakain DBMS Oracle, dan di unit lain memakain DBMS PostgreSQL, akan tetapi DBMS tersebut tetap terkait/terhubungkan.

11 Nov 2010

Option Select (Drop Down Item) - Mengambil List Dari Database

Option Select pada tag HTML ini berfungsi untuk membuat daftar pilihan yang ditampilkan berupa kontrol drop down.

Jika daftar pilihan pada option select dibuat manual, tidak akan susah. Akan tetapi bagaimana jika menampilkan pilihannya tersebut berdasarkan isi dari database???


Berikut ini adalah contoh syntax untuk menampilkan option select kontrol berdasarkan isi dari database. Data yang ditampilkan pada option select adalah nama-nama toko.
<select name = "id_tokomakanan"/>
<?php
        $query="Select * from toko";
        $rs = mysql_query($query);
        while($result_data = mysql_fetch_array($rs)){
            list($id_toko, $nama_toko)=$result_data;
?>
        <option name="id_tokomakanan"><?php echo "$nama_toko"?></option>
<?php
    }
?>
</select>

Radio Button - Mengambil List Dari Database

Radio Button adalah fungsi HTML yang berguna untuk menandai pilihan item.

Jika kita mendeklarasikan list radio button secara manual memang tidak ada masalah, tapi jika list radio button tersebut berasal dari list database bagaimana caranya yaa.....


Berikut akan menampilkan list dari nama_toko yang ada pada tabel toko:
<?php 
$result = mysql_query("select * from toko");
    while($row = mysql_fetch_array($result)){
        list($id_toko,$nama_toko)=$row;                    
            echo "<input type='radio' name='".$row['id_toko']."'>".$nama_toko."<br/>";
    }
?>

Berikut yang ditampilkan:

5 Okt 2010

Partisi Index dan Partisi Tabel Pada Database Oracle

Sebenarnya inti dari partisi itu adalah membagi ruang untuk data-data tertentu. Jika dikaitkan dengan DBMS,Partisi tabel adalah membagi data suatu tabel menjadi beberapa bagian/kriteria. Misal tabel mahasiswa, dipartisi/dibagi berdasarkan NIM. Sehingga dapat diketahui angkatan mahasiswa berdasarkan NIMnya. Dan konsep partisi ini dapat dikembangkan sebagai DSS (Decision Support System) untuk pengambilan keputusan tertentu.

Sedangkan index digunakan untuk mempercepat perncarian data didalam tabel database relasional. Sehingga dengan adanya index partition, memungkinkan untuk meningkatkan performa pencarian data.

Berikut adalah konsep umum partisi tabel:

Dari suatu data yang besar, dipecah-pecah lagi per-bagian berdasarkan kriteria-kriteria tertentu. Pada gambar di atas, dari suatu data dibagi berdasarkan bulan.

Manfaat lain dari partitioning adalah tiap-tiap segment (partisi atau subpartisi) bisa ditaruh di tablespace yang berbeda, sehingga kita mendapat manfaat dari spreading (menyebar) tablespace, yaitu penyebaran I/O dan mengurangi resiko loss data karena tablespace corrupt.

Ada 3 metode utama partisi:
  1. Range partition
    Range partition adalah pembagian suatu tabel ke dalam beberapa bagian berdasarkan range (rentang) nilai tertentu. Range partition ini cocok digunakan pada kolom yang memiliki distribusi nilai yang merata.
  2. List partition
    Konsep pada list partition adalah data dikelompokkan berdasarkan nilai datanya. Cocok untuk kolom yang variasi nilainya tidak banyak. Misal data kota berdasarkan wilayah provinsi. List: Jember, Malang, Surabaya pada partisi Jawa Timur; Bandung, Cirebon pada partisi Jawa Barat. Jadi list partition ini berdasarkan list dari suatu segmen, sehingga data-datanya di list terlebih dahulu.
  3. Hash partition
    Penggunaan hash partition ini jika tidak cocok dengan RANGE ataupun LIST Partition. Penentuan “nilai mana di taruh di partisi mana” itu diatur secara internal oleh Oracle (berdasarkan hash value). Kenapa harus memaksakan memakai partisi sementara tidak cocok dengan RANGE ataupun LIST? Jika ingin mendapat manfaat dari filosofi PARTITIONING yang sebenarnya di mana data disebar ke segment-segment yang berbeda.

Dan 2 metode composite (gabungan):
  1. Composite range-list partition
    Konsep composite range-list partition ini menggabungkan partisi range dan list. Jika pada tabel mahasiswa, NIM dipartisi secara range, sedangkan untuk mendapatkan NIM sekian yang tinggal di wilayah provinsi Jawa Timur itu apa saja, maka menggunakan list. Jadi dipartisi kemudian di list berdasarkan kriteria tertentu.
  2. Composite range-hash partition
    Composite range-hash partition merupakan konsep menggabungkan range partition dan hash partition. Sehingga partisi-partisi yang telah dibuat berdasarkan range/rentang akan dipartisi lagi ke dalam beberapa bagian berdasarkan hash.

Untuk lebih memahami mengenai konsep partisi index dan tabel, berikut saya share mengenai percobaan-percobaan menggunakan Oracel. Silahkan download dan pelajari mengenai Mudafiq-PartisiPadaOracle.pdf

24 Agu 2010

Trigger Pada Oracle 10g

Trigger adalah blok PL/SQL yang disimpan dalam database dan akan diaktivasi ketika kita melakukan statement-statement SQL (DELETE, UPDATE, dan INSERT) pada sebuah tabel.

Aktivasi trigger didasarkan pada event yang terjadi di dalam tabel tersebut sehingga trigger dapat membantu dalam menjaga integritas dan konsistensi data.

Implementasi trigger yang sering ditemui dalam dunia nyata adalah untuk meng-set dan mengubah nilai kolom dalam suatu tabel sehingga validasi nilai dari tabel tersebut akan terjaga.

Adanya trigger dalam database akan meringankan kita dalam pembuatan aplikasi karena di dalam aplikasi yang kita buat, kita tidak perlu lagi untuk melakukan validasi data.


Misalkan pada kasus untuk dosen wali mahasiswa. Data yang ada pada dosen adalah jumlah mahasiwa yang menjadi wali dosen tersebut. Sedangkan pada mahasiswa, hanya menyantumkan NIP dari dosen walinya. Sehingga ketika ada mahasiswa yang ditambahkan, tentunya dosen wali yang bersangkutan akan menambahkan pula jumlah mahasiswa yang di walikan. Tentu butuh adanya trigger agar data yang diinputkan tidak satu untuk mahasiswa, satu lagi untuk dosen.
Untuk lebih memahami mengenai trigger, silahkan download e-book penggunaan trigger pada oracle 10g Mudafiq-TriggerOracle.pdf

Database Link Pada PostgreSQL

Database Link adalah suatu koneksi antara dua database fisik yang memungkinkan client untuk mengakses datanya sebagai satu database logic. Database link merupakan sebuah pointer yang didefinisikan sebagai satu-arah jalur komunikasi dari server Database kepada server database lainnya. Koneksi database link memungkinkan user-user lokal untuk mengakses data pada database server secara remote. Dengan kata lain, pengaksesan data ini secara langsung meremote database di server.

Setiap DBMS pasti memiliki konsep database link. Bagaimana melakukan remote database ke server, atau bisa dikatakan konsep dblink pada PostgreSQL.

Untuk lebih memahami bagaimana konsep dblink pada postgreSQL, mari kita melakukan percobaan antara 2 host komputer. 1 host bertindak sebagai server pusat, dan 1 host yang lain bertindak sebagai client yang melakukan remote ke server pusat.


Langkah-langkah yang perlu dilakukan untuk melakukan dblink di postgreSQL adalah sebagai berikut:
  1. Daftarkan IP client pada postgreSQL server. Caranya:
    • Pada postgreSQL yang ada di server, pilih menu ToolsServer Configurationpg_hba.conf.
    • Kemudian daftarkan IP Client seperti gambar dibawah ini.
      IP Address: 192.168.19 merupakan IP client yang diijinkan melakukan remote database ke server pusat dan /24 setelah IP merupakan subnet mask yaitu setara 255.255.255.0. Jika menginginkan hanya database tertentu saja yang dibolehkan untuk diakses, pilih nama database. Jika pada Database memilih all berarti membolehkan semua database untuk diakses oleh client.
    • Setelah selesai, silahkan tekan tombol OK

  2. Setelah IP Client didaftarkan di server, lakukan tes koneksi menggunakan query:
    select dblink_connect('host=192.168.1.4 user=postgres password=keuangan dbname=sagara')
    host=192.168.1.4 merupakan IP dari server. user=postgres merupakan nama user dari postgreSQL yang ada diserver. password=keuangan merupakan password dari postgreSQL server. dbname=sagara adalah nama database di server yang akan diakses oleh client. Pastikan bahwa koneksi berhasil alias OK.

  3. Melihat isi database yang ada di postgreSQL server. Menggunakan script SQL berikut:
    select * from dblink('host=192.168.1.4 user=postgres password=keuangan dbname=sagara', 'select * from pegawai')
    return (id int, nama varchar, asal varchar, jabatan varchar)
    Keterangan query return adalah merupakan pengembalian nama dan tipe kolom yang ada pada tabel pegawai. Jadi jika ketika tabel itu memiliki 4 kolom, maka deklarasikan ke-4 kolom tersebut beserta tipe atributnya.

  4. Insert data melalui dblink. Menggunaka query:
    select dblink_exec('host=192.168.1.4 user=postgres password=keuangan dbname=sagara',
    'insert into pegawai values (4, "Fitrika", "Balikpapan", "Sekretaris")')

  5. Update data melalui dblink. Menggunakan query:
    select dblink_exec('host=192.168.1.4 user=postgres password=keuangan dbname=sagara',
    'update pegawai set id_pegawai=5, nama_pegawai="Charisma", asal_pegawai="Magetan",
    jabatan_pegawai="Sekretaris 2" where id_pegawai=4 ')

  6. Delete data melalui dblink. Menggunakan query:
    select dblink_exec('host=192.168.1.4 user=postgres password=keuangan dbname=sagara',  'delete from pegawai where id_pegawai=3')
Untuk lebih jelasnya, silahkan download e-book yang telah saya tulis: Mudafiq-DBLink-PostgreSQL.pdf

17 Jun 2010

List Partition Table - PostgreSQL

List partition merupakan pembagian tabel yang berdasarkan list yang telah dideklarasikan terlebih dahulu.
Misal pada sebuah kasus, data mengenai kota asal pegawai yang dikelompokkan berdasarkan provinsi. Jawa Timur: Jember, Malang, Surabaya, Banyuwangi, dll. Jawa Barat: Cirebon, Tangerang, Bandung, dll. Jawa Tengah: Solo, Semarang, dll. Jadi list kota dideklarasikan terlebih dahulu, sehingga ketika data diinputkan, maka data pegawai akan dikelompokkan berdasarkan wilayah provinsinya.


IMPLEMENTASI LIST PARTITION
Konsep list partition hampir sama dengan range partition, hanya saja kalau list partition ini mendaftarkan terlebih dahulu apa yang akan dikelompokkan. Pada contoh kasus di atas, harus mendaftarkan terlebih dahulu nama-nama kota ditiap provinsi.
  1. Membuat tabel pegawai sebagai tabel utama:
    create table pegawai (
    nip integer not null primary key,
    nama_pegawai varchar(50),
    kota_asal_pegawai varchar(20),
    jabatan_pegawai varchar(20)
    )
  2. Membuat list partition tabel untuk kota asal pegawai:
    create table pegawai_jatim(
    check (kota_asal_pegawai in ('jember', 'malang', 'surabaya', 'sidoarjo', 'bojonegoro', 'pasuruan'))
    )inherits(pegawai);


    create table pegawai_jateng(
    check (kota_asal_pegawai in ('semarang', 'solo', 'salatiga', 'blora', 'pekalongan', 'magelang'))
    )inherits(pegawai);


    create table pegawai_jabar(
    check (kota_asal_pegawai in ('bandung', 'cirebon', 'tangerang', 'bogor', 'depok', 'purwakarta'))
    )inherits(pegawai);
  3. Agar data yang disisipkan/diinputkan masuk pada partisi yang sesuai, maka perlu adanya aturan secara kompleks yang mengatur hal ini. Gunakan query seperti berikut:
    create rule kota_asal_pegawai_jatim as
    on insert to pegawai where
    (kota_asal_pegawai in ('jember', 'malang', 'surabaya', 'sidoarjo', 'bojonegoro', 'pasuruan'))
    do instead
    insert into pegawai_jatim values (new.nip,
    new.nama_pegawai,
    new.kota_asal_pegawai,
    new.jabatan_pegawai);

    create rule kota_asal_pegawai_jateng as
    on insert to pegawai where
    (kota_asal_pegawai in ('semarang', 'solo', 'salatiga', 'blora', 'pekalongan', 'magelang'))
    do instead
    insert into pegawai_jateng values (new.nip,
    new.nama_pegawai,
    new.kota_asal_pegawai,
    new.jabatan_pegawai);

    create rule kota_asal_pegawai_jabar as
    on insert to pegawai where
    (kota_asal_pegawai in ('bandung', 'cirebon', 'tangerang', 'bogor', 'depok', 'purwakarta'))
    do instead
    insert into pegawai_jabar values (new.nip,
    new.nama_pegawai,
    new.kota_asal_pegawai,
    new.jabatan_pegawai);
  4. Insert data:
    insert into pegawai values (1, 'Mudafiq Riyan', 'jember', 'direktur utama');
    insert into pegawai values (2, 'Ivan Prasetya', 'surabaya', 'kepala bagian');
    insert into pegawai values (3, 'Dhafiq Sagara', 'bandung', 'karyawan');
    insert into pegawai values (4, 'Dwi Sari', 'magelang', 'karyawan');
  5. Pengecekan:
    • Keseluruhan data pegawai
      select * from pegawai

    • Data pegawai dari Jawa Timur
      select * from pegawai_jatim
    • Data pegawai dari Jawa Tengah
      select * from pegawai_jateng
    • Data pegawai dari Jawa Barat
      select * from pegawai_jabar