package org.fanhongtao.tools.dbviewer; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.swing.table.AbstractTableModel; /** * @author Dharma * @created 2010-7-4 */ public class ColumnTableModel extends AbstractTableModel { private static final long serialVersionUID = 1L; private static final String[] columnNames = { "Index", "Column", "Type", "Precision", "Scale" }; private List<ColumnInfo> valueList = new ArrayList<ColumnInfo>(); public ColumnTableModel(ResultSet rs) { if (null == rs) { return; } try { ResultSetMetaData resultSetMetaData = rs.getMetaData(); int numColumns = resultSetMetaData.getColumnCount(); for (int i = 1; i < (numColumns + 1); i++) { String name = resultSetMetaData.getColumnName(i); String typeName = resultSetMetaData.getColumnTypeName(i); int precision = resultSetMetaData.getPrecision(i); int scale = resultSetMetaData.getScale(i); ColumnInfo info = new ColumnInfo(i, name, typeName, precision, scale); valueList.add(info); } } catch (SQLException e) { e.printStackTrace(); } } @Override public String getColumnName(int column) { return columnNames[column]; } /* (non-Javadoc) * @see javax.swing.table.TableModel#getColumnCount() */ @Override public int getColumnCount() { return columnNames.length; } /* (non-Javadoc) * @see javax.swing.table.TableModel#getRowCount() */ @Override public int getRowCount() { return valueList.size(); } /* (non-Javadoc) * @see javax.swing.table.TableModel#getValueAt(int, int) */ @Override public Object getValueAt(int rowIndex, int columnIndex) { ColumnInfo info = valueList.get(rowIndex); switch (columnIndex) { case 0: return info.getIndex(); case 1: return info.getName(); case 2: return info.getType(); case 3: return info.getPrecision(); case 4: return info.getScale(); } return null; } } class ColumnInfo { private int index; private String name; private String type; private int precision; private int scale; public ColumnInfo(int index, String name, String type, int precision, int scale) { this.index = index; this.name = name; this.type = type; this.precision = precision; this.scale = scale; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public int getPrecision() { return precision; } public void setPrecision(int precision) { this.precision = precision; } public int getScale() { return scale; } public void setScale(int scale) { this.scale = scale; } }