Java数据库编程中查询结果的表格式输出_第1页
Java数据库编程中查询结果的表格式输出_第2页
Java数据库编程中查询结果的表格式输出_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java 数据库编程中查询结果的表格式输出利用Java开发数据库应用系统时,经常需要在用户界面上显示查询结果。由于SUN公司提供的JDK1.X开发工具包不是可视化的集成开发环境(IDE),不能象Delphi、VB那样方便地把查询结果在 DBGrid 等表格中显示出来。因此,只能靠自己编写代码来实现。 在实际应用中,我们可以利用 Vector 、 JTable 、 AbstractTableModel 等三个类较好地解决 这一问题。以下,详细介绍一下实现方法。一、类 Vector 、类 JTable 及类 AbstractTableModel 简介:1 、 类 Vector :类 Vector

2、是 Java 的历史集合类,隶属于 java.util 包。它包装了异构链表和数组杂合体, 具有以下两个特点:* 向量是异构的,不要求每个元素的类型相同,向量中可以混合多种对象类型;* 向量是数组杂合体,因为它们可以在增加元素时动态增大。 其异构性正好符合数据库记录中属性类型不一的特点,而其动态性也正好符合数据库查询 时,结果集记录个数不定的特点。类 Vector 定义如下:public class Vector eXtends AbstractListimpleme nts List , Cion eable , Serializable实现了向量成员的查找、新增、删除等方法。如:add(O

3、bject obj) 可方便地参加一个对象;get(int indeX) 可方便地得到向量中的一个对象;remove(Object obj) 那么可方便地删除向量中一个对象。2、 类 JTable :JTable 组件是 Swing 组件中比拟复杂的小件,隶属于 javaX.swing 包,它能以二维表的形 式显示数据。类 JTable 定义如下:public class JTable eXtends JComponentimplements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListe

4、ner, CellEditorListener, Accessible 类 JTable 在显示数据时具有以下特点:* 可定制性:可以定制数据的显示方式和编辑状态;* 异构性:可以显示不同类型的数据对象,甚至包括颜色、图标等复杂对象;* 简便性:可以以缺省方式轻松地建立起一个二维表。其可定制性可满足不同用户和场合的要求, 异构性也正好符合数据库访问结果集中属性类型 不一的特点。 类 JTable 提供了极为丰富的二维表格操作方法, 如设置编辑状态、 显示方式、 选择行列等,在此不一一赘述。使 用类 JTable 显示数据之前, 必须根据情况生成定制模型、 单元绘制器或单元编辑器。 类 Abst

5、ractListModel 用 来定制用 户 自 己的 数据 模型, 这个 类在 后面要 介绍 。 TableCellRenderer 接口用来定制单元绘制器, TableCellEditor 接口用来定制单元编辑器, 这两个接口主 要用于颜色对象的处理上,在例如中没有用到,不做过多说明。3、类 AbstractTableModel 类 AbstractTableModel 是一个抽象类,没有完全实现,不能实例化,使用时必须在程序中 实现方法。它隶属于 javax.swing.table 。类定义如下: public abstract class AbstractTableModel exte

6、nds Objectimpleme nts TableModel, Serializable类 AbstractTableModel 提供了 TableModel 接口中绝大多数方法的缺省实现。 TableModel 接口定义了 JTable 的根底数据结构。用户要生成自己的数据模型,本来可以通过实现TableModel 接口中所有方法来满足要求,但管理听众表的功能对于所有数据模型是共同 的,所以在 javax.swing.table 中又定义了类 AbstractTableModel 来处理这个工作。它既 管理听众表,又为生成 TableModelEvents 事件并委托给听众提供了便利。

7、要想生成一个具体的 TableModel 作为 AbstractTableMode 的子类,至少必须实现下面三个 方法:public int getRowCount();public int getColumnCount();public Object getValueAt(int row, int column);至此,我们可以建立一个简单二维表(5X 5),实现方法如下:TableModel dataModel = new AbstractTableModel() public int getColumnCount() return 5; public int getRowCount()

8、return 5;public Object getValueAt(int row, int col) return new Integer(row*col); ;JTable table = new JTable(dataModel);JScrollPane scrollpane = new JScrollPane(table);二、数据库及其连接方法简介:例如采用Sybase数据库系统,数据库存放在数据库效劳器中。路径为:D:WORKER数据库名为: worker.dbf 。具有以下字段:字段名类型Wno(职工号)VARCHARWnam(e 职工名)VARCHARSex (性别)VARCH

9、ARBirthday (出生日期)DATEWage (工资)FLOAT 要连接此数据库,需使用 java.sql 包中的类 DriverManager 。此类是用于管理驱动程序的 实用程序类。它提供了通过驱动程序取得连接、注册,撤消驱动程序,设置登记和数据库访问登录超时等方法。具体连接方法如下: 第一步:定位、装入和链接 SybDriver 类;driver="com.sybase.jdbc.SybDriver"SybDriver sybdriver=(SybDriver)Class.forName(driver).newInstance(); 第二步:注册 SybDriv

10、er 类;DriverManager.registerDriver(sybdriver); 第三步:取得连接( SybConnection )对象引用。 user="sa"password="" url="jdbc:sybase:Tds:202.117.203.114:5000/WORKER"SybConnection connection=(SybConnection)DriverManager.getConnection (url,user,password);建立完连接后,即可通过 Statement 接口进行数据库的查询与更改

11、。三、实现方法:限于篇幅,在此只给出核心代码,包引入、界面处理、变量定义等局部不再介绍。 第一步:对象声明。AbstractTableModel tm;/ 声明一个类 AbstractTableModel 对象 JTable jg_table;/ 声明一个类 JTable 对象Vector vect;/ 声明一个向量对象 JScrollPane jsp;/ 声明一个滚动杠对象 String title=" 职工号 "," 职工名 "," 性别 "," 出生日期 "," 工资 " / 二维表列名

12、第二步:定制表格。1、实现抽象类 AbstractTableModel 对象 tm 中的方法: vect=new Vector();/实例化向量tm=new AbstractTableModel() public int getColumnCount() return title.length;/ 取得表格列数 public int getRowCount() return vect.size();/ 取得表格行数 public Object getValueAt(int row,int column) if(!vect.isEmpty() return(Vector)vect.element

13、At(row).elementAt(column); elsereturn null;/ 取得单元格中的属性值 public String getColumnName(int column) return titlecolumn;/ 设置表格列名 public void setValueAt(Object value,int row,int column) / 数据模型不可编辑,该方法设置为空 public Class getColumnClass(int c) return getValueAt(0,c).getClass();/ 取得列所属对象类public boolean isCellE

14、ditable(int row,int column) return false;/ 设置单元格不可编辑,为缺省实现 ;2、定制表格: jg_table=new JTable(tm);/ 生成自己的数据模型jg_table.setToolTipText(" 显示全部查询结果 ");/ 设置帮助提示 jg_table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);/ 设置表风格整尺寸模式jg_table.setCellSelectionEnabled(false);/ 设置单元格选择方式 jg_table.setShowVerticalL

15、ines(true);/设置是否显示单元格间的分割线jg_table.setShowHorizontalLines(true);jsp=new JScrollPane(jg_table);/给表格加上滚动杠第三步:显示查询结果。1、 连接数据库:第二局部已给出。2、 数据库查询:Statement stmt=connection.createStatement();ResultSet rs=stmt.executeQuery("select * from worker");3、显示查询结果: vect.removeAllElements();/ 初始化向量对象 tm.fir

16、eTableStructureChanged();/ 更新表格内容 while(rs.next()Vector rec_vector=new Vector();/ 从结果集中取数据放入向量 rec_vector 中 rec_vector.addElement(rs.getString(1);rec_vector.addElement(rs.getString(2); rec_vector.addElement(rs.getString(3);rec_vector.addElement(rs.getDate(4); rec_vector.addElement(new Float(rs.getFloat(5);vect.addElement(rec_vector);/ 向量 rec_vector 参加向量 vect 中tm.fireTableStructureChanged();/ 更新表格,显示向量 vect 的内容 例图如下:假设要实现示图中记录前翻、后翻的效果,有两种方法:一、如果软件环境支持 2.0 ,可直接利用 rs.prevoius(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论