版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java数据库编程中査询结果的表格式输出在实际应用中,我们可以利用Vector JTable、AbstractTableModel等三个类较好地解决这一 问题。以下,详细介绍一下实现方法。一、类 Vector a 类 JTable 及类 AbstiactTableModel 简介:1、类 Vector:类Vector是Java的历史集合类,隶属于java.util包。它包装了异构链表和数组杂合体,具 有以下两个特点:*向量是异构的,不要求每个元素的类型相同,向量中可以混合多种对彖类型;*向量是数组杂合体,因为它们可以在增加元素时动态增大。其异构性正好符合数据库记录中属性类型不一的特点,而其动态
2、性也正好符合数据库查询 时,结果集记录个数不定的特点。类Vector定义如卞:public class Vector extends AbstractListunplements List, Cloneable , Serializable-实现了向量成员的查找、新增、删除等方法。如:add(Objectobj)4方便地加入一个对象; get(int mdex)可方便地得到向量中的一个对象;remove(Object obj)。则可方便地删除向量中 一个对彖。2、类 JTable:JTable组件是Swing组件中比较复杂的小件,隶属于javax.swmg包,它能以二维表的形式 显示数据。类J
3、Table定义如下:public class JTable extends JComponentmiplements TableModelListener, Scrollable, TableColunuiModelListener,ListSelectionListener, CellEditorListener, Accessible”类JTable在显示数据时具有以下特点:*可定制性:可以定制数据的显示方式和编辑状态;*异构性:可以显示不同类型的数据对彖,甚至包拾颜色、图标等复杂对彖;*简便性:可以以缺省方式轻松地建立起一个二维表。其可定制性可满足不同用户和场合的要求,异构性也正好符合数
4、据库访问结呆集中属性类型不一的特点。类JTable提供了极为丰富的二维表格操作方法,如设置编辑状态、显示方式、选择行列等,在此不一一赘述。使用类JTable显示数据之前,必须根据情况生成定制模型、单元绘制器或单元编辑器。类AbsUactListModel用来定制用户自己的数据模型,这个类在后面要介绍。TableCellRenderer接I I用来定制单元绘制器,TableCellEditor接I I用来定制单元编辑器,这 两个接1主要用于颜色对象的处理上,在示例中没有用到,不做过多说明。 3、类 AbstractTableModel:类AbsnactTableModel是一个抽象类,没有完全实
5、现,不能实例化,使用时必须在程序中实现方法。它隶属于javax.swing.table。类定义如下:public abstract class AbstractTableModel extends Objectmiplements TableModel, Serializable-类AbstiactTableModel提供了 TableModel接I I中绝人多数方法的缺省实现。TableModel接【I定义了 JTable的基础数据结构。用户要生成自己的数据模型,本来可以通过实现TableModel接I I中所冇方法来满足要求,但管理听众表的功能对于所有数据模型是共同的,所以在javax.s
6、wing.table中又定义了类AbstractTableModel来处理这个工作。它既管理听众表,又为生成TableModelEvents事件并委托给听众提供了便利。 要想生成一个具体的TableModel作为AbstractTableMode的子类,至少必须实现下面三个方 法:public iiit getRowCount();public mt getColunmCount();public Object getValueAt(iiit row, iiit column);至此,我们可以建立一个简单二维表(5X5),实现方法如下:TableModel dataModel = new Ab
7、stractTableModelQ public iiit getColunmCount() return 5; public iiit getRowCount() return 5;public Object getValueAt(iiit row, iiit col) return new Integer(row*col); ;JTable table = new JTable(dataModel);JScrollPane scrollpane = new JScrollPane(table);二、数据库及其连接方法简介:示例采用Sybase数据库系统,数据库存放在数据库服务器中。路径为:
8、D:WORKER,数据 库名为:worker.dbfo具有以下字段:字段名类型Wno (职工号)VARCHARWname (职工名)VARCHARSex (性别)VARCHARButhdav (出生口 期)DATEWage (工资)FLOAT要连接此数据库,需使用java.sql包中的类DnverManageio此类是用于管理JDBC驱动程序 的实用程序类。它提供了通过驱动程序取得连接、注册,撤消驱动程序,设置登记和数据 库访问登录超时等方法。具体连接方法如下:第一步:定位、装入和链接SvbDiivei类;driver=ncom.svbase.jdbc.SybDriverH;SybDriver
9、 sybdriver=(SybDrivei)Class.fbrName(dnvei).newIiistance();第二步:注册SybDriver类;DriverManager.registerDnver(sybdriver);第三步:取得连接(SvbCoiuiection)对彖引用。user=nsaH;password=HH;url=jdbc:sybase:Tds:202.117.203.114:5000AVORKER,r;SybComiection coimection=(SybCoimection)DnverManager.getCoiiiiection(urtuseLpasswoid)
10、;建立完连接后,即可通过Statement接I I进行数据库的查询与更改。三、实现方法:限于篇幅,在此只给出核心代码,包引入、界面处理、变量定义等部分不再介绍。第一步:对彖声明。AbstiactTableModel tm;声明一个类 AbstractTableModel 对象JTable jg_table;/声明一个类 JTable 对彖Vector vect;/声明一个向量对象JScrollPane jsp;/声明一个滚动杠对彖Strmgtitle=H5R工号”,”职工名”,”性别”,”出生口期,“工资”;二维表列名第二步:定制表格。1、实现抽象类AbstiactTableModel对象tm
11、中的方法: vect=new VectorQ;/ 实例化向量 tm=new AbstractTableModelQ public mt getColunmCount() retuin title, length;/ 取得表格列数 public mt getRowCount() retuin vect. size(); 取得表格行数 public Object getValueAt(mt rowjnt colunm) if(! vect isEmpty () return(Vector)vect.elementAt(iow). elementAt(colunm);elseletuin null;
12、/取得单元格中的属性值 public String getColuniiiName(int column” retui n title column;/ 设置表格列名 public void setValueAt(Object value.iiit rowjnt colunm) 数据模型不可编辑,该方法设置为空 public Class getColunmClass(iiit c) return getValueAt(Ox).getClass();取得列所属对象类public boolean isCellEditable(mt rowjnt colunm) i-etuin false;/设置单
13、元格不可编辑,为缺省实现 ;2、定制表格: jg_table=new JTable(tm);/生成自己的数据模型 jg-table.setToolTipTextC显示全部查询结果”);/设置帮助提示 jg_table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);设置表格调整尺寸模式jg_table.setCellSelectionEnabled(false);/ 设置单元格选择方式 jg_table.setShoxvVei-ticalLines(u-ue)y/设置是否显示单元格间的分割线 jg_table.setShowHoiizontalLmes(ti
14、iie);j sp=new J ScrollP ane(jg_table);给表格加上滚动杠第三步:显示查询结果。1、连接数据库:第二部分已给出。2、数据库查询:Statement stmt=coiuiection.cieateStatement();ResultSet rs=stmt.executeQueiy(nselect * from worker*);3、显示查询结果:vect.removeAllElementsQ/ 初始化向量对彖 tm.fiieTableStHictureChanged();/ 更新表格内容 while(rs.next()Vector rec_vectoi-new
15、VectorQ;/从结果集中取数据放入向量rec_vector中rec_vector.addElement(is.getStrmg( 1);rec_vector.addElement(is.getStrmg(2);rec_vector.addElement(is.getStrmg(3);rec_vector.addElement(is.getDate(4);rec_vector.addElement(new F loat(rs. getF loat(5 ); vect.addElement(rec_vector)y/向量 iec_vector 加入向量 vect 中 tm.fiieTableS
16、tRicnireChanged();/更新表格 显示向量 vect 的内容。本程序采用 MSAcc亡ss数据库,Database名称为DBAddressBook, Table名称为TblAddressBooko 表结构如卜:字段名类型编号Text(50)姓名Text(50)电话Text(50)地址Text(50)由于本人对该程序的注释极为详细,故不再作进一步的讲解,该程序在Wmdows2000, jdkl.3 下编译并成功运行。下载源代码。执行方法:参照上表设计数据库,并配置ODEC的DSN名称为AddressBookojavac DisplaueryResults.javaDisplayQu
17、eryResults/Displaymiport java.sql.*;miport javax.swing.*;miport java.awt.*;miport java.awt.event.*;miport java.util.*;public class DisplavQueryResults extends JFrame 数据库变量定义private Connection connection;private Statement statement;private ResultSet resultSet;private ResultSetMetaData rsMetaData;/GUI
18、变屋定义private JTable table;private JTextAiea mputQuery;private JButton subnutQuery;public DisplavQueiyResults()/Form的标题super(”输入SQL语句,按提交按钮查看结果。”);/url中指定ODBC中设置的DSN名称String url = Mj dbc: odbc: AddressBook*;String username =String password =,H;/加载驱动程序以连接数据库Class.forName( nsun.jdbc.odbc.JdbcOdbcDnvern)
19、; connection = DriverManagei-.getComiection( url, username, password );捕获加载驱动程序异常catch ( ClassNotFoundException cnfex) System.err.println(”装载JDBC/ODBC驱动程序失败。”);cnfex.printStackTraceO;System.exit( 1 ); / tenniiiate program捕获连接数据库异常catch ( SQLException sqlex) System.en-.pnntln( “无法连接数据库”); sqlex.print
20、StackTiaceQ;System.exit( 1 ); / tenniiiate program如果数据库连接成功,则建立GUI/SQL语句Strmg test=HSELECT * FROM TblAddiessBook11; mputQueiv = new JTextAiea( test, 4, 30 );subniitQueiy = new JButton( ”查询”);/Button 事件subniitQueiy. addActioiiListener(new ActioiiListener() public void actioiiPeiibrmed( ActioiiEvent e
21、 ) getTableQ;);JPaiiel topPanel = new JPanel();topPanel.setLayout( new BoiderLayout();将”输入查询”编辑框布置到CENTERtopPanel.add( new JScrollPaiie( mputQueiy), BoiderLayout.CENTER);将提交查询”按钮布置到SOUTHtopPanel.add( subnutQueiy Border Layout. SOUTH );table = new JTableQ;Contamer c = getContentPaneQ;c.setLayout( new
22、 BordeiLayout();将”topPanel”编辑框布置到NORTHc.add( topPaneL BorderLayout.NORTH);将”table”编辑框布置到,CENTERc.add( table, BorderLayout.CENTER);getTableQ;setSize( 500, 300);显示Formshow();private void getTableQ执行SQL语句Strmg query = mputQuery.getTextQ; statement = coniiection.createStatement(); resultSet = statement.
23、executeQueiy( query);在表格中显示查询结果displayResultSet( resultSet);catch ( SQLException sqlex) sqlex.pnntStackTraceQ; private void displavResultSet( ResultSet is ) tluows SQLException定位到达第一条记录boolean moreRecords = rs.nextQ;如呆没有记录,则提示一条消息if ( ! moreRecords ) JOptioiiPane.showMessageDialog( this,”结果集中无记录”);s
24、etTitle( M无记录显示);retuin;Vector colunuiHeads = new Vector();Vector rows = new Vectoi();try获取字段的名称ResultSetMetaData rsmd = rs.getMetaDataQ;for (inti= l;i= rsmd. getColuiniiC ount(); +i)colunmHeads.addElement( rsmd.getColuniiiName( i);获取记录集do iows.addElement( getNextRow( is, rsmd ); while (is.nextQ );在表格中显示查询结果table = new JTa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年圆通快递国内包裹运送协议版B版
- 2024年就业相关贷款中介协议5篇
- 中国地质大学(武汉)《模式识别与机器学习》2023-2024学年第一学期期末试卷
- 2024年度汽车按揭担保服务合同范本3篇
- 2024年机械设备买卖协议范本一
- 小班体智能领域课程设计
- 2024年度公园大型音乐喷泉工程协议版
- 2024农机社会化服务与农田托管一体化合同3篇
- 2024年专业吊车租赁协议模板版B版
- 2024年工程承包合同及施工安全规定3篇
- 2024年协议延期约定详细范本版
- 2023年北京市燕山初三二模英语试卷及答案
- 机场视频监控安全防范方案
- GB/T 44843-2024在用自动扶梯和自动人行道安全评估规范
- 《QHSE体系培训》课件
- 计量经济学论文-城镇单位就业人员工资总额的影响因素
- 《农业企业经营管理》试题及答案(U)
- 山东省聊城市2024-2025学年高一上学期11月期中物理试题
- 2024年秋新人教PEP版3年级上册英语教学课件 Unit 5 Part B Start to read
- 孙悟空课件教学课件
- 新能源行业光伏发电与储能技术方案
评论
0/150
提交评论