// File: DataModel.java from JTableDemo project

/** http://www.javaadvice.com/javaadvice/servlet/ja/action?cmd=ja.advices.rss&type=awtswing&qNo=1 */

import java.sql.*;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;

public class DataModel extends AbstractTableModel  {
    private Vector<String[]> data;
    private final String[] columnHeading = { "Name", "Address", "State", "Zip" };

    public DataModel() {
        data = new Vector<String[]>();
        populateData();
    }

    public String getColumnName(int i) {
        return (String) columnHeading[i];
    }

    public int getColumnCount() {
        return columnHeading.length;
    }

    public int getRowCount() {
        return data.size();
    }

    public String getValueAt(int row, int col) {
        return (data.get(row))[col];
    }

    public boolean isCellEditable(int row, int col) {
        return false;
    }

    /*
     * Get a connection
     */
    private Connection getDatabaseConnection() throws SQLException, ClassNotFoundException {
        // Implement database connection. Shown below is an example to connect to mySQL
        Class.forName("com.mysql.jdbc.Driver");
        return DriverManager.getConnection("jdbc:mysql://localhost:3306/document?autoReconnect=true&user=root&password=m");
    }

    /*
     * Fetch the data and populate the data 
     */
    private void populateData() {
        Connection con         = null;
        PreparedStatement stmt = null;
        ResultSet rs           = null;
        // Assume that we have a table called user_list
        String sql = "select name, address, state, zip from user_list";
        try {
            con  = getDatabaseConnection();
            stmt = con.prepareStatement(sql);
            rs   = stmt.executeQuery();
            while (rs.next()) {
                String[] obj = new String[columnHeading.length];
                obj[0] = rs.getString("name");
                obj[1] = rs.getString("address");
                obj[2] = rs.getString("state");
                obj[3] = rs.getString("zip");
                data.add(obj);
            }
        } catch (Throwable t) {
            System.err.println("Caught exception (Throwable) !\n");
            t.printStackTrace();
        } finally {
            try {
                if (rs != null) 
                    rs.close();
            } catch (Throwable t) {
                System.err.println("Caught exception in finally (1) !\n");
                t.printStackTrace();
            }
            try {
                if (stmt != null) 
                    stmt.close();
            } catch (Throwable t) {
                System.err.println("Caught exception in finally (2) !\n");
                t.printStackTrace();
            }
            try {
                if (con != null) 
                    con.close();
            } catch (Throwable t) {
                System.err.println("Caught exception in finally (3) !\n");
                t.printStackTrace();
            }
        }
    }

}
