`

Java swing 查询数据库并且直接显示

    博客分类:
  • Java
阅读更多
package db;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;

public class InnerShow extends JFrame {
	
	private Connection conn; 
	private Statement statement; 
	private ResultSet resultSet;
	
	//GUI变量定义
	private JTable table; 
	private JTextArea inputQuery; 
	private JButton submitQuery; 

	@SuppressWarnings("deprecation")
	public InnerShow() {
		
		//Form的标题
		super( "输入SQL语句,按查询按钮查看结果。" ); 
		
//		String url = "jdbc:mysql://localhost:3306/studentManager?useUnicode=true&characterEncoding=UTF-8";
		
		String url = "jdbc:mysql://localhost:3306/ssms?useUnicode=true&characterEncoding=UTF-8";
		
		String username = "root";
		String password = "789+"; 
		
		//加载驱动程序以连接数据库
		try {
			Class.forName( "com.mysql.jdbc.Driver" );
			conn = DriverManager.getConnection(url, username, password);
		}catch ( ClassNotFoundException cnfex ) { //捕获加载驱动程序异常
			System.err.println("装载 JDBC/ODBC 驱动程序失败。" );
			cnfex.printStackTrace(); 
			System.exit( 1 ); // terminate program 
		}catch ( SQLException sqlex ) { //捕获连接数据库异常
			System.err.println( "无法连接数据库" ); 
			sqlex.printStackTrace(); 
			System.exit( 1 ); // terminate program 
		} 
		
		//如果数据库连接成功,则建立GUI
		//SQL语句
		String test = "SELECT * FROM department"; 
		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() ); 
		
		//将"输入查询"编辑框布置到 "CENTER"
		topPanel.add( new JScrollPane( inputQuery), BorderLayout.CENTER ); 
		
		//将"提交查询"按钮布置到 "SOUTH"
		topPanel.add( submitQuery, BorderLayout.SOUTH ); 
		table = new JTable(); 
		Container c = getContentPane(); 
		c.setLayout( new BorderLayout() ); 
		
		//将"topPanel"编辑框布置到 "NORTH"
		c.add( topPanel, BorderLayout.NORTH ); 
		
		//将"table"编辑框布置到 "CENTER"
		c.add( table, BorderLayout.CENTER ); 
		getTable(); 
		setSize( 500, 300 ); 
		
		//显示Form
		show(); 
	} 

	private void getTable(){
		
		try { 
			//执行SQL语句
			String query = inputQuery.getText(); 
			statement = conn.createStatement(); 
			resultSet = statement.executeQuery( query ); 
			
			//在表格中显示查询结果
			displayResultSet( resultSet ); 
		}catch ( SQLException sqlex ) { 
			sqlex.printStackTrace(); 
		} 
	} 
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	private void displayResultSet( ResultSet rs ) throws SQLException { 
		
		//定位到达第一条记录
		boolean moreRecords = rs.next(); 
		
		//如果没有记录,则提示一条消息
		if ( ! moreRecords ) { 
			JOptionPane.showMessageDialog( this, "结果集中无记录" ); 
			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 ); 
			
			//刷新Table
			c.validate();
		}catch ( SQLException sqlex ) { 
			sqlex.printStackTrace(); 
		} 
	}
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	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 {
			//断开数据库连接
			conn.close(); 
		}catch ( SQLException sqlex ) {
			System.err.println( "Unable to disconnect" );
			sqlex.printStackTrace();
		}
	} 

	public static void main( String args[] ){
		
		final InnerShow app = new InnerShow(); 
		
		app.addWindowListener( new WindowAdapter() {
			public void windowClosing( WindowEvent e ){
				app.shutDown();
				System.exit( 0 ); 
			}
		});
	}
} 

 

分享到:
评论
2 楼 csdn_zuoqiang 2010-12-30  
mikexie 写道
程序完整可以执行,排版工整,逻辑清晰

感谢你的指导,谢谢!



不客气。
1 楼 mikexie 2010-12-22  
程序完整可以执行,排版工整,逻辑清晰

感谢你的指导,谢谢!

相关推荐

Global site tag (gtag.js) - Google Analytics