Model tabeli działający na ResultSet JDBC

import java.sql.*;
import javax.swing.table.AbstractTableModel;

/**
 *
 * Plik: JdbcTableModel.java
 *
 * @author Paweł Kraszewski <pawel@kraszewscy.net>
 *
 */


public class JdbcTableModel
        extends AbstractTableModel
  {

    private static final long serialVersionUID = 1L;
    private int dbRow;
    private ResultSetMetaData dbMeta;
    private ResultSet dbResult;
    private int dbRows;
    private int dbCols;

    public JdbcTableModel( ResultSet result )
            throws SQLException
      {
        dbRow = -1;
        dbMeta = result.getMetaData();
        dbResult = result;
        dbResult.last();
        dbRows = dbResult.getRow();
        dbCols = dbMeta.getColumnCount();
      }

    public int getRowCount()
      {
        return dbRows;
      }

    public int getColumnCount()
      {
        return dbCols;
      }

    public Object getValueAt( int row, int col )
      {
        try
          {
            if( dbRow != row )
              {
                dbResult.absolute( row + 1 );
                dbRow = row;
              }

            return dbResult.getObject( col + 1 );
          }
        catch( SQLException ex )
          {
            return null;
          }
      }

    @Override
    public Class<?> getColumnClass( int col )
      {
        try
          {
            return Class.forName( dbMeta.getColumnClassName( col + 1 ) );
          }
        catch( Exception ex )
          {
            return Object.class;
          }
      }

    @Override
    public String getColumnName( int col )
      {
        try
          {
            return dbMeta.getColumnLabel( col + 1 );
          }
        catch( SQLException ex )
          {
            return "";
          }
      }
  }