import java.sql.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class MySQLViewer extends JFrame{
//数据库变量定义
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String sqlStr = null;
//GUI变量定义
private JTable table = null;
private JTextArea inputQuery = null;
private JButton submitQuery = null;
public MySQLViewer() {
//Form的标题
super( "MySQLViewer" );
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(
"jdbc:mysql://localhost/TestDB?user=root&password=88888888");
stmt = conn.createStatement();
sqlStr = "SELECT * FROM TestTABLE";
rs = stmt.executeQuery(sqlStr);
if (rs != null) {
inputQuery = new JTextArea( sqlStr, 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();
Vector columnHeads = new Vector();
Vector rows = new Vector();
//获取字段的名称
ResultSetMetaData rsmd = rs.getMetaData();
for ( int i = 1; i <= rsmd.getColumnCount(); ++i ) {
columnHeads.addElement( rsmd.getColumnName( i ) );
}
//打印字段名称
for ( int i = 1; i <= rsmd.getColumnCount(); ++i ) {
System.out.print(columnHeads.get(i-1)+"\t");
}
//获取记录集
rs.beforeFirst();
while(rs.next()) {
rows.addElement( getNextRow( rs, rsmd ) );
}
}
}
catch (Exception e) {
System.out.println(e.toString());
}
finally {
if (rs != null) {
try {
rs.close();
}
catch (SQLException sqlEx) {
rs = null;
}
}
if (stmt != null) {
try {
stmt.close();
}
catch (SQLException sqlEx) {
stmt = null;
}
}
}
}
private void getTable() {
try {
//执行SQL语句
String query = inputQuery.getText();
stmt = conn.createStatement();
rs = stmt.executeQuery( query );
//在表格中显示查询结果
displayResultSet( rs );
}
catch ( SQLException sqlex ) {
sqlex.printStackTrace();
}
}
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();
}
}
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 ) );
//打印每条记录中每个字段
System.out.println();
for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
System.out.print(currentRow.get(i-1)+"\t");
//返回一条记录
return currentRow;
}
public static void main(String[] args) {
MySQLViewer app = new MySQLViewer();
}
}