FileDocCategorySizeDatePackage
RowSetModel.javaAPI DocExample5899Tue Aug 22 21:31:02 BST 2000com.imaginary.swing

RowSetModel.java

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

import javax.swing.table.AbstractTableModel;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
import javax.sql.RowSet;
import javax.sql.RowSetEvent;
import javax.sql.RowSetListener;

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 ) {
        }
    }
}