antara cinta kamu dia , dan aku :)



entah .. Aku gak tau , kepada siapa hatiku akan ku berikan !
Dan entah , aku tidak tau siapa yang lebih dulu hadir dalam hidupku ..

Aku hanya berfikir , siapa yang lebih dulu mencintiku?Ataukah mungkin kamu dan dia hadir di tengah-tengah cintaku ?


aku seolah patung yang berada di tengah-tengah cintaku untuk kamu dan dia, bahkan aku tidak dapat bergerak seperti es yang membeku ketika kamu memaksaku tuk meninggalkan dia..

Salahkah aku yang telah mencintaimu dan juga dia , seketika aku berpikir salahkah hati ini ?
dia kekasihku dan kamu adalah orang aku sayang..
Aku memang bodoh , hanya terdiam di hadapanmu dan tidak mengucap sepatah dua kata untuk mencoba mengungkapkan isi hatiku..
Bibirku terpaku ketika aku ingin memberitahu mu kalau selama ini aku telah memiliknya ..aku membisu dan tidak bisa mengukir kata kata indah untukmu dan menjelaskan semua kepadamu tentang semua perasaan ku untukmu dan dia ..
Mungkin aku termasuk seseorang yang penakut dalam masalah cinta ,,,
Aku mencintaimu tapi aku juga sangat menyayanginya..

Aku tidak mungkin meninggalkannya untuk hatimu..Bukannya aku tidak ingin memilikimu tapi karena dia lah yang mereka inginkan , dia yang lebih dulu denganku ,kamu cintaku namun akupun bahagia bersama dia ..aku hanya tidak ingin mengacaukan persaan dia untuk saat ini karna dia juga lah kita bisa bersama...
Aku juga tidak mau mengecewakan kamu karena aku hadirkan dia sebagai seseorang yang aku cinta , aku dilema karena kamu dan dia ..
Aku hanya ingin menjadi seseorang yang membuat kamu bahagia dan juga dia ..
Aku punya hati , hingga ku selalu merasa sakit dan terluka saat kamu dan dia tersakiti sikap dan tingkah laku ku ..
Siapa yang harusnya ku pilih ? , jika aku memilihmu ,
mungkin aku yang akan mencoba melepasnya namun apakah kau mau jika kita bahagia diatas luka hatinya :)
ketahuilahh ! 


Kebahagianku bukan dimana aku bisa menyakiti kamu dan dia yang menyayangiku .. Tetapi kebahagianku bagaimana aku dapat membahagiakan kamu dan juga dia ..
Maapkan aku sayang (MYI&LH) ...!!

14 Ciri Pacar Selingkuh

Akhir-akhir ini si dia mulai berubah sikap. Biasanya manis, jadi lebih cuek dan sepertinya tidak peduli lagi dengan saya. Hmm..Banyak pria yang jatuh cinta lagi saat sudah berpacaran. Yang jadi masalah, mereka tidak langsung memutuskan hubungan yang sedang terjalin, mereka biasanya selingkuh terlebih dahulu untuk memutuskan apakah dia akan menambatkan hati pada wanita baru atau tetap melanjutkan hubungannya dengan pacarnya yang sekarang.
Menyebalkan memang, maka Anda harus tahu ciri-ciri pria yang sedang punya selingkuhan.
1. Dia sering memutuskan telepon Anda lalu merancang cerita bahwa sinyal sedang jelek, sedang ramai, sedang.. apapun yang membuat telepon dari Anda seolah tidak penting dan berkali-kali dilakukan akhir-akhir ini.
2. Dia mulai menjauh dari Anda dan memberi alasan yang sekiranya bisa Anda terima, misalnya mengantar nenek ke rumah saudara, memperbaiki motor adiknya, menemani ibunya belanja dan sebagainya. Mungkin dia anak baik, tetapi jika dia sangat sering menghindari Anda dengan alasan ini, sebaiknya hati-hati.
3. Dia tidak lagi menggandeng tangan Anda saat jalan berdua atau mengucapkan kata-kata mesra.
4. Dia mulai tertarik dengan hal-hal baru yang sebelumnya tidak dia suka. Misalnya mulai mengikuti perkembangan artis-artis Jepang atau Korea, mulai suka nonton film romantis, mulai centil dan lebih keren.. well, jika itu semua bukan hobi Anda, bisa jadi itu adalah hobi seseorang yang sedang dia suka.
5. Dia mulai sering menyalahkan Anda atau mencari-cari kesalahan Anda. Sehingga dia punya alasan untuk bertengkar dengan Anda tanpa membuat dirinya terlihat 'jelek'.
6. Tiba-tiba Anda menemukan nota pembayaran di sebuah restoran yang tidak pernah Anda kunjungi dengannya. Plus.. menu yang dibayarkan adalah menu untuk dua orang.
7. Dia mulai malas ngobrol dengan Anda. Kalaupun ngobrol, dia tampak bosan dan tidak tertarik dengan apa yang Anda bicarakan.
8. Dia mulai menjaga penampilan, rambutnya lebih rapi, lebih wangi, bahkan dia mulai mencemaskan perutnya yang berlemak dan ikut kelas gym atau mulai rajin berolahraga. Hmm.. ada apa ya? Mau mulai gaya hidup sehat atau dia ingin jaga penampilan di depan wanita lain?
9. Dia mulai menjauh dari kehidupan dunia maya. Jika dulu dia sekali-kali masih memberi like pada postingan foto terbaru Anda atau mention hal-hal lucu di Twitter, sekarang tidak pernah sama sekali, padahal dia masih aktif di media sosial, atau mungkin dia membuat akun baru?
10. Akhir-akhir ini dia sering mengeluhkan bahwa Anda tidak memberi kebebasan dalam hubungan. Padahal jika diingat-ingat, Anda tidak overprotective dan sering membiarkannya jalan sendiri dengan teman-temannya.
11. Dia tidak lagi tertawa bersama Anda. Dia lebih sering menunjukkan wajah serius dan sudah tidak lagi tertawa menyenangkan bersama Anda. Memang sih.. kadang pria juga mengalami bad mood dan membuatnya malas tertawa, tetapi jika dia selalu 'menekuk' wajah saat bersama Anda, itu adalah hal yang disengaja.
12. Saat berbicara berdua, dia mulai tidak melakukan kontak mata. Dia lebih tertarik dengan hal-hal lain dan mengalihkan matanya dari Anda. Ini adalah tanda bahwa pria sedang menyembunyikan sesuatu dan tidak ingin Anda 'membaca' kebohongan di matanya.
13. Dia mulai melupakan apa yang Anda katakan. Padahal dulu.. dia selalu mendengarkan apa yang Anda katakan.
14. Dia tidak lagi mengajak Anda jalan berdua, misalnya makan berdua, nonton, sekedar jalan-jalan bahkan tidak mengajak Anda ke pernikahan sahabatnya.

Perbedaan Jurusan TEKNIK INFORMATIKA dengan SISTEM INFORMASI

Apakah bedanya antara jurusan Teknik Informatik dengan Sistem Informasi ?

perbedaan jurusan teknik informatika dan sistem informasi mungkin mirip dengan perbedaan jurusan kedokteran dan kesehatan masyarakat. yang satu lebih bersifat teknis, satunya lebih bersifat manajerial. Konon dokter bertugas mengobati orang sakit, sarjana kesehatan masyarakat bertugas mengelola rumah sakit (menjadi kepala rumah sakit, puskesmas, dengan kata lain: menjadi bosnya dokter).
Terkadang ada pertanyaan seperti ini bagi orang-orang yang baru mengenal komputer dan mau mengambil jurusan kuliah tentang teknologi informasi.

Apakah Sistem Informasi dan Teknik Informatika itu sama?

Jelas berbeda. Mungkin beberapa dari kita beranggapan bahwa jurusan Sistem Informasi tidak berbeda jauh dengan jurusan lain seperti Teknik Informatika. Padahal memang sangat jauh berbeda. Mungkin dengan sedikit penjabaran, kita bisa tahu apa bedanya Jurusan Sistem Informasi dengan jurusan lain.

Di Indonesia sendiri hanya ada tiga jurusan saja yang mempelajari kurikulum tentang komputer, yaitu:

1. Computer Science untuk jurusan Teknik Informatika atau Ilmu Komputer.
2. Computer Engineering untuk jurusan Sistem Komputer atau Teknik Komputer
3. Information System untuk Jurusan Sistem Informasi atau Manajemen Informatika

Terkadang banyak orang yang bingung membedakan jurusan Teknik Informatika dan Sistem Informasi dan banyak juga orang–orang yang beranggapan bahwa kedua jurusan ini sama. Padahal jelas-jelas kedua jurusan ini sangat berbeda.

Penjabarannya sebagai berikut:

Information Systems (Sistem Informasi)

Jurusan ini mempelajari tentang bagaimana membangun dan menerapkan teknologi informasi dengan proses bisnis yang ada saat ini, sehingga suatu bisnis akan dapat dengan efektif mencapai tujuannya dengan menerapkan IT dalam bisnis.

Computer Science (Teknik Informatika)

Jurusan ini mempelajari tentang bagaimana mengembangkan computer vision, robotica, intelligence system, dan hal-hal lainnya yang terkait dengan pengembangan komputer di masa yang akan datang.


TEKNIK INFORMATIKA SISTEM INFORMASI
menekankan kemampuan dalam merancang dan mengembangkan ragam algoritma komputasi menekankan kemampuan dalam merancang,
mengembangkan, dan menerapkan sistem informasi organisasi
Variasi Nama Jurusan/Prodi Teknik Informatika, Ilmu Komputer, Ilmu Komputasi, Informatika, Ilmu Informatika, Matematika Komputasi, dan lain sebagainya Sistem Informasi, Manajemen Informatika, Sistem Informasi Manajemen, Manajemen Sistem Informasi, Manajemen Informasi, dan lain sebagainya.
Kurikulum Kurikulumnya akan sangat kental dengan ilmu pengetahuan terkait dengan logika matematika, komputasi, dan algoritma – yang dalam model terapannya dinyatakan dalam pengembangan program komputer. Kurikulum harus ditekankan pada bagaimana memastikan agar teknologi dan sistem informasi yang dimiliki selaras dengan strategi bisnis perusahaan, agar dapat tercipta keunggulan kompetitif dalam bersaing (the value of information technology to the business).
Cakupan Ilmu -Spektrumnya sangat beragam dari yang sangat teoritis dan algoritmis, hingga yang bersifat sangat terapan seperti pengembangan robotika dan sistem cerdas.
-Terbagi menjadi tiga bagian utama yang fokus pada teori maupun algoritma yang dipergunakan:
a. dalam proses perancangan dan implementasi perangkat lunak.
b. dalam proses dan perancangan sistem perangkat keras serta komponennya.
c. sebagai model matematis dalam menyelesaikan permasalahan tertentu. -Fokus pada teknik mengintegrasikan solusi teknologi informasi dengan proses bisnis agar kebutuhan organisasi akan informasi dapat terpenuhi
-Menekankan pada “informasi” sebagai sebuah sumber daya penting dalam berproduksi, terutama dalam kaitannya kebutuhan korporasi dalam pencapaian visi dan misi yang dicanangkan.
-Mempelajari aspek penting bagaimana “informasi” diciptakan, diproses, dan didistribusikan ke seluruh pemangku kepentingan dalam institusi.



Jelas kedua jurusan ini sangat berbeda dimana SI mempelajari tentang management IT dan TC mempelajari tentang pengembangan komputer. Tapi yang jelas setiap jurusan memiliki batasan ruang keahlian.

Dengan ini setidaknya ada gambaran sedikit bagi orang-orang terutama para calon mahasiswa baru,

Pengenalan Teknologi Basis Data

1.1.

Basis Data

Basis data atau database, berasal dari kata basis dan data, adapun pengertian dari kedua pengertian tersebut adalah sebagai berikut :

Basis
:
dapat diartikan sebagai markas atau gudang, tempat bersarang atau berkumpul.
Data
:
Sesuatu yang bersifat nyata yang mewakili suatu objek seperti manusia, barang, hewan, peristiwa, konsep, keadaan, dan sebagainya yang direkam dalam bentuk angka, huruf, simbol, teks, gambar, bunyi, atau kombinasinya
Dari kedua pengertian tersebut, maka dapat ditarik kesimpulan bahwa pengertian dari  Basis Data adalah  Kumpulan file / table yang saling berelasi (berhubungan)  yang disimpan dalam media penyimpanan eletronik. Dari pengertian tersebut dapat diambil kesimpulan pada masing – masing table / file didalam database berfungsi untuk menampung / menyimpan data – data, dimana masing – masing data yang ada pada table / file tersebut saling berhubungan dengan satu sama lainnya.
Tujuan dari dibentuknya basis data pada suatu perusahaan pada dasarnya adalah  kemudahan dan kecepatan dalam pengambilan kembali data. Bila kita bicara basis data, maka seluruh data – data disimpan dalam basis data pada masing – masing table / file sesuai dengan fungsinya, sehingga kita dengan mudah dapat melakukan penelusuran data yang diinginkan hal ini akan mengakibatkan pada kecepatan atas informasi yang disajikan.
Yang ditonjolkan dalam basis data adalah pengaturan / pemilahan / pengelompokan / pengorganisasian data yang akan disimpan  sesuai dengan fungsi / jenisnya. Hal tersebut bisa berbentuk sejumlah file / table terpisah atau dalam bentuk pendefinisian kolom / field data dalam setiap file / table tersebut.


 

1.2.

Hirarki Data

Hirarki data dalam dikelompokkan menjadi 3 (tiga) buah yaitu file, record dan elemen data.

Elemen Data / Field / Atribut adalah satuan data terkecil yang  tidak dapat dipecah lagi menjadi unit lain yang bermakna. Pada data Mahasiswa, field / atribut datanya dapat berupa : nim, nama_m, tpt_lhr_m, tgl_lhr_m, alm_m dan dan atribut lainnya yang menyangkut mahasiswa tersebut. Istilah lain elemen data adalah medan / field, kolom, item, dan atribut. Istilah yang umum dipakai adalah field, atribut atau kolom.
Rekaman / Record / Baris adalah  gabungan sejumlah elemen data yang saling terkait. Contohnya adalah nim, nama_m, tpt_lhr_m, tgl_lhr_m, alm_m an atribut lainnya dari seorang Mahasiswa dapat dihimpun dalam sebuah record / baris. Berkas / File / Table  adalah kumpulan record sejenis yang mempunyai panjang atribut / field sama, namun berbeda isi datanya

Dalam basis data relasional, berkas mewakili komponen yang disebut Table atau Relasi. Sedangkan pengertian Data value (nilai atau isi data) adalah data aktual atau informasi yang disimpan pada setiap  field / atribut. Field nama_m menunjukkan tempat dimana informasi nama mahasiswa disimpan, sedangkan isi datanya adalah Mulyani, Ahmad Sofyan dan lain sebagainya.

Sistem basis data dapat diartikan sebagai kumpulan file / table yang saling berhubungan
(dalam sebuah basis data di sebuah sistem komputer), dan sekumpulan program (DBMS /
Database Management System) yang memungkinkan beberapa user (pemakai), dan / atau
program lain  untuk mengakses dan memanipulasi file (table) tersebut. Komponen – komponen
utama dari sebuah sistem basis data adalah sebagai  berikut :


  1. Perangkat keras (hardware)
  2. Sistem operasi (operating system)
  3. Basis data (database)
  4. Sistem (aplikasi/perangkat lunak) pengelola basis data (DBMS)
  5. Pemakai (user)
  6. Aplikasi (perangkat lunak) lain (bersifat optional) 
Sistem basis data dapat dilihat bahwa basis data pada intinya adalah disimpan pada media penyimpanan elektronik (hardisk), sedangkan database adalah terdiri dari beberapa file / table yang saling berelasi (berhubungan). Basis data tersebut dikelola oleh DBMS  (database management system) dan database tersebut dapat dimanfaatkan oleh beberapa user (pemakai) yang dapat melakukan manipulasi pada database
   
Perangkat keras yang biasanya terdapat dalam sistem basis data adalah sebagai berikut:
  1.  Komputer (satu untuk stand alone atau llebih dari satu untuk komputer jaringan) 
  2.  Memori sekunder yang on-line (hardisk). 
  3.  Memori sekunder yang offline (tape) untuk keperluan backup data 
  4.  Media/ perangkat komunikasi (untuk sistem jaringan) 

1.3.11      Sistem OperasiMerupakan program yang mengaktifkan/ memungsikan sistem komputer, mengendalikan seluruh sistem daya dalam komputer dan melakukan operasioperasi dasar dalam komputer (operasi input/output), pengelolaan file, dan lain sebagainya. Program pengelola basis data (DBMS) akan aktif (running) jika sistem operasi yang dikehendakinya (sesuai) telah aktif.

1.3.12      Basis Data 
Sebuah sistem basis data dapat memiliki beberapa basis data. Setiap basis data dapat memiliki sejumlah objek basis data (seperti file/table, store procedure, indeks, dan lainya). Disamping berisi / menyimpan data, setiap basis data juga mengandung / menyimpan definisi struktur (baik untuk basis data maupun objek-objeknya secara detail)

 1.3.13      Sistem Pengelolaan Basis Data (DBMS) 
Pengelolaan basis data secara fisik tidak ditangani langsung oleh user (pemakai), tetapi ditangani oleh sebuah perangkat lunak (sistem) yang khusus / spesifik. Perangkat inilah disebut DBMS, yang akan menentukan bagaimana data diorganisasi, disimpan, diubah, dan diambil kembali. Perangkat tersebut juga menerapkan mekanisme pengamanan data (security), pemakaian data secara bersama (sharing data), pemaksaan keakuratan / konsistensi data, dan sebagainya.

1.3.14      Pemakai (Users)  Ada beberapa jenis / tipe pemakai pada sistem basis data, berdasarkan cara mereka berinteraksi pada basis data, diantaranya adalah: 
ProgrammerAdalah pemakai yang berinteraksi dengan basis data Aplikasi melalui DML (data manipulation language), yang disertakan dalam program yang ditulis dalam bahasa pemrograman induk (seperti pascal, cobol, clipper, foxpro, dan lainnya).
User Mahir (Casual Users)  Adalah pemakai yang berinteraksi dengan sistem tanpa menulis modul program. Mereka menyatakan query (untuk akses data), dengan bahasa query yang telah disediakan oleh suatu DBMS.
User Umum Adalah pemakai yang berinteraksi dengan sistem basis data melalui pemanggilan satu program aplikasi permanen, yang telah ditulis / disediakan sebelumnya.
User Khusus Adalah pemakai yang menulis aplikasi basis data non konvensional untuk keperluan khusus, seperti untuk aplikasi AI, Sistem Pakar, Pengolahan Citra, dan lainnyal, yang bisa saja mengakses basis data dengan / tanpa DBMS.
1.3.15  Aplikasi (perangkat lunak) lain  Aplikasi lain ini bersifat optional, ada tidaknya tergantung pada kebutuhan kita. DBMS yang kita gunakan lebih berperan dalam pengorganisasian data dalam basis data, sementara bagi pemakai basis data (khususnya yang menjadi end user) dapat disediakan program khusus untuk melakukan pengisian, pengubahan dan pengambilan data.

1.4         Sistem Manajemen Basis Data (DBMS)
DBMS adalah koleksi terpadu dari program-program (sistem perangkat lunak) yang digunakan untuk mendefinisikan, menciptakan, mengakses dan merawat database (basis data). Tujuannya adalah menyediakan lingkungan yang mudah dan aman untuk penggunaan dan perawatan database. Contoh daripada DBMS adalah Ms-Access, MS Sql Server dan Oracle.

Sumber : http://www.didiksetiyadi.com

Perbedaan Statenent dengan Preparestatement

Statement vs PreparedStatement vs Batch, Security and Performance

Jika kita membuat aplikasi yang memanipulasi database dengan plain JDBC, Statement dan PreparedStatement object mempunyai peranan yang penting. Keduanya sama-sama dapat digunakan untuk mengirim perintah query ke database. Sekarang, kita akan coba melihat apa yang membuat mereka berbeda.
Note: Source code untuk class DBManager bisa didapat disini.
1. Security attack: SQL Injection
Yang pertama, dilihat dari sudut pandang keamanan, khususnya terhadap serangan yang disebut SQL injection. Penyerang biasanya mencoba untuk menembus sistem dengan cara merusak SQL query yang kita buat. Triknya adalah dengan menggunakan susunan karakter, yang bila digabungkan dengan query sebenarnya akan menghasilkan nilai yang berbeda.
Berikut adalah tabel yang akan kita gunakan untuk percobaan.
1
2
3
4
5
6
CREATE TABLE `myblog`.`user_security` (
  `username` VARCHAR(50) NOT NULL DEFAULT '',
  `pswd` VARCHAR(255) NOT NULL DEFAULT '',
  PRIMARY KEY(`username`)
)
ENGINE = InnoDB;
Isi dengan sample data:

Dengan kode berikut, kita akan mencoba untuk menjalankan test menggunakan Statement dan PreparedStatement dengan input yang sama, yaitu:
username: aaa
pswd: bbb’ OR ’1′=’1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package suhearie.blog.sql_injection;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
 
import suhearie.blog.jdbc.DBManager;
 
public class TesSqlInjection {
 
    private DBManager manager;
 
    private Connection conn;
 
    public TesSqlInjection() throws Exception {
        manager = new DBManager();
        conn = manager.getConnection();
    }
 
    private void testStatement(String user, String pswd) throws Exception {
        System.out.println("Test menggunakan Statement");
        String sql = "SELECT * FROM user_security WHERE username = '"+user+"' AND pswd = '"+pswd+"'";
        Statement statement = conn.createStatement();
        ResultSet rs = statement.executeQuery(sql);
        if (rs.next()) {
            System.out.println("User: "+user+", Pswd:"+pswd+" BENAR, login valid");
        }
        else {
            System.out.println("User: "+user+", Pswd:"+pswd+" SALAH, login invalid");
        }
    }
 
    private void testPreparedStatement(String user, String pswd) throws Exception {
        System.out.println("Test menggunakan PreparedStatement");
        String sql = "SELECT * FROM user_security WHERE username = ? AND pswd = ?";
        PreparedStatement preparedStatement = conn.prepareStatement(sql);
        preparedStatement.setString(1, user);
        preparedStatement.setString(2, pswd);
        ResultSet rs = preparedStatement.executeQuery();
        if (rs.next()) {
            System.out.println("User: "+user+", Pswd:"+pswd+" BENAR, login valid");
        } else {
            System.out.println("User: "+user+", Pswd:"+pswd+" SALAH, login invalid");
        }
    }
 
    public static void main(String[] args) throws Exception {
        TesSqlInjection test = new TesSqlInjection();
        String user = "aaa";
        String pswd = "bbb' OR '1'='1";
        test.testStatement(user, pswd);
        test.testPreparedStatement(user, pswd);
    }
 
}
Output dari test di atas adalah:
Test menggunakan Statement
User: aaa, Pswd:bbb’ OR ’1′=’1 BENAR, login valid
Test menggunakan PreparedStatement
User: aaa, Pswd:bbb’ OR ’1′=’1 SALAH, login invalid
Mengapa hasil dari test Statement bisa demikian ?
Jawabannya adalah karena bila query awal dan input user digabung, query akan menjadi:
1
SELECT * FROM user_security WHERE username = 'aaa' AND pswd = 'bbb' OR '1'='1'
Karena ada OR 1=1, yang akan selalu bernilai TRUE, maka nilai klausa WHERE akan menjadi TRUE, dan query akan mengembalikan resultset, meskipun username dan password yang diberikan SALAH.
Dari test tersebut, jelas bahwa Statement sangat rentan terhadap SQL injection, karena input dari user akan di menjadi bagian dari query. Sementara jika kita menggunakan PreparedStatement, input dari user akan menjadi parameter saja, sehingga tidak mempengaruhi hasil query.
2. Performance
Disini kita akan menguji performance dari 3 metode tersebut untuk melakukan manipulasi data di database. Saya sudah melakukan percobaan untuk melakukan operasi insert pada tabel sederhana berikut:
1
2
3
4
CREATE TABLE  `myblog`.`st_vs_pst` (
  `COL1` int(10) unsigned NOT NULL default '0',
  `COL2` int(10) unsigned NOT NULL default '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Test ini akan menghapus tabel, kemudian melakukan operasi insert sebanyak 1000 row dan menggunakan parameter untuk mengaktifkan atau mematikan option autocommit pada database.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package suhearie.blog.stmt_vs_pstmt;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;
 
import suhearie.blog.jdbc.DBManager;
 
public class TestPerformance {
 
    private DBManager manager;
 
    private Connection conn;
 
    private static final String TABLE_NAME = "ST_VS_PST";
 
    private static final int TOTAL = 1000;
 
    private static final int INTERVAL = 200;
 
    public TestPerformance() throws Exception {
        manager = new DBManager();
        conn = manager.getConnection();
    }
 
    private void truncateTable() throws Exception {
        System.out.println("Truncating table");
        Statement statement = conn.createStatement();
        statement.executeUpdate("TRUNCATE TABLE "+TABLE_NAME);
    }
 
    private void testStatement(boolean turnOffAutoCommit) throws Exception {
        System.out.println();
        System.out.println("Starting testStatement, turnOffAutoCommit:"+turnOffAutoCommit);
        truncateTable();
        long start = System.currentTimeMillis();
        if (turnOffAutoCommit) {
            conn.setAutoCommit(false);
        }
        Statement statement = conn.createStatement();
        for (int i=0; i<=TOTAL; i++) {
            statement.executeUpdate("INSERT INTO "+TABLE_NAME+" (COL1,COL2) VALUES ("+i+","+i*2+")");
            if (i%INTERVAL == 0) {
                System.out.print("Row:"+i+"; ");
            }
        }
        if (turnOffAutoCommit) {
            conn.commit();
            conn.setAutoCommit(true);
        }
        long diff = System.currentTimeMillis() - start;
        System.out.println("testStatement finish: "+diff+" ms");
    }
 
    private void testPreparedStatement(boolean turnOffAutoCommit) throws Exception {
        System.out.println();
        System.out.println("Starting testPreparedStatement, turnOffAutoCommit:"+turnOffAutoCommit);
        truncateTable();
        long start = System.currentTimeMillis();
        if (turnOffAutoCommit) {
            conn.setAutoCommit(false);
        }
        PreparedStatement preparedStatement = conn.prepareStatement("INSERT INTO "+TABLE_NAME+" (COL1,COL2) VALUES (?,?)");
        for (int i=0; i<=TOTAL; i++) {
            preparedStatement.setInt(1, i);
            preparedStatement.setInt(2, i*2);
            preparedStatement.executeUpdate();
            if (i%INTERVAL == 0) {
                System.out.print("Row:"+i+"; ");
            }
        }
        if (turnOffAutoCommit) {
            conn.commit();
            conn.setAutoCommit(true);
        }
        long diff = System.currentTimeMillis() - start;
        System.out.println("testPreparedStatement finish: "+diff+" ms");
    }
 
    private void testBatch(boolean turnOffAutoCommit) throws Exception {
        System.out.println();
        System.out.println("Starting testBatch, turnOffAutoCommit:"+turnOffAutoCommit);
        truncateTable();
        long start = System.currentTimeMillis();
        if (turnOffAutoCommit) {
            conn.setAutoCommit(false);
        }
        PreparedStatement preparedStatement = conn.prepareStatement("INSERT INTO "+TABLE_NAME+" (COL1,COL2) VALUES (?,?)");
        for (int i=0; i<=TOTAL; i++) {
            preparedStatement.setInt(1, i);
            preparedStatement.setInt(2, i*2);
            preparedStatement.addBatch();
            if (i%INTERVAL == 0) {
                System.out.print("Row:"+i+"; ");
                preparedStatement.executeBatch();
            }
        }
        if (turnOffAutoCommit) {
            conn.commit();
            conn.setAutoCommit(true);
        }
        long diff = System.currentTimeMillis() - start;
        System.out.println("testBatch finish: "+diff+" ms");
    }
 
    public static void main(String[] args) throws Exception {
        TestPerformance test = new TestPerformance();
        test.testStatement(true);
        test.testStatement(false);
        test.testPreparedStatement(true);
        test.testPreparedStatement(false);
        test.testBatch(true);
        test.testBatch(false);
    }
 
}
Output dari program tersebut adalah sebagai berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Starting testStatement, turnOffAutoCommit:true
Truncating table
Row:0; Row:200; Row:400; Row:600; Row:800; Row:1000; testStatement finish: 297 ms
 
Starting testStatement, turnOffAutoCommit:false
Truncating table
Row:0; Row:200; Row:400; Row:600; Row:800; Row:1000; testStatement finish: 24203 ms
 
Starting testPreparedStatement, turnOffAutoCommit:true
Truncating table
Row:0; Row:200; Row:400; Row:600; Row:800; Row:1000; testPreparedStatement finish: 250 ms
 
Starting testPreparedStatement, turnOffAutoCommit:false
Truncating table
Row:0; Row:200; Row:400; Row:600; Row:800; Row:1000; testPreparedStatement finish: 23250 ms
 
Starting testBatch, turnOffAutoCommit:true
Truncating table
Row:0; Row:200; Row:400; Row:600; Row:800; Row:1000; testBatch finish: 219 ms
 
Starting testBatch, turnOffAutoCommit:false
Truncating table
Row:0; Row:200; Row:400; Row:600; Row:800; Row:1000; testBatch finish: 23297 ms
Dari output yang dihasilkan, tampak bahwa performance Batch > PreparedStatement > Statement. Alasannya:
1. Statement
Setiap SQL statement yang dieksekusi dikirim secara utuh ke database.
2. PreparedStatement
SQL query dikirim hanya satu kali, selanjutnya yang dikirim ke database hanya parameted querynya saja.
3. PreparedStatement Batch:
Seperti halnya PreparedStatement, tapi kita bisa mengakumulasi parameter-parameter dengan method addBatch() kemudian mengirim kumpulan parameter itu sekaligus dengan method executeBatch().
Tapi perbedaan paling signifikan yang memeberikan perbedaan performance paling besar didapat ketika kita mematikan option autocommit di database. Dari test di atas, kecepatannya bisa mencapai 100 kali lipat !!
Mengapa bisa begitu? Sekedar analisa/asumsi logika sederhana, jika kita menggunakan fitur autocommit, setiap kita melakukan insert satu baris, maka database akan langsung melakukan perubahan permanen pada tabel. Sebaliknya, jika database tidak melakukan autocommit, maka kita bisa melakukan ribuan operasi insert, dan mungkin database akan memprosesnya di memory/buffer. Kemudian pada saat kita meng-commit perubahan, database akan melakukan proses tersebut untuk ribuan bari sekaligus.
Kesimpulannya, jika Anda mau melakukan insert atau update dalam jumlah yang besar, pilihan terbaik adalah menggunakan PreparedStatement Batch, dan menonaktifkan option autocommit.