RowSetModel.java Source code

Java tutorial

Introduction

Here is the source code for RowSetModel.java

Source

/*
    
Database Programming with JDBC and Java, Second Edition
By George Reese
ISBN: 1-56592-616-1
    
Publisher: O'Reilly
    
*/

/* $Id: RowSetModel.java,v 1.1 1999/03/03 06:00:22 borg Exp $ */
/* Copyright  1999 George Reese, All Rights Reserved */

import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;

import javax.sql.RowSet;
import javax.sql.RowSetEvent;
import javax.sql.RowSetListener;
import javax.swing.table.AbstractTableModel;

public class RowSetModel extends AbstractTableModel implements RowSetListener {
    private RowSet rowSet = null;

    public RowSetModel(RowSet set) {
        super();
        rowSet = set;
        rowSet.addRowSetListener(this);
    }

    public void cursorMoved(RowSetEvent event) {
    }

    public Class getColumnClass(int column) {
        String cname;
        int type;

        try {
            ResultSetMetaData meta = rowSet.getMetaData();

            if (meta == null) {
                return null;
            }
            type = meta.getColumnType(column + 1);
        } catch (SQLException e) {
            e.printStackTrace();
            return super.getColumnClass(column);
        }
        switch (type) {
        case Types.BIT: {
            cname = "java.lang.Boolean";
            break;
        }
        case Types.TINYINT: {
            cname = "java.lang.Byte";
            break;
        }
        case Types.SMALLINT: {
            cname = "java.lang.Short";
            break;
        }
        case Types.INTEGER: {
            cname = "java.lang.Integer";
            break;
        }
        case Types.BIGINT: {
            cname = "java.lang.Long";
            break;
        }
        case Types.FLOAT:
        case Types.REAL: {
            cname = "java.lang.Float";
            break;
        }
        case Types.DOUBLE: {
            cname = "java.lang.Double";
            break;
        }
        case Types.NUMERIC: {
            cname = "java.lang.Number";
            break;
        }
        case Types.DECIMAL: {
            cname = "java.math.BigDecimal";
            break;
        }
        case Types.CHAR:
        case Types.VARCHAR:
        case Types.LONGVARCHAR: {
            cname = "java.lang.String";
            break;
        }
        case Types.DATE: {
            cname = "java.sql.Date";
            break;
        }
        case Types.TIME: {
            cname = "java.sql.Time";
            break;
        }
        case Types.TIMESTAMP: {
            cname = "java.sql.Timestamp";
            break;
        }
        case Types.BINARY:
        case Types.VARBINARY:
        case Types.LONGVARBINARY: {
            cname = "byte[]";
            break;
        }
        case Types.OTHER:
        case Types.JAVA_OBJECT: {
            cname = "java.lang.Object";
            break;
        }
        case Types.CLOB: {
            cname = "java.sql.Clob";
            break;
        }
        case Types.BLOB: {
            cname = "java.ssql.Blob";
            break;
        }
        case Types.REF: {
            cname = "java.sql.Ref";
            break;
        }
        case Types.STRUCT: {
            cname = "java.sql.Struct";
            break;
        }
        default: {
            return super.getColumnClass(column);
        }
        }
        try {
            return Class.forName(cname);
        } catch (Exception e) {
            e.printStackTrace();
            return super.getColumnClass(column);
        }
    }

    public int getColumnCount() {
        try {
            ResultSetMetaData meta = rowSet.getMetaData();

            if (meta == null) {
                return 0;
            }
            return meta.getColumnCount();
        } catch (SQLException e) {
            return 0;
        }
    }

    public String getColumnName(int col) {
        try {
            ResultSetMetaData meta = rowSet.getMetaData();

            if (meta == null) {
                return null;
            }
            return meta.getColumnName(col + 1);
        } catch (SQLException e) {
            return "Error";
        }
    }

    public int getRowCount() {
        try {
            if (rowSet.last()) {
                return (rowSet.getRow());
            } else {
                return 0;
            }
        } catch (SQLException e) {
            return 0;
        }
    }

    public Object getValueAt(int row, int col) {
        try {
            if (!rowSet.absolute(row + 1)) {
                return null;
            }
            return rowSet.getObject(col + 1);
        } catch (SQLException e) {
            return null;
        }
    }

    public void rowChanged(RowSetEvent event) {
        try {
            int row = rowSet.getRow();

            if (rowSet.rowDeleted()) {
                fireTableRowsDeleted(row, row);
            } else if (rowSet.rowInserted()) {
                fireTableRowsInserted(row, row);
            } else if (rowSet.rowUpdated()) {
                fireTableRowsUpdated(row, row);
            }
        } catch (SQLException e) {
        }
    }

    public void rowSetChanged(RowSetEvent event) {
        fireTableStructureChanged();
    }

    public void setValueAt(Object value, int row, int column) {
        try {
            if (!rowSet.absolute(row + 1)) {
                return;
            }
            rowSet.updateObject(column + 1, value);
        } catch (SQLException e) {
        }
    }
}