Last Updated on 13 years by Mas Herdi
Pada database MySQL, sebenarnya sudah disediakan fitur tersendiri untuk mengimpor database dari file Excel(XLS). Namun fitur itu masih belum bisa menyesuaikan ke dalam struktur tabel yang lama, jadi apabila kita menggunakan fitur impor dari XLS yang biasa, nantinya fitur tersebut akan membuat tabel baru beserta nama-nama kolom yang baru. Dan perlu kerja manual untuk memindahkan dan menyesuaikan ke tabel yang lama. Benar-benar tidak dinamis.
Dan, ini cara yang dinamis. Well, sebenarnya juga tidak pure 100% dinamis (e.g. code ini bisa berjalan pada file excel dengan layout data apapun, dan database apapun), code ini masih perlu penyesuaian terhadap database dan file excel yang Anda buat. Yah, anggap saja sebagai pengetahuan 🙂
Pre-Requisites Posts :
Daftar postingan yang setidaknya sudah Anda mengerti sebelum lanjut ke tutorial ini :
- Cara menyambungkan Java ke MySQL
- Tentang layout data file Excel dan baca data dari Excel
- Tentang apa-apa yang perlu dirubah (Database name, url, dsb) dan library yang digunakan
- Java > Excel
- MySQL > Java > Excel
Okay, saya mempunyai file Excel bernama pelanggan.xls dengan layout data seperti ini :
Dan struktur tabel gangguan.pelanggan [namaDB.namaTabel] yang seperti ini, tabel ini tentu saja masih kosong
So far, so good. Here’s the code. Tapi sebelumnya mari kita bahas logiknya dulu, code ini pertama akan melakukan test sambungan ke database gangguan punya saya, ketika connected, maka proses dilanjutkan dengan membaca data yang ada pada file excel. Perlu diperhatikan, pada proses ini saya merubah proses perulangan. Dimana pada baca excel default, kita looping dari baris dulu, setelah baris habis baru ganti kolom:
- Kolom 1
- Baris 1
- Baris 2
- Baris 3
- Baris 4 [habis==TRUE]
- Kolom 2
- Baris 1
- Baris 2
- Baris 3
- Baris 4 [habis == TRUE]
- [End Loop].
Jika looping modifikasi yang sekarang, kita membaca kolom dulu, setelah kolum habis, baru ganti baris :
- Baris 1
- Kolom 1
- Kolom 2
- Baris 2
- Kolom 1
- Kolom 2
- [dan seterusnya sampai baris ke N]
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package readexceldb; /** * *@authorHerdi Naufal */ import java.sql.PreparedStatement; import java.io.IOException; import jxl.Sheet; import jxl.Cell; import jxl.CellType; import jxl.Workbook; import java.io.File; import java.sql.SQLException; import java.util.Properties; import java.sql.DriverManager; import java.sql.Connection; import static java.lang.System.*; public class ReadExcelDB { public static void main(String[] args){ //Memanggil program dengan menspesifikasikan url database, username dan password new DB().connectDBAndInsert("jdbc:mysql://localhost:3306/gangguan","root",""); } } class DB{ //Inner class untuk fungsi Reader public class Reader{ //nomer index baris int editNum = 1; //fungsi Read public void ngeRead(String path,String db_url, String db_username, String db_password) throws IOException, SQLException { File fileExcel = new File(path); Workbook w; //Membuat sambungan ke database Connection sambungan = null; try { //instantiasi Driver Class.forName("com.mysql.jdbc.Driver").newInstance(); //Connection Properties, menspesifikasikan username dan password Properties connectionProps = new Properties(); connectionProps.put("user", db_username); connectionProps.put("password", db_password); //Menyambungkan aplikasi dengan database sambungan = DriverManager.getConnection(db_url,connectionProps); //Menggunakan Prepared Statement PreparedStatement ps=sambungan.prepareStatement("INSERT INTO pelanggan VALUES (?,?)"); if(!sambungan.isClosed()) { out.println("Connected"); } //Workbook baru w = Workbook.getWorkbook(fileExcel); // Ambil sheet pertama, nomer 0 menandakan sheet ke 1 Sheet sheet = w.getSheet(0); //Variabel penampung String id_pelanggan = null; String nama_pelanggan = null; // Looping sebanyak kolom dan baris yang ada for (int j = 0; j < sheet.getRows(); j++) { for (int i = 0; i < sheet.getColumns(); i++) { Cell cell = sheet.getCell(i, j); //Jika baris adalah TABEL HEADER if((j==0 && i==0) ||(j==0 && i==1)) { out.println("Isi tabel " + cell.getContents()); //out.println("xx"); } else { if (cell.getType() == CellType.LABEL) { out.println("Ini adalah Label " + cell.getContents()); nama_pelanggan=cell.getContents(); //Proses Eksekusi dan Insert Data ps.setString(1,id_pelanggan ); ps.setString(2,nama_pelanggan ); ps.execute(); out.println("DBG Memasukkan "+id_pelanggan+" "+nama_pelanggan); } if (cell.getType() == CellType.NUMBER) { out.println("Ini adalah Nomor "+cell.getContents()); id_pelanggan=cell.getContents(); } } } } } catch (Exception aoEX) { aoEX.printStackTrace(); } finally { //tutup sambungan sambungan.close(); } } } public void connectDBAndInsert(String db_url, String db_username, String db_password){ try { String fileExcel = "D:/HafizhUIDver2/NetBeansProject/ReadExcel/src/readexcel/pelanggan.xls"; //Memanggil kelas Reader, dengan melempar data fileExcel dan Connection Prop. //ke dalam method ngePrint new Reader().ngeRead(fileExcel,db_url,db_username,db_password); } catch(Exception e) { e.printStackTrace(); } } }
Dan, voila, inilah data yang sudah masuk ke database :
Terminal Works
That’s all. Semoga berguna
PS : Fungsi pengecekan CellType
berguna untuk memilah data supaya sesuai dengan tipe data yang ada di database, nggak lucu kan, kalau kita memasukkan VARCHAR ke dalam kolom yang bertipe data INT. 😉
Nice Share gan.. 😉
Maw tanya ni, apa source code ini kuat untuk read file excel yang jumlahnya >10 ribu record?
Mohon pencerahannya
Bisa gan, penjelasannya ada di sini
http://twoh.web.id/2012/10/readexceldb-in-action/
Enjoy
🙂
Aslm.. m tnya nih.. klo data excel yang memiliki kolom lebih dari dua gmn buatnya? apa2 yang harus ditambahkan?? mhon pncerahan 🙂
Bagian Looping nya kok error ya??
wahahaa udah jarang ane edit lagi gan, coba silahkan diperbaiki sendiri 🙂
Dilihat errornya kenapa di console log nya
<
tuh artinya apa ya??
for (int j = 0; j < sheet.getRows(); j++) {
for (int i = 0; i < sheet.getColumns(); i++) {
<
yang tuh
< itu tanda <
udah diubah di filenya
Klau tabelnya lebih dari satu apa yang di tambahi ………..mohon pencerahannya
Ini hanya bisa satu tabel gan, kalo mau ganti tabel tinggal diganti saja nama tabel yang mau dipakai