欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

创建一个JDBC表格模型,创建JDBC表格模型,创建一个JDBC表格模型

来源: javaer 分享于  点击 7045 次 点评:202

创建一个JDBC表格模型,创建JDBC表格模型,创建一个JDBC表格模型


创建一个JDBC表格模型

创建一个JDBC表格模型

    import javax.swing.*;     import javax.swing.table.*;     import java.sql.*;     import java.util.*;    /** an immutable table model built from getting         metadata about a table in a jdbc database     */     public class JDBCTableModel extends AbstractTableModel {        Object[][] contents;        String[] columnNames;        Class[] columnClasses;        public JDBCTableModel (Connection conn,                   String tableName)            throws SQLException {            super();            getTableContents (conn, tableName);        }        protected void getTableContents (Connection conn,                     String tableName)            throws SQLException {        // get metadata: what columns exist and what        // types (classes) are they?        DatabaseMetaData meta = conn.getMetaData();        System.out.println ("got meta = " + meta);        ResultSet results =            meta.getColumns (null, null, tableName, null) ;        System.out.println ("got column results");        ArrayList colNamesList = new ArrayList();        ArrayList colClassesList = new ArrayList();        while (results.next()) {            colNamesList.add (results.getString ("COLUMN_NAME"));             System.out.println ("name: " +                 results.getString ("COLUMN_NAME"));            int dbType = results.getInt ("DATA_TYPE");            switch (dbType) {            case Types.INTEGER:        colClassesList.add (Integer.class); break;             case Types.FLOAT:        colClassesList.add (Float.class); break;             case Types.DOUBLE:             case Types.REAL:        colClassesList.add (Double.class); break;             case Types.DATE:             case Types.TIME:             case Types.TIMESTAMP:        colClassesList.add (java.sql.Date.class); break;             default:        colClassesList.add (String.class); break;             };             System.out.println ("type: " +                results.getInt ("DATA_TYPE"));            }            columnNames = new String [colNamesList.size()];            colNamesList.toArray (columnNames);            columnClasses = new Class [colClassesList.size()];            colClassesList.toArray (columnClasses);            // get all data from table and put into            // contents array            Statement statement =        conn.createStatement ();            results = statement.executeQuery ("SELECT * FROM " +                          tableName);            ArrayList rowList = new ArrayList();            while (results.next()) {        ArrayList cellList = new ArrayList();         for (int i = 0; i<columnClasses.length; i++) {             Object cellValue = null;            if (columnClasses[i] == String.class)         cellValue = results.getString (columnNames[i]);             else if (columnClasses[i] == Integer.class)         cellValue = new Integer (                 results.getInt (columnNames[i]));             else if (columnClasses[i] == Float.class)         cellValue = new Float (                 results.getInt (columnNames[i]));             else if (columnClasses[i] == Double.class)         cellValue = new Double (                 results.getDouble (columnNames[i]));            else if (columnClasses[i] == java.sql.Date.class)         cellValue = results.getDate (columnNames[i]);             else         System.out.println ("Can't assign " +                 columnNames[i]);            cellList.add (cellValue);        }// for        Object[] cells = cellList.toArray();        rowList.add (cells);    } // while    // finally create contents two-dim array    contents = new Object[rowList.size()] [];    for (int i=0; i<contents.length; i++)        contents[i] = (Object []) rowList.get (i);    System.out.println ("Created model with " +               contents.length + " rows");    // close stuff    results.close();    statement.close();    }    // AbstractTableModel methods    public int getRowCount() {        return contents.length;    }    public int getColumnCount() {        if (contents.length == 0)            return 0;        else            return contents[0].length;        }        public Object getValueAt (int row, int column) {            return contents [row][column];        }        // overrides methods for which AbstractTableModel        // has trivial implementations        public Class getColumnClass (int col) {            return columnClasses [col];        }        public String getColumnName (int col) {             return columnNames [col];         }     }

测试基于JDBC的表

    import javax.swing.*;     import javax.swing.table.*;     import java.sql.*;     import java.util.*;     import java.io.*;    public class TestJDBCTable {        public static void main (String[] args) {            try {        /*          driver, url, user, and pass can be passed in as          system properties "jdbctable.driver",          "jdbctable.url", "jdbctable.user", and          "jdbctable.pass", or specified in a file          called "jdbctable.properties" in current          directory        */        Properties testProps = new Properties();        String ddriver = System.getProperty ("jdbctable.driver");        String durl = System.getProperty ("jdbctable.url");        String duser = System.getProperty ("jdbctable.user");        String dpass = System.getProperty ("jdbctable.pass");        if (ddriver != null)             testProps.setProperty ("jdbctable.driver", ddriver);         if (durl != null)             testProps.setProperty ("jdbctable.url", durl);         if (duser != null)             testProps.setProperty ("jdbctable.user", duser);        if (dpass != null)             testProps.setProperty ("jdbctable.pass", dpass);        try {             testProps.load (new FileInputStream (                    new File ("jdbctable.properties")));         } catch (Exception e) {} // ignore FNF, etc.         System.out.println ("Test Properties:");         testProps.list (System.out);        // now get a connection         // note care to replace nulls with empty strings         Class.forName(testProps.getProperty                ("jdbctable.driver")).newInstance();        String url = testProps.getProperty ("jdbctable.url");        url = ((url == null) ? "" : url);         String user = testProps.getProperty ("jdbctable.user");         user = ((user == null) ? "" : user);         String pass = testProps.getProperty ("jdbctable.pass");         pass = ((pass == null) ? "" : pass);        Connection conn =             DriverManager.getConnection (url, user, pass);        // create db table to use        String tableName = createSampleTable(conn);        // get a model for this db table and add to a JTable        TableModel mod =            new JDBCTableModel (conn, tableName);        JTable jtable = new JTable (mod);        JScrollPane scroller =            new JScrollPane (jtable,                 ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,                 ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);        JFrame frame = new JFrame ("JDBCTableModel demo");        frame.getContentPane().add (scroller);        frame.pack();        frame.setVisible (true);        conn.close();            } catch (Exception e) {        e.printStackTrace();            }        }        public static String createSampleTable (Connection conn)            throws SQLException {            Statement statement = conn.createStatement();            // drop table if it exists            try {        statement.execute ("DROP TABLE EMPLOYEES");            } catch (SQLException sqle) {        sqle.printStackTrace(); // if table !exists            }            statement.execute ("CREATE TABLE EMPLOYEES " +                    "(Name CHAR(20), Title CHAR(30), Salary INT)");             statement.execute ("INSERT INTO EMPLOYEES VALUES " +                    "('Jill', 'CEO', 200000 )");             statement.execute ("INSERT INTO EMPLOYEES VALUES " +                    "('Bob', 'VP', 195000 )");             statement.execute ("INSERT INTO EMPLOYEES VALUES " +                        "('Omar', 'VP', 190000 )");             statement.execute ("INSERT INTO EMPLOYEES VALUES " +                    "('Amy', 'Software Engineer', 50000 )");             statement.execute ("INSERT INTO EMPLOYEES VALUES " +                    "('Greg', 'Software Engineer', 45000 )");         statement.close();         return "EMPLOYEES";          }    }
相关栏目:

用户点评