displayqueryresults.java

来自「主要是对于JAVA的编程的基本语言 希望能够帮得上你。」· Java 代码 · 共 174 行

JAVA
174
字号
package database;import java.applet.*;import java.sql.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;/** * Title: 显示查询数据库结果 * Description: Java语言演示程序:显示查询数据库结果,用于泸州职业技术学院电信系Java课程教学示范。 * Copyright: Copyright (c) 2007 * Company: 泸州职业技术学院电信系 * @author 华卫 * @version 1.0 *//* * 从数据库中获得查询结果后,为了便于显示,常常需要整理和重新排列数据, * java.util包中的Vector类为此提供了方便,在该类中封装了异构链表和 * 复杂数组体,它实际上是一个对象引用的可变长数组,即向量的大小是可以 * 动态增加和减少的,它不要求每个元素的类型相同,即向量中可以混合多种 * 对象类型,因此,Vector类正好符合数据库记录中属性类型不一的特点, * 而其动态性也正好符合数据库查询时,结果集中记录个数不定的特点。通过 * getElement()和addElement()等方法亦可以方便地得到向量中的一个 * 对象和加入一个对象等操作。 *  * 程序功能:根据输入的SQL语句,以表格方式显示查询结果。 */public class DisplayQueryResults extends JFrame {	 	//数据库变量定义	private Connection connection;         	private Statement statement;	private ResultSet resultSet;	private ResultSetMetaData rsMetaData;	 	//定义组件	private JTable table;	private JTextArea inputQuery;	private JButton submitQuery;	 	//声明屏幕宽度和高度变量	int screenWidth,screenHeight;	 	//构造方法	public DisplayQueryResults() {		 		//设置窗口标题		super("输入SQL语句,按查询按钮查看结果。");      		  	    String url="jdbc:odbc:testdb.mdb";	    String username="testdb";	    String password="123456";	    	    screenWidth=(int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();		screenHeight=(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();			     	    try {	    	Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");	    	connection=DriverManager.getConnection(url, username, password);	    } catch (ClassNotFoundException cnfex) {	    	System.err.println("装载 JDBC/ODBC 驱动程序失败。");	    	cnfex.printStackTrace();	    	System.exit(1);	    } catch (SQLException sqlex) {	    	System.err.println("无法连接数据库");	    	sqlex.printStackTrace();	    	System.exit(1);	    }	      	    String test="select * from test where 性别='女';";	    inputQuery=new JTextArea(test, 4, 30);	    submitQuery=new JButton("查询");	              //定义Button事件	    submitQuery.addActionListener(new ActionListener() {	    	public void actionPerformed(ActionEvent e) {	              getTable();	    	}	    });	      	    //创建界面	    JPanel topPanel=new JPanel();          	    topPanel.setLayout(new BorderLayout());	    topPanel.add(new JScrollPane(inputQuery), BorderLayout.CENTER);	    topPanel.add(submitQuery, BorderLayout.SOUTH);	    table=new JTable();	     	    Container c=getContentPane(); //获得内容面板	    c.setLayout(new BorderLayout());	    c.add(topPanel, BorderLayout.NORTH);	    c.add(table, BorderLayout.CENTER);	    inputQuery.setFont(new Font("宋体",Font.PLAIN,15));	    getTable(); 	    setSize(500, 300);	    setLocation((screenWidth-getWidth())/2, (screenHeight-getHeight())/2); //让窗口在屏幕居中	     	    setVisible(true); // 显示窗口	}	 	private void getTable() {		try {			String query=inputQuery.getText();			statement=connection.createStatement();			resultSet=statement.executeQuery(query);    //执行SQL语句			displayResultSet(resultSet);   // 显示查询结果		} catch (SQLException sqlex) {			sqlex.printStackTrace();		}	}	 	private void displayResultSet(ResultSet rs) throws SQLException {		boolean moreRecords=rs.next(); // 定位到第一条记录		if (!moreRecords) { // 如果没有记录,则显示一条消息			JOptionPane.showMessageDialog(this,"结果集中无记录!","错误提示",JOptionPane.WARNING_MESSAGE);			setTitle("无记录显示");			return;		}		Vector columnHeads=new Vector();    // 声明向量对象并实例化向量		Vector rows=new Vector();		try {			//获取字段的名称			ResultSetMetaData rsmd=rs.getMetaData(); 			for (int i=1; i <=rsmd.getColumnCount(); ++i)				columnHeads.addElement(rsmd.getColumnName(i));			 			// 获取记录集			do {				rows.addElement(getNextRow(rs, rsmd));			} while (rs.next());         	        //显示查询结果			table=new JTable(rows, columnHeads);  //创建表格对象			JScrollPane scroller=new JScrollPane(table);			Container c=getContentPane();			c.remove(1);//???			c.add(scroller, BorderLayout.CENTER);			c.validate();		} catch (SQLException sqlex) {			sqlex.printStackTrace();		}	}	 	//获取下一行内容	private Vector getNextRow(ResultSet rs,ResultSetMetaData rsmd) throws SQLException{		Vector currentRow=new Vector();		for (int i=1; i <=rsmd.getColumnCount(); ++i)			currentRow.addElement(rs.getString(i));		return currentRow; //返回一条记录	}	 	//断开数据库连接	public void shutDown()  {		try {			connection.close(); //断开数据库连接		} catch (SQLException sqlex) {			System.err.println("不能断开数据库连接");			sqlex.printStackTrace();		}	}   	//主方法	public static void main(String args[]) {		final DisplayQueryResults app=new DisplayQueryResults();		app.addWindowListener(new WindowAdapter() {			public void windowClosing(WindowEvent e) {				app.shutDown();            	System.exit(0);            }	   });   	}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?