ResultSetTableModel, class untuk menampilkan resultset dalam JTable

Banyak programmer yang beralih dari pemrograman visual ke java selalu memulai belajar java dengan cara membuat aplikasi kecil yang bisa menampilkan isi dari database, ga ada yang salah dengan pendekatan ini, hanya saja pendekatan ini seperti memilih untuk memanjat tebing daripada mendaki lereng, kalau pada satu kesalahan/stuck pada level tertentu, misalnya bikin koneksi ke database, semangad langsung drop. ini pengalaman pertama shaya migrasi dari VB ke java 2 tahun lalu.

sebenernya proses belajar java yang lebih baik adalah belajar java language fundamental yang dibarengi dengan belajar konsep Java OOP, shaya dulu belajar menggunakan SCJP (Sun Certified Java Programmer) module ditemani dengan Java Howto Program dari Dietel. modul SCJP tersebut membantu shaya memahami java language secara benar, dan yang paling penting adalah mengenal kegunaak semua keyword java yang jumlahnya lumayan banyak.

module SCJP itu banyaknya 9 chapter dan sekitar 500 halaman, bahasa inggris pula!! shaya menghabiskan waktu sekiatar 2 minggu hanya untuk membaca sampe chapter 8, chapter 9 multithreading sampe sekarang masih ga paham sama sekali.. :(. buku Java Howto program dari dietel mengajarkan java secara praktis dan mengenalkan class-class JDK seperti Swing, IO dll, jadi byar ga bosan baca terus Java language fundamental bisa diselingi dengan praktek pemrograman menggunakan Java Howto Program.

nah buat yang kekeuh mau bisa nampilin database dalam JTable, contoh ini menggunakan netbeans dan mysql, ini langkah-langkahnya :

1. install, start DBMS dan buat sebuah table untuk ditampilkan
(shaya memilih MySql, kalau SqlServer2000 perlu donlot dan update SqlServer 2000 service pack v4.0)

2. Download MySql JDBC driver

3. Tambahkan jar jdbc driver mysql ke library netbeans, langkah-langkahnya

   a. download dan install netbeans, http://www.netbeans.org

   b. buat project baru : file => new project; categories => general => java application

   c. kemudian di window projects sisi sebelah kiri, klik kanan di folder library => add folder/jar

4. Load driver

Class.forName("com.mysql.jdbc.Driver");

5. Bikin koneksi ke database

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/data?user=root&password=admin");

6. bikin statement, ingat2 parameter yang harus diberikan untuk membuat statement, karena resultset harus bisa maju-mundur

Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

7. bikin resultset dari query

ResultSet rs =st.executeQuery("select * from authors limit 5,10");

8. setelah bikin resultset, buat sebuah class yang implement TableModel, atau extends DefaultTableModel, atau extends AbstractTableModel, contoh class


public class ResultSetTableModel extends AbstractTableModel{
private ResultSet rs;
public ResultSetTableModel(ResultSet rs) {
this.rs = rs;
fireTableDataChanged();
}
public int getColumnCount() {
try {
if(rs == null)
return 0;
else
return rs.getMetaData().getColumnCount();
}catch(SQLException e) {
System.out.println("resultset generating error while getting column count");
System.out.println(e.getMessage());
return 0;
}
}
public int getRowCount() {
try {
if(rs == null)
return 0;
else {
rs.last();
return rs.getRow();
}
}catch(SQLException e) {
System.out.println("resultset generating error while getting rows count");
System.out.println(e.getMessage());
return 0;
}
}
public Object getValueAt(int rowIndex, int columnIndex) {
if(rowIndex<0 || rowIndex > getRowCount() ||
columnIndex < 0 || columnIndex > getColumnCount())
return null;
try {
if(rs == null)
return null;
else {
rs.absolute(rowIndex+1);
return rs.getObject(columnIndex+1);
}
}catch(SQLException e) {
System.out.println("resultset generating error while fetching rows");
System.out.println(e.getMessage());
return null;
}
}
@Override
public String getColumnName(int columnIndex) {
try {
return rs.getMetaData().getColumnName(columnIndex+1);
} catch (SQLException e) {
System.out.println("resultset generating error while fetching column name");
System.out.println(e.getMessage());
}
return super.getColumnName(columnIndex);
}
}

9. kemudian bikin JTable-nya

JTable table = new JTable(new ResultSetTableModel(rs));

10. tampilkan tablenya dalam Container, bisa JPanel, JFrame atau container yang lain, dan harus diingat untuk memasukkan JTable dalam JScrollPanel agar table bisa discroll ke kiri-kanan, atas-bawah. Contohnya :


public class DataFrame{
public static void main(String[] args){
JFrame frame = new JFrame();
JScrollPane pane = new JScrollPane();
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
Connection conn;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/akuntansi?user=root&password=admin");
Statement st= conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs =st.executeQuery("select * from tbl_customer ");
ResultSetTableModel model = new ResultSetTableModel(rs);
JTable table = new JTable(model);
pane.setViewportView(table);
frame.getContentPane().add(pane);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}

ini hasilnya :

moga2 membantu, selamat mecoba

regards

04:20PM 25 Jan 2007 dalam kategori Java oleh ifnu Comments[2]

Comments:

Kok tidak GUI

Posted by fazrin on October 03, 2007 at 10:24 AM WIT #

JscrollPane pane = new JScrollPane(table)

Posted by cendra on December 02, 2008 at 06:21 AM WIT #

Post a Comment:
  • HTML Syntax: Allowed