Java

本类阅读TOP10

·使用MyEclipse开发Struts框架的Hello World!(录像1)
·hibernate配置笔记
·AOP编程入门--Java篇
·linux下Tomcat 5.0.20 与 Apache 2 安装/集成/配置
·在win2003下整合了整合Tomcat5.5+ apache_2.0.53+ mod_jk_2.0.47.dll
·构建Linux下IDE环境--Eclipse篇
·Jsp 连接 mySQL、Oracle 数据库备忘(Windows平台)
·ASP、JSP、PHP 三种技术比较
·Tomcat5.5.9的安装配置
·AWT GUI 设计笔记(二)

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
Java数据库查询结果的输出

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

Java数据库查询结果的输出

摘自:北京海脉信息咨询有限公司

  利用Java开发数据库应用时,经常需要在用户界面上显示查询结果。我们可以利用VectorJTableAbstractTableModel等三个类较好地解决这一问题。


Vector

  定义如下:

public class Vector extends AbstractList 
implements List , Cloneable , Serializable{}
 

JTable

  JTable组件是Swing组件中比较复杂的小件,隶属于javax.swing包,它能以二维表的形式显示数据。Jtable:

定义如下:

public class JTable extends JComponent
implements TableModelListener,
 Scrollable, TableColumnModelListener, 
ListSelectionListener,
 CellEditorListener, Accessible{}
 
AbstractTableModel: 
  定义如下:
public abstract class AbstractTableModel extends Object
implements TableModel, Serializable{}
  生成一个具体的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(职工号)        VARCHAR
Wname(职工名)                VARCHAR
Sex(性别)          VARCHAR
Birthday(出生日期)   DATE
Wage(工资)          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[]={"职工号","职工名",
  "性别","出生日期","工资"};
  //二维表列名
  定制表格。
  实现抽象类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);
  else
  return 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;}//设置单元格不可编辑,为缺省实现
  };
  定制表格
  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);//给表格加上滚动杠
  显示查询结果。
  连接数据库:已给出。
  数据库查询
  Statement stmt=connection.createStatement();
  ResultSet rs=stmt.executeQuery
  ("select * from worker");
  显示查询结果:
  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时,取出下一行数据显示。显示方法同上。




相关文章

相关软件