Well, kali ini kita telah mempunyai dua buah post, yaitu :
Di post yang pertama, kita telah belajar untuk mengeksporkan String “Hello World” ke dalam file Excel, dan di post yang kedua, kita telah belajar bagaimana menyambungkan aplikasi ke database MySQL, dan mengeksekusi query MySQL. Nah sekarang kita akan menggabungkan keduanya. Kita akan mengambil data dari MySQL kemudian mengeksportnya ke dalam format XLS/Excel.
Aplikasi ini melibatkan penggunaan Inner Class, yang belum sempat saya jelaskan 😀 . Namun tanpa mengerti konsep Inner Class tutorial ini tetap bisa dipahami dengan mudah. Saya menggunakan kode yang terdiri dari potongan kode post yang pertama dan potongan kode post yang kedua. Hanya dimodifikasi sedikit, bagi yang ingin mencoba, ada beberapa parameter yang harus diganti, parameter-parameter tersebut adalah :
- Database Url (pada tutorial menggunakan db_url mySQL di sistem saya)
- Database Username
- Database Password
- Nama database (pada tutorial menggunakan database bernama “gangguan”)
Nah, saya serahkan kepada kreativitas pembaca untuk mengubah parameter-parameter di atas. 🙂
Kenapa?
Tentu, mungkin Anda bertanya-tanya, apa gunanya tutorial ini? Untuk apa kita membuat aplikasi, yang mengambil data dari MySQL dan kemudian menyimpannya dalam format XLS. Dalam lingkup desktop application, mungkin tutorial ini tidak begitu berguna, namun apabila Anda ditugaskan untuk membuat sebuah Java Enterprise Application, sebuah web yang merekam transaksi nasabah pada suatu bank, dan data nasabah itu harus bisa diunduh dalam bentuk file excel, untuk misalnya keperluan evaluasi. Maka itulah kurang lebih implementasi dari tutorial ini.
Here we go with the code, seperti biasa, saya membuat menggunakan Netbeans IDE. Dan jangan lupa mengunduh driver-driver yang diperlukan (driver SQL, driver JexcelAPI) dan meng-copy-nya ke dalam folder project Anda.
/** * * @author Herdi Naufal */ import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.Workbook; import java.io.File; import java.sql.SQLException; import java.util.Properties; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.sql.Connection; import static java.lang.System.*; public class Database { public static void main(String[] args){ //Memanggil program dengan menspesifikasikan url database, username dan password new DB().connectDB("jdbc:mysql://localhost:3306/gangguan","root",""); } } class DB{ //Inner class untuk fungsi Printer public class Printer{ //nomer index baris int editNum = 1; //fungsi Print public void ngePrint(ResultSet rs) { try { //Mendefinisikan file XLS baru bernama "output.xls" WritableWorkbook w = Workbook.createWorkbook(new File("output.xls")); //Membuat sheet baru bernama "Sheet Baru" WritableSheet s = w.createSheet("Sheet Baru", 0); //Menambahkan label "pelanggan" s.addCell(new Label(0, 0, "PELANGGAN")); //Menambahkan label bernama "alamat" s.addCell(new Label(1, 0, "ALAMAT")); while(rs.next()) { //Input data alamat, baris akan bertambah seiring bertambahnya editNum. //Angka 0 menandakan kolom A s.addCell(new Label(0, editNum, rs.getString("alamat"))); //Input data alamat, baris akan bertambah seiring bertambahnya editNum. //Angka 1 menandakan kolom B s.addCell(new Label(1, editNum, rs.getString("pelanggan"))); editNum++; } //Menulis data ke excell shet w.write(); //Menutup sambungan w.close(); } catch (Exception aoEx) { aoEx.printStackTrace(); System.err.print(aoEx); } } } public void connectDB(String db_url, String db_username, String db_password){ try { //Membuat sambungan ke database Connection sambungan = null; //instantiasi Driver Class.forName("com.mysql.jdbc.Driver").newInstance(); //Membuat ResultSet untuk menampung hasil ResultSet rs; //Membuat Statement untuk mengeksekusi query Statement stmt; //Query String String query = "select * from gangguan"; //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); //Membuat statemen untuk query stmt = sambungan.createStatement(); if(!sambungan.isClosed()) { out.println("Connected"); } //mengeksekusi query rs = stmt.executeQuery(query); //Memanggil kelas Printer, dengan melempar data ResultSet //ke dalam method ngePrint new Printer().ngePrint(rs); rs.close(); stmt.close(); sambungan.close(); } catch(Exception e) { if(e.equals(new SQLException())) { SQLException eSQL = (SQLException)e; out.println(eSQL.getMessage()); eSQL.getErrorCode(); } e.printStackTrace(); } } }
Dan beginilah hasil akhirnya :