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;
第二次查询是一个简单的查询语句SELECT * FROM tableName。由于查询中没有WHERE子句的约束,这将会得到表中所有记录组成的结果集ResultSet。我应该不需要提到下面这些,就是假如tableName是一张有数以百万计的记录的表,你生成的表控件模型就将无法存放到内存中。你应该知道这些的,对吗?
例子3-13.测试基于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 {