Java数据库编程中查询结果的表格式输出

来源:互联网 发布:unity3d头发布料 编辑:程序博客网 时间:2024/06/02 10:57
<script type="text/javascript">google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//</script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>【内容摘要】本文较为详细地介绍了在Java数据库编程中,利用表格输出查询结果的方法;并对所涉及的类给以了简要说明。【关键字】类、对象、接口【作者简介】男,26岁,陕西财经学院研究生,师从陈逢吉教授,从事金融信息系统方面的研究。利用Java开发数据库应用系统时,经常需要在用户界面上显示查询结果。由于SUN公司提供的JDK1.x开发工具包不是可视化的集成开发环境(IDE),不能象Delphi、VB那样方便地把查询结果在DBGrid等表格中显示出来。因此,只能靠自己编写代码来实现。在实际应用中,我们可以利用Vector、JTable、AbstractTableModel等三个类较好地解决这一问题。以下,详细介绍一下实现方法。一、 类Vector、类JTable及类AbstractTableModel简介:1、 类Vector:类Vector是Java的历史集合类,隶属于java.util包。它包装了异构链表和数组杂合体,具有以下两个特点:* 向量是异构的,不要求每个元素的类型相同,向量中可以混合多种对象类型;* 向量是数组杂合体,因为它们可以在增加元素时动态增大。其异构性正好符合数据库记录中属性类型不一的特点,而其动态性也正好符合数据库查询时,结果集记录个数不定的特点。类Vector定义如下:public class Vector extends AbstractList implements List , Cloneable , Serializable{…}实现了向量成员的查找、新增、删除等方法。如:add(Object obj)可方便地加入一个对象;get(int index)可方便地得到向量中的一个对象;remove(Object obj)则可方便地删除向量中一个对象。2、 类JTable:JTable组件是Swing组件中比较复杂的小件,隶属于javax.swing包,它能以二维表的形式显示数据。类JTable定义如下:public class JTable extends JComponentimplements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListener, CellEditorListener, Accessible{…}类JTable在显示数据时具有以下特点:* 可定制性:可以定制数据的显示方式和编辑状态;* 异构性:可以显示不同类型的数据对象,甚至包括颜色、图标等复杂对象;* 简便性:可以以缺省方式轻松地建立起一个二维表。其可定制性可满足不同用户和场合的要求,异构性也正好符合数据库访问结果集中属性类型不一的特点。类JTable提供了极为丰富的二维表格操作方法,如设置编辑状态、显示方式、选择行列等,在此不一一赘述。使用类JTable显示数据之前,必须根据情况生成定制模型、单元绘制器或单元编辑器。类AbstractListModel用来定制用户自己的数据模型,这个类在后面要介绍。TableCellRenderer接口用来定制单元绘制器,TableCellEditor接口用来定制单元编辑器,这两个接口主要用于颜色对象的处理上,在示例中没有用到,不做过多说明。3、 类AbstractTableModel:类AbstractTableModel是一个抽象类,没有完全实现,不能实例化,使用时必须在程序中实现方法。它隶属于javax.swing.table 。类定义如下:public abstract class AbstractTableModel extends Objectimplements TableModel, Serializable{…}类AbstractTableModel提供了TableModel接口中绝大多数方法的缺省实现。TableModel接口定义了JTable 的基础数据结构。用户要生成自己的数据模型,本来可以通过实现TableModel接口中所有方法来满足要求,但管理听众表的功能对于所有数据模型是共同的,所以在javax.swing.table中又定义了类AbstractTableModel来处理这个工作。它既管理听众表,又为生成TableModelEvents事件并委托给听众提供了便利。要想生成一个具体的TableModel作为AbstractTableMode的子类,至少必须实现下面三个方法:public int getRowCount();public int getColumnCount();public Object getValueAt(int row, int column);至此,我们可以建立一个简单二维表(5×5),实现方法如下:TableModel dataModel = new AbstractTableModel() {public int getColumnCount() { return 5; }public int getRowCount() { 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(职工号)VARCHARWname(职工名)VARCHARSex(性别)VARCHARBirthday(出生日期)DATEWage(工资)FLOAT要连接此数据库,需使用java.sql包中的类DriverManager。此类是用于管理JDBC驱动程序的实用程序类。它提供了通过驱动程序取得连接、注册,撤消驱动程序,设置登记和数据库访问登录超时等方法。具体连接方法如下:第一步:定位、装入和链接SybDriver类;driver="com.sybase.jdbc.SybDriver";SybDriver sybdriver=(SybDriver)Class.forName(driver).newInstance();第二步:注册SybDriver类;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接口进行数据库的查询与更改。三、 实现方法:限于篇幅,在此只给出核心代码,包引入、界面处理、变量定义等部分不再介绍。第一步:对象声明。AbstractTableModel tm;//声明一个类AbstractTableModel对象JTable jg_table;//声明一个类JTable对象Vector vect;//声明一个向量对象JScrollPane jsp;//声明一个滚动杠对象String title[]={"职工号","职工名","性别","出生日期","工资"};//二维表列名第二步:定制表格。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.elementAt(row)).elementAt(column);elsereturn null;}//取得单元格中的属性值public String getColumnName(int column){return title[column];}//设置表格列名public void setValueAt(Object value,int row,int column){}//数据模型不可编辑,该方法设置为空public Class getColumnClass(int c){return getValueAt(0,c).getClass();}//取得列所属对象类public boolean isCellEditable(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.setShowVerticalLines(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.fireTableStructureChanged();//更新表格内容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的内容例图如下:若要实现示图中记录前翻、后翻的效果,有两种方法:一、如果软件环境支持JDBC2.0,可直接利用rs.prevoius()和rs.next()获得记录,然后通过类JTextField中的setText()方法,显示出各个字段值。二、如果不支持JDBC2.0,则可利用向量Vector按行取出JTable中数据。自定义一个指针,用来记录位置。当指针加1时,取出上一行数据放入Vector中显示;指针减1时,取出下一行数据显示。显示方法同上。需要说明的是:代码中没有给出捕捉例外的部分,如SQLException,实际应用中必须给出。此外,有些系统中,文本域中的汉字不一定能正确显示,需借助其它方法实现。【参考资料】1、《Java2从入门到精通》,[美]John Zukowski著,电子工业出版社;2、《Java2高级开发指南》,电子工业出版社;
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怎么样才能有酒窝 如何自己简单练出酒窝 怎样自己快速弄出酒窝 酒杯和酒筹交互错杂的成语 酒米 酒米怎么泡 酒米和麝香米哪个更吸引鲫鱼 洋老外米糕酒广西妹 钓鱼酒米制作 钓鱼酒米配方 钓鲫鱼酒米绝密配方 江米甜酒的功效 酒米打窝死窝是啥原因 钓鱼酒米的制作方法 酒米的制作方法 三架山大米原浆酒价格 野钓鲫鱼酒米制作方法 50斤米蒸酒设备一套多少钱 柴米油盐by阿阮有酒 菜米油盐诗酒花txt 自制酒米 酒米制作 酒米配方 钓鱼酒米绝密配方 酒泡米钓鱼窝子配方 钓鱼酒米 酒米钓鱼 酒米制作方法 酒米怎么做 丁香酒米 自制酒米窝料 钓鱼用的酒米怎么泡 麝香酒米 鲫鱼酒米配方 酒米做法 造酒忘米 打窝酒米配方 造酒忘米阅读答案 爆炸钩饵料制作 鲫鱼饵料经典配方图 酒类直供