📄 tabledisplay.java~5~
字号:
/**
* <p>Title: 以表格显示数据库查询结果</p>
* <p>Description: 第五章例子</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: </p>
* @author 苏年乐
* @version 1.0
*/
import java.sql.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class TableDisplay extends JFrame {
//数据库变量定义
private Connection connection;
private Statement statement;
private ResultSet resultSet;
private ResultSetMetaData rsMetaData;
//GUI变量定义
private JTable table;
private JTextArea inputQuery;
private JButton submitQuery;
public TableDisplay() {
//Form的标题
super("输入SQL语句,按提交按钮查看结果。");
//url中指定ODBC中设置的DSN名称
String url = "jdbc:odbc:Person";
String username = "";
String password = "";
//加载驱动程序以连接数据库
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
connection = DriverManager.getConnection(
url, username, password);
}
//捕获加载驱动程序异常
catch (ClassNotFoundException e) {
System.err.println("装载JDBC/ODBC驱动程序失败。");
e.printStackTrace();
System.exit(1); // terminate program
}
//捕获连接数据库异常
catch (SQLException e) {
System.err.println("无法连接数据库");
e.printStackTrace();
System.exit(1); // terminate program
}
//如果数据库连接成功,则建立GUI
//SQL语句
String test = "SELECT * FROM Person";
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 = connection.createStatement();
resultSet = statement.executeQuery(query);
//在表格中显示查询结果
displayResultSet(resultSet);
}
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 e) {
e.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 e) {
System.err.println("Unable to disconnect");
e.printStackTrace();
}
}
public static void main(String args[]) {
final TableDisplay app =new TableDisplay();
app.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
app.shutDown();
System.exit(0);
}
}
);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -