📄 queryframe.java
字号:
package multipagequery;import java.awt.*;import java.awt.event.*;import java.sql.*;import java.util.*;import javax.swing.*;import javax.swing.table.*;/** * Title: 使用多窗口查询数据库 * Description: 教学示范 * Copyright: Copyright (c) 2003 * Company: 北京师范大学计算机系 * @author 孙一林 * @version 1.0 */class queryFrame extends JFrame{ private JPanel contentPane; int recordCount = 0; int columnCount = 0; Connection connection = null; //定义与数据库进行连接的Connection对象 ResultSet rs = null; //定义数据库查询的结果集 Statement statement = null; //定义查询数据库的Statement对象 boolean lastQuery = false; //上次查询是否成功 Vector vector; //定义存储结果集数据的数组 String[] title; //定义显示数据表格的标题 AbstractTableModel tm; //定义显示数据表格的抽象类 JScrollPane scroll; //定义装载数据表格的容器 JTable table; public queryFrame(String tableName) { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { frameInit(tableName); } catch(Exception ex) { ex.printStackTrace(); } } private void frameInit(String tableName) throws Exception //创建显示数据窗口界面 { contentPane = (JPanel) this.getContentPane(); try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //指定与数据库连接使用JDBC-ODBC桥驱动程序 String url = "jdbc:odbc:student"; //指定数据源名 connection = DriverManager.getConnection(url); //与数据源建立连接 statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); //创建Statement接口实例 String sql = "select * from " + tableName; //创建取出所选表中所有数据的SQL语句 rs = statement.executeQuery(sql); //将数据存入结果集中 ResultSetMetaData rsData = rs.getMetaData(); //获取所选表的字段信息 columnCount = rsData.getColumnCount(); //获取所选表的字段个数 title = new String[columnCount]; //将所选表的字段名称存入数组 for(int i=1; i<=columnCount; i++) { title[i-1] = rsData.getColumnLabel(i); } while(rs.next()) //获取所选表的记录个数 { recordCount++; } } catch(SQLException ex){ //捕捉异常 System.out.println("\nERROR:----- SQLException -----\n"); while (ex != null) { System.out.println("Message: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("ErrorCode: " + ex.getErrorCode()); ex = ex.getNextException(); } } catch(Exception ex ) { ex.printStackTrace(); } this.setTitle("显示" + tableName + "表中的数据"); this.setSize(new Dimension(columnCount*80+50, recordCount*20+50));//通过数据行数及列数定义窗口大小 vector = new Vector(); tm = new AbstractTableModel() { //初始化显示数据的表格 public int getColumnCount() { return title.length; } public int getRowCount() { return vector.size(); } public Object getValueAt(int row, int column) { if(!vector.isEmpty()) { return ((Vector)vector.elementAt(row)).elementAt(column); } else { return null; } } public void setValueAt(Object value, int row, int column) { } public String getColumnName(int column) { return title[column]; } public Class getColumnClass(int c) { return getValueAt(0,c).getClass(); } public boolean isCellEditable(int row, int column) { return false; } }; table = new JTable(tm); table.setToolTipText("Display Query Result"); table.setAutoResizeMode(table.AUTO_RESIZE_ALL_COLUMNS); table.setCellSelectionEnabled(false); table.setShowHorizontalLines(true); table.setShowVerticalLines(true); scroll = new JScrollPane(table); scroll.setBounds(new Rectangle(10, 10, 10+columnCount*80, 10+recordCount*20));//通过数据行数及列数定义表格大小 contentPane.add(scroll,null); vector.removeAllElements(); tm.fireTableStructureChanged(); //刷新表格显示结果集中的数据 rs.beforeFirst(); while(rs.next()) { Vector rec_vector = new Vector(); for(int i=1; i<=columnCount; i++) { rec_vector.addElement(rs.getString(i)); } vector.addElement(rec_vector); } tm.fireTableStructureChanged(); } protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { try { statement.close(); //关闭Statement接口实例 connection.close(); //关闭Connection接口实例 } catch(Exception ex) { ex.printStackTrace(); } this.dispose(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -