package dao; /* 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 */ // Source: http://www.java2s.com/Code/Java/Database-SQL-JDBC/RowSetModelbasedonTableModelJTable.htm 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 RowSetTableModel extends AbstractTableModel implements RowSetListener { private RowSet rowSet = null; public RowSetTableModel(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) { } } }