Java数据库编程中查询结果的表格式输出(2) · 二、 数据库及其连接方法简介: 示例采用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[]={"职工号","职工名","性别","出生日期","工资"}; //二维表列名 第二步:定制表格。 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); 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;}//设置单元格不可编辑,为缺省实现 }; 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高级开发指南》,电子工业出版社;
|