⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resultsettablemodel.java

📁 eq跨平台查询工具源码 eq跨平台查询工具源码
💻 JAVA
字号:
/* * ResultSetTableModel.java * * Copyright (C) 2002, 2003, 2004, 2005, 2006 Takis Diakoumis * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. * */package org.executequery.gui.editor;import java.lang.reflect.Method;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Types;import java.util.ArrayList;import java.util.List;import java.util.Vector;import javax.swing.table.AbstractTableModel;import org.underworldlabs.util.SystemProperties;import org.underworldlabs.util.MiscUtils;/* ---------------------------------------------------------- * CVS NOTE: Changes to the CVS repository prior to the  *           release of version 3.0.0beta1 has meant a  *           resetting of CVS revision numbers. * ---------------------------------------------------------- *//** <p>The query result set model. * *  @author   Takis Diakoumis * @version  $Revision: 1.4 $ * @date     $Date: 2006/05/14 06:56:52 $ */public class ResultSetTableModel extends AbstractTableModel {        /** The column names */    protected Vector columnHeaders;    /** The table values */    protected ArrayList tableData;    /** The column types */    protected int[] columnTypes;        /** the error message */    private String errorMessage;        /** The result set's meta data */    private Vector[] rsmdResults;        /** Whether the meta data should be generated */    private boolean holdMetaData;        /** The maximum number of records displayed */    private int maxRecords;    /** Indicates that the query executing has been interrupted */    private boolean interrupted;        public ResultSetTableModel(ResultSet rs) {        this(rs, -1);    }    public ResultSetTableModel() {        this(null, -1);    }    public ResultSetTableModel(int maxRecords) {        this(null, maxRecords);    }    public ResultSetTableModel(ResultSet rs, int maxRecords) {        this.maxRecords = maxRecords;        holdMetaData = SystemProperties.getBooleanProperty("user", "editor.results.metadata");        if (rs != null) {            try {                createTable(rs);            }            catch (Exception e) {}                    }            }    public void createTable(ResultSet rset) {        try {            rsmdResults = null;            ResultSetMetaData rsmd = rset.getMetaData();            int count = rsmd.getColumnCount();                        if (columnHeaders != null) {                columnHeaders.clear();                columnHeaders.ensureCapacity(count);            } else {                columnHeaders = new Vector(count);            }                        if (tableData != null) {                tableData.clear();            } else {                tableData = new ArrayList();            }                        /*            columnHeaders = new Vector(count);            columnTypes = new int[count];            tableData = new ArrayList();            */            columnTypes = new int[count];                        for (int i = 1; i <= count; i++) {                columnHeaders.add(rsmd.getColumnName(i));                columnTypes[i-1] = rsmd.getColumnType(i);            }            int recordCount = 0;            ArrayList rowData = null;            interrupted = false;            while (rset.next()) {                if (interrupted || Thread.currentThread().interrupted()) {                    throw new InterruptedException();                }                                recordCount++;                rowData = new ArrayList(count);                                for (int i = 1; i <= count; i++) {                                        try {                        rowData.add(rset.getObject(i));                    }                    catch (Exception e) {                        rowData.add(rset.getString(i));                    }                                    }                                tableData.add(rowData);                if (recordCount == maxRecords) {                    break;                }            }                        if (holdMetaData) {                setMetaDataVectors(rsmd);            }                        fireTableStructureChanged();        }        catch (SQLException sqlExc) {            //sqlExc.printStackTrace();            System.err.println("SQL error generating table at: " +                     sqlExc.getMessage());        }        catch (Exception e) {            //e.printStackTrace();            String message = e.getMessage();                        if (MiscUtils.isNull(message)) {                System.err.println("Exception generating table.");            }            else {                System.err.println("Exception generating table at: " + message);            }        }        finally {            if (rset != null) {                try {                    rset.close();                }                catch (SQLException sqlExc) {}            }        }            }        public void interrupt() {        interrupted = true;    }        public ArrayList getTableData() {        return tableData;    }        public void setHoldMetaData(boolean holdMetaData) {        this.holdMetaData = holdMetaData;    }        private void setMetaDataVectors(ResultSetMetaData rsmd) {                Class metaClass = rsmd.getClass();        Method[] metaMethods = metaClass.getMethods();                String STRING = "String";        String GET = "get";        String NO_WANT = "getColumnCount";        String COL_NAME = "ColumnName";                Vector columnHeaders = null;        Vector rowData = null;        Vector tableData = null;                try {                        int c_size = rsmd.getColumnCount();            columnHeaders = new Vector(metaMethods.length - 1);            tableData = new Vector(c_size);                        Object[] obj = new Object[1];                        for (int j = 1; j <= c_size; j++) {                                obj[0] = new Integer(j);                rowData = new Vector(metaMethods.length - 1);                                for (int i = 0; i < metaMethods.length; i++) {                                        if (i == 20) {                        break;                    }                                        try {                        String s = metaMethods[i].getName();                                                if (s.equals(NO_WANT)) {                            continue;                        }                                                Class c = metaMethods[i].getReturnType();                                                if (c.isPrimitive() || c.getName().endsWith(STRING)) {                                                        if (s.startsWith(GET)) {                                s = s.substring(3);                            }                                                        try {                                Object res = metaMethods[i].invoke(rsmd, obj);                                                                if (s.equals(COL_NAME)) {                                                                        if (j == 1) {                                        columnHeaders.insertElementAt(s,0);                                    }                                    rowData.insertElementAt(res.toString(),0);                                                                    }                                                                else {                                                                        if (j == 1) {                                        columnHeaders.add(s);                                    }                                    rowData.add(res.toString());                                                                    }                                                            }                                                        catch (AbstractMethodError abe) {                                continue;                            }                                                    }                                            }                                        catch (Exception e) {                        continue;                    }                                    }                                tableData.add(rowData);                            }                    } catch (java.sql.SQLException sqlExc) {}                rsmdResults = new Vector[2];        rsmdResults[0] = columnHeaders;        rsmdResults[1] = tableData;    }        public void setMaxRecords(int maxRecords) {        this.maxRecords = maxRecords;    }        public boolean hasResultSetMetaData() {        return rsmdResults != null && rsmdResults.length > 0;    }        public void reset() {        columnHeaders = null;        tableData = null;        columnTypes = null;        rsmdResults = null;    }        public Vector[] getResultSetMetaData() {        return rsmdResults;    }        public String getErrorMessage() {        return errorMessage;    }        public int getColumnCount() {        if (columnHeaders == null) {            return 0;        }        return columnHeaders.size();    }        public int getRowCount() {        if (tableData == null) {            return 0;        }        return tableData.size();    }        public Object getValueAt(int row, int column) {        if (row < tableData.size()) {            List rowData = (ArrayList)(tableData.get(row));            if (column < rowData.size()) {                return rowData.get(column);            }        }        return null;    }        public Object getRowValueAt(int row) {        return tableData.get(row);    }        public boolean isCellEditable(int row, int column) {        return true;    }        public String getColumnName(int column) {        return (String)(columnHeaders.elementAt(column));    }        public Class getColumnClass(int col) {                switch (columnTypes[col]) {                        case Types.TINYINT:                return Short.class;                            case Types.CHAR:            case Types.VARCHAR:            case Types.BOOLEAN: // don't display the checkbox                return String.class;                            case Types.BIGINT:            case Types.INTEGER:            case Types.DECIMAL:            case Types.NUMERIC:                return Number.class;                            case Types.DATE:            case Types.TIMESTAMP:            case Types.TIME:                return java.util.Date.class;                            case Types.DOUBLE:                return Double.class;                            default:                return Object.class;                        }            }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -