请问高手JTABLE读去数据库的例子

解决方案 »

  1.   

    读数据库用JDBC,把数据显示出来用JTable。如果你俩者兼会,就没有问题了。
      

  2.   

    就是不知道如何在JTABLE中显示数据,把数据库的数据放在Jtable显示出来
      

  3.   

    连接数据库
    import java.util.Vector;
    import java.sql.*;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.event.TableModelEvent;public class JDBCAdapter extends AbstractTableModel {
        Connection          connection;
        Statement           statement;
        ResultSet           resultSet;
        String[]            columnNames = {};
        Vector rows = new Vector();
        ResultSetMetaData   metaData;    public JDBCAdapter(String url, String driverName,
                           String user, String passwd) {
            try {
                Class.forName(driverName);
                System.out.println("Opening db connection");            connection = DriverManager.getConnection(url, user, passwd);
                statement = connection.createStatement();
            }
            catch (ClassNotFoundException ex) {
                System.err.println("Cannot find the database driver classes.");
                System.err.println(ex);
            }
            catch (SQLException ex) {
                System.err.println("Cannot connect to this database.");
                System.err.println(ex);
            }
         }    public void executeQuery(String query) {
            if (connection == null || statement == null) {
                System.err.println("There is no database to execute the query.");
                return;
            }
            try {
                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);
                }
                //  close(); Need to copy the metaData, bug in jdbc:odbc driver.
                fireTableChanged(null); // Tell the listeners a new table has arrived.
            }
            catch (SQLException ex) {
                System.err.println(ex);
            }
        }    public void close() throws SQLException {
            System.out.println("Closing db connection");
            resultSet.close();
            statement.close();
            connection.close();
        }    protected void finalize() throws Throwable {
            close();
            super.finalize();
        }    //////////////////////////////////////////////////////////////////////////
        //
        //             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) {
            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");
                // statement.executeQuery(query);
            }
            catch (SQLException e) {
                //     e.printStackTrace();
                System.err.println("Update failed");
            }
            Vector dataRow = (Vector)rows.elementAt(row);
            dataRow.setElementAt(value, column);    }
    }
      

  4.   

    显示数据
    import java.applet.Applet;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import javax.swing.event.*;
    import javax.swing.border.*;public class TableExample implements LayoutManager {
        static String[] ConnectOptionNames = { "Connect" };
        static String   ConnectTitle = "Connection Information";    Dimension   origin = new Dimension(0, 0);    JButton     fetchButton;
        JButton     showConnectionInfoButton;    JPanel      connectionPanel;
        JFrame      frame; // The query/results window.    JLabel      userNameLabel;
        JTextField  userNameField;
        JLabel      passwordLabel;
        JTextField  passwordField;
        // JLabel      queryLabel;
        JTextArea   queryTextArea;
        JComponent  queryAggregate;
        JLabel      serverLabel;
        JTextField  serverField;
        JLabel      driverLabel;
        JTextField  driverField;    JPanel      mainPanel;    TableSorter sorter;
        JDBCAdapter dataBase;
        JScrollPane tableAggregate;    /**
         * Brigs up a JDialog using JOptionPane containing the connectionPanel.
         * If the user clicks on the 'Connect' button the connection is reset.
         */
        void activateConnectionDialog() {
    if(JOptionPane.showOptionDialog(tableAggregate, connectionPanel, ConnectTitle,
       JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
                       null, ConnectOptionNames, ConnectOptionNames[0]) == 0) {
        connect();
                frame.setVisible(true);
    }
    else if(!frame.isVisible())
        System.exit(0);
        }    /**
         * Creates the connectionPanel, which will contain all the fields for
         * the connection information.
         */
        public void createConnectionDialog() {
      // Create the labels and text fields.
    userNameLabel = new JLabel("User name: ", JLabel.RIGHT);
      userNameField = new JTextField(""); passwordLabel = new JLabel("Password: ", JLabel.RIGHT);
    passwordField = new JTextField("");    serverLabel = new JLabel("Database URL: ", JLabel.RIGHT);
    serverField = new JTextField("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=d:\\Map2.mdb"); driverLabel = new JLabel("Driver: ", JLabel.RIGHT);
    driverField = new JTextField("sun.jdbc.odbc.JdbcOdbcDriver");
    connectionPanel = new JPanel(false);
    connectionPanel.setLayout(new BoxLayout(connectionPanel,
    BoxLayout.X_AXIS)); JPanel namePanel = new JPanel(false);
    namePanel.setLayout(new GridLayout(0, 1));
    namePanel.add(userNameLabel);
    namePanel.add(passwordLabel);
    namePanel.add(serverLabel);
    namePanel.add(driverLabel); JPanel fieldPanel = new JPanel(false);
    fieldPanel.setLayout(new GridLayout(0, 1));
    fieldPanel.add(userNameField);
    fieldPanel.add(passwordField);
    fieldPanel.add(serverField);
            fieldPanel.add(driverField); connectionPanel.add(namePanel);
    connectionPanel.add(fieldPanel);
        }    public TableExample() {
            mainPanel = new JPanel();        // Create the panel for the connection information
    createConnectionDialog(); // Create the buttons.
    showConnectionInfoButton = new JButton("Configuration");
            showConnectionInfoButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                activateConnectionDialog();
            }
        }
    ); fetchButton = new JButton("Fetch");
            fetchButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                fetch();
            }
        }
    ); // Create the query text area and label.
            queryTextArea = new JTextArea("SELECT * FROM diqu", 25, 25);
    queryAggregate = new JScrollPane(queryTextArea);
            queryAggregate.setBorder(new BevelBorder(BevelBorder.LOWERED));        // Create the table.
            tableAggregate = createTable();
            tableAggregate.setBorder(new BevelBorder(BevelBorder.LOWERED)); // Add all the components to the main panel.
            mainPanel.add(fetchButton);
            mainPanel.add(showConnectionInfoButton);
            mainPanel.add(queryAggregate);
            mainPanel.add(tableAggregate);
            mainPanel.setLayout(this);        // Create a Frame and put the main panel in it.
            frame = new JFrame("TableExample");
            frame.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {System.exit(0);}});
            frame.setBackground(Color.lightGray);
            frame.getContentPane().add(mainPanel);
            frame.pack();
            frame.setVisible(false);
            frame.setBounds(200, 200, 640, 480); activateConnectionDialog();
        }    public void connect() {
           dataBase = new JDBCAdapter(
                serverField.getText(),
                driverField.getText(),
                userNameField.getText(),
                passwordField.getText());
           sorter.setModel(dataBase);
       }    public void fetch() {
            dataBase.executeQuery(queryTextArea.getText());
        }    public JScrollPane createTable() {
            sorter = new TableSorter();        //connect();
            //fetch();        // Create the table
            JTable table = new JTable(sorter); 
            
    // Use a scrollbar, in case there are many columns. 
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);         // Install a mouse listener in the TableHeader as the sorter UI.
            sorter.addMouseListenerToHeaderInTable(table);        JScrollPane scrollpane = new JScrollPane(table);        return scrollpane;
        }    public static void main(String s[]) {
            new TableExample();
        }    public Dimension preferredLayoutSize(Container c){return origin;}
        public Dimension minimumLayoutSize(Container c){return origin;}
        public void addLayoutComponent(String s, Component c) {}
        public void removeLayoutComponent(Component c) {}
        public void layoutContainer(Container c) {
            Rectangle b = c.getBounds();
            int topHeight = 90;
            int inset = 4;
            showConnectionInfoButton.setBounds(b.width-2*inset-120, inset, 120, 25);
            fetchButton.setBounds(b.width-2*inset-120, 60, 120, 25);
            // queryLabel.setBounds(10, 10, 100, 25);
            queryAggregate.setBounds(inset, inset, b.width-2*inset - 150, 80);
            tableAggregate.setBounds(new Rectangle(inset,
                                                   inset + topHeight,
                                                   b.width-2*inset,
                                                   b.height-2*inset - topHeight));
        }}
    数据库用的assess
    如果其他请改第2篇代码中的
    userNameLabel = new JLabel("User name: ", JLabel.RIGHT);
      userNameField = new JTextField(""); passwordLabel = new JLabel("Password: ", JLabel.RIGHT);
    passwordField = new JTextField("");    serverLabel = new JLabel("Database URL: ", JLabel.RIGHT);
    serverField = new JTextField("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=d:\\Map2.mdb"); driverLabel = new JLabel("Driver: ", JLabel.RIGHT);
    driverField = new JTextField("sun.jdbc.odbc.JdbcOdbcDriver");
    这些地方