Blog

0

Jdbc Insert Batch

Salah satu kelemahan dalam penggunaan JDBC yang dirasakan adalah ketika melakukan multiple insert. Setiap query insert yang dieksekusi sendiri-sendiri akan menurunkan performansi database. Sebagai contoh, bagi pengguna MySQL maka akan terbiasa dengan menggabungkan multiple insert statement dalam sekali eksekusi (misalkan ketika kita melakukan import data maka akan terlihat bahwa multiple row yang akan kita insert dilakukan dalam 1 statement). Syntaks yang bisa digunakan misalkan sebagai berikut :

[sourcecode language="java"]insert into XX (a,b,c)  values (1,2,3),(4,5,6),(7,8,9);[/sourcecode]

Cara tersebut akan lebih efektif dibandingkan kita melakukan tiga kali insert sebagai contoh :

[sourcecode language="java"]insert into XX (a,b,c) values (1,2,3); <br>
insert into XX (a,b,c) values (4,5,6);<br>
insert into XX (a,b,c) values (7,8,9);[/sourcecode]

Nah, permasalahan sekarang timbul karena dalam pemanfaatan JDBC, kita tidak bisa menggunakan syntaks seperti diatas, dimana kita langsung menempelkan semua row dengan delimiter koma dan mengeksekusi dalam sekali insert statement.
Tapi jangan khawatir, karena ternyata terdapat solusi lain yang disediakan oleh JDBC yaitu dengan melakukan batch insert. Secara konsep sama, kita mengumpulkan semua row yang akan di insert dalam batch dan melakukan eksekusi sekali. Hanya saja, sudut pandangnya adalah batch ini berisi 1 SQL (bukan hanya berisi nilai row yang akan diinsert). Sehingga kita mengumpulkan semua sql yang akan dieksekusi dalam batch, untuk kemudian dieksekusi oleh JDBC. Driver jdbc yang bersangkutan lah yang akan melakukan translasi isi batch tersebut sehingga bisa menjadi sql optimal.
Contoh penggunaannya dengan menggunakan Java adalah sebagai berikut :
1. Buat object Connection, sebagaimana kita menggunakan jdbc biasa. Jangan lupa tambahkan option rewriteBatchedStatements=true untuk mengaktifkan fitur batch statements.

[sourcecode language="java"]
Connection conn = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + name + "?rewriteBatchedStatements=true", uid, password);
[/sourcecode]

asumsi : host, port, database name, userid, dan password dalam mengakses database tersimpan dalam suatu variable

2. Buat object Statement

[sourcecode language="java"]
Statement statement = conn.createStatement();
[/sourcecode]

3. Masukkan insert statement dalam batch.

[sourcecode language="java"]
String sql1 = "insert into XX (a,b,c) values (1,2,3)";<br>
String sql2 = "insert into XX (a,b,c) values (4,5,6)";<br>
String sql3 = "insert into XX (a,b,c) values (7,8,9)";<br>
statement.addBatch(sql1);
statement.addBatch(sql2);
statement.addBatch(sql3);
[/sourcecode]

4. Eksekusi statement.

[sourcecode language="java"]
conn.setAutoCommit(false);<br>
statement.executeBatch();<br>
conn.commit();
[/sourcecode]

Demikian beberapa hal yang diharapkan bisa memberikan peningkatan performansi penggunaan JDBC terutama dalam penggunaan multiple insert statement yang bisa memperlambat kinerja database.

Comments

There are no comments yet.

Leave a Reply

Your email is never published nor shared. Required fields are marked *

*

© Copyright PT Javan Cipta Solusi 2012. All rights reserved.