| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
e98123
9年前发布

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";            }      }