Java数据库查询结果的输出

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时,取出下一行数据显示。显示方法同上。

你可能感兴趣的:(Java数据库查询结果的输出)