当前位置: 首页 > 学习 > 电脑学习 > 程序设计 > JAVA > 数据库 > 正文

Java数据库编程中查询结果的表格式输出(源代码)

http://www.zk168.com.cn  招考学习网 2006-4-11 2:14:27
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最近在网络上看见关于此标题的文章颇多,但内容大多相同,没有一个文章从头到尾给出完整的源代码,令许多初学Swing者感到困惑。本文正是为解决这一问题而专门为广大初学者设计的,程序执行结果如下图所示。

本程序采用MSAccess数据库,Database名称为DBAddressBook,Table名称为TblAddressBook。表结构如下:

字段名
类型

编号
Text(50)

姓名
Text(50)

电话
Text(50)

地址
Text(50)

由于本人对该程序的注释极为详细,故不再作进一步的讲解,该程序在Windows2000,jdk1.3下编译并成功运行。 下载源代码。

执行方法:
参照上表设计数据库,并配置ODBC的DSN名称为AddressBook。

javac DisplayQueryResults.java
DisplayQueryResults
//DisplayQueryResults.java
import java.sql.*;
import javax.swing.*;
import java.awt.*;

import java.awt.event.*;
import java.util.*;
public class DisplayQueryResults 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 DisplayQueryResults()
{

//Form的标题
super( "输入SQL语句,按提交按钮查看结果。" );
//url中指定ODBC中设置的DSN名称
String url = "jdbc:odbc:AddressBook";
String username = "";
String password = "";
//加载驱动程序以连接数据库

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 ); // terminate program
}

//捕获连接数据库异常
catch ( SQLException sqlex ) {
System.err.println( "无法连接数据库" );
sqlex.printStackTrace();
System.exit( 1 ); // terminate program
}

//如果数据库连接成功,则建立GUI
//SQL语句
String test="SELECT * FROM TblAddressBook";
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 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( "Unable to disconnect" );
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 );
}
}
);
}
}
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·实质、过程及意义——阿多尔诺“否定的辩证法”探微
·从Ontology的译名之争看哲学术语的翻译原则
·论马克思主义哲学经典的解释——解释学方法及其在马克
·中国哲学当前的核心与周边问题
·和合学与21世纪文化价值和科技
·中国文化的和合精神与21世纪
·宗教之间理当相互宽容
·上半个世纪的自由主义
·殷周至春秋时期神人关系之演进
·大学之道:构建以“三纲八目”为核心的道德修养体系
相关内容:
 
·环保企业人力资源开发与管理的实证研究————巨龙公
·重油制气污水处理系统(A/O)技术改造
·英美CPA管理模式及其启示
·改造NERA微波公务信道为国产监控信道
·EAStudio让电子商务网站如虎添翼
·基于PB6和ORACLE8开发“劳动信息管理系统”
·巧解Pretty  Park 病毒一例
·CDMA在中国的应用以及向CDMA2000的过度中的问题研究
·SMA施工控制与现场监理
·浅谈改性沥青及SMA路面平整度的控制
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>