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

📄 jdbctablemodel.java

📁 weka机器学习系统(本站可下载)的拓展
💻 JAVA
字号:
package com.prcomps.cahitarf.gui;

import javax.swing.table.AbstractTableModel;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Vector;

/**
 */
public class JdbcTableModel
        extends AbstractTableModel
{
    private Connection        connection;
    private String[]          columnNames = {};
    private Vector            rows = new Vector();
    private ResultSetMetaData metaData;

    private int maxRows = 0;

    public JdbcTableModel()
    {
    }

    public void setConnection( Connection connection )
    {
        this.connection = connection;
    }

    public void executeQuery( String query )
        throws SQLException
    {
        Statement statement;
        ResultSet resultSet;
        rows.clear();
        columnNames = new String[0];
        fireTableStructureChanged();
        if ( connection == null )
            throw new SQLException( "There is no database connection to execute the query." );

        statement = connection.createStatement();
        statement.setMaxRows( maxRows );
        resultSet = statement.executeQuery(query);
        metaData = resultSet.getMetaData();

        int numberOfColumns =  metaData.getColumnCount();
        columnNames = new String[numberOfColumns];
        // Get the column names and cache them.
        // Then we can close the connection.
        for(int column = 0; column < numberOfColumns; column++) {
            columnNames[column] = metaData.getColumnLabel(column+1);
        }

        // Get all rows.
        //rows = new Vector();
        while (resultSet.next())
        {
            Vector newRow = new Vector();
            for (int i = 1; i <= getColumnCount(); i++)
                newRow.addElement(resultSet.getObject(i));
            rows.addElement(newRow);
        }
        resultSet.close();
        statement.close();

        fireTableChanged( null );
    }

    public void close()
            throws SQLException
    {
        connection.close();
    }

    protected void finalize() throws Throwable
    {
        close();
        super.finalize();
    }

    public int getMaxRows()                 { return maxRows; }

    public void setMaxRows( int maxRows )   { this.maxRows = maxRows; }

    //////////////////////////////////////////////////////////////////////////
    //
    //             Implementation of the TableModel Interface
    //
    //////////////////////////////////////////////////////////////////////////

    // MetaData

    public String getColumnName(int column)
    {
        if ( columnNames[column] != null )
            return columnNames[column];
        else
            return "";
    }

    public Class getColumnClass(int column)
    {
        int type;
        try
        {
            type = metaData.getColumnType(column+1);
        }
        catch (SQLException e)
        {
            return super.getColumnClass(column);
        }

        switch ( type )
        {
        case Types.CHAR:
        case Types.VARCHAR:
        case Types.LONGVARCHAR:
            return String.class;

        case Types.BIT:
            return Boolean.class;

        case Types.TINYINT:
        case Types.SMALLINT:
        case Types.INTEGER:
            return Integer.class;

        case Types.BIGINT:
            return Long.class;

        case Types.FLOAT:
        case Types.DOUBLE:
            return Double.class;

        case Types.DATE:
            return java.sql.Date.class;

        default:
            return Object.class;
        }
    }

    public boolean isCellEditable(int row, int column)
    {
        return false;
        /*
        try
        {
            return metaData.isWritable(column+1);
        }
        catch (SQLException e) {
            return false;
        }
        */
    }

    public int getColumnCount()
    {
        return columnNames.length;
    }

    // Data methods

    public int getRowCount()
    {
        return rows.size();
    }

    public Object getValueAt(int aRow, int aColumn)
    {
        Vector row = (Vector)rows.elementAt(aRow);
        return row.elementAt(aColumn);
    }

    public String dbRepresentation(int column, Object value)
    {
        int type;

        if (value == null)
            return "null";

        try
        {
            type = metaData.getColumnType(column+1);
        }
        catch (SQLException e)
        {
            return value.toString();
        }

        switch(type)
        {
        case Types.INTEGER:
        case Types.DOUBLE:
        case Types.FLOAT:
            return value.toString();
        case Types.BIT:
            return ((Boolean)value).booleanValue() ? "1" : "0";
        case Types.DATE:
            return value.toString(); // This will need some conversion.
        default:
            return "\""+value.toString()+"\"";
        }

    }

    public void setValueAt(Object value, int row, int column)
    {
        try {
            String tableName = metaData.getTableName(column+1);
            // Some of the drivers seem buggy, tableName should not be null.
            if (tableName == null) {
                System.out.println("Table name returned null.");
            }
            String columnName = getColumnName(column);
            String query =
                "update "+tableName+
                " set "+columnName+" = "+dbRepresentation(column, value)+
                " where ";
            // We don't have a model of the schema so we don't know the
            // primary keys or which columns to lock on. To demonstrate
            // that editing is possible, we'll just lock on everything.
            for(int col = 0; col<getColumnCount(); col++) {
                String colName = getColumnName(col);
                if (colName.equals("")) {
                    continue;
                }
                if (col != 0) {
                    query = query + " and ";
                }
                query = query + colName +" = "+
                    dbRepresentation(col, getValueAt(row, col));
            }
            //System.out.println(query);
            //System.out.println("Not sending update to database");
        }
        catch (SQLException e) {
            //     e.printStackTrace();
            System.err.println("Update failed");
        }
        Vector dataRow = (Vector)rows.elementAt(row);
        dataRow.setElementAt(value, column);

    }

}

⌨️ 快捷键说明

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