java 创建一个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";  
         } 
    }

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10455.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论