Java數(shù)據(jù)庫編程中查詢結(jié)果的表格式輸出_第1頁
Java數(shù)據(jù)庫編程中查詢結(jié)果的表格式輸出_第2頁
Java數(shù)據(jù)庫編程中查詢結(jié)果的表格式輸出_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Java 數(shù)據(jù)庫編程中查詢結(jié)果的表格式輸出利用Java開發(fā)數(shù)據(jù)庫應(yīng)用系統(tǒng)時(shí),經(jīng)常需要在用戶界面上顯示查詢結(jié)果。由于SUN公司提供的JDK1.X開發(fā)工具包不是可視化的集成開發(fā)環(huán)境(IDE),不能象Delphi、VB那樣方便地把查詢結(jié)果在 DBGrid 等表格中顯示出來。因此,只能靠自己編寫代碼來實(shí)現(xiàn)。 在實(shí)際應(yīng)用中,我們可以利用 Vector 、 JTable 、 AbstractTableModel 等三個(gè)類較好地解決 這一問題。以下,詳細(xì)介紹一下實(shí)現(xiàn)方法。一、類 Vector 、類 JTable 及類 AbstractTableModel 簡介:1 、 類 Vector :類 Vector

2、是 Java 的歷史集合類,隸屬于 java.util 包。它包裝了異構(gòu)鏈表和數(shù)組雜合體, 具有以下兩個(gè)特點(diǎn):* 向量是異構(gòu)的,不要求每個(gè)元素的類型相同,向量中可以混合多種對(duì)象類型;* 向量是數(shù)組雜合體,因?yàn)樗鼈兛梢栽谠黾釉貢r(shí)動(dòng)態(tài)增大。 其異構(gòu)性正好符合數(shù)據(jù)庫記錄中屬性類型不一的特點(diǎn),而其動(dòng)態(tài)性也正好符合數(shù)據(jù)庫查詢 時(shí),結(jié)果集記錄個(gè)數(shù)不定的特點(diǎn)。類 Vector 定義如下:public class Vector eXtends AbstractListimpleme nts List , Cion eable , Serializable實(shí)現(xiàn)了向量成員的查找、新增、刪除等方法。如:add(O

3、bject obj) 可方便地參加一個(gè)對(duì)象;get(int indeX) 可方便地得到向量中的一個(gè)對(duì)象;remove(Object obj) 那么可方便地刪除向量中一個(gè)對(duì)象。2、 類 JTable :JTable 組件是 Swing 組件中比擬復(fù)雜的小件,隸屬于 javaX.swing 包,它能以二維表的形 式顯示數(shù)據(jù)。類 JTable 定義如下:public class JTable eXtends JComponentimplements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListe

4、ner, CellEditorListener, Accessible 類 JTable 在顯示數(shù)據(jù)時(shí)具有以下特點(diǎn):* 可定制性:可以定制數(shù)據(jù)的顯示方式和編輯狀態(tài);* 異構(gòu)性:可以顯示不同類型的數(shù)據(jù)對(duì)象,甚至包括顏色、圖標(biāo)等復(fù)雜對(duì)象;* 簡便性:可以以缺省方式輕松地建立起一個(gè)二維表。其可定制性可滿足不同用戶和場(chǎng)合的要求, 異構(gòu)性也正好符合數(shù)據(jù)庫訪問結(jié)果集中屬性類型 不一的特點(diǎn)。 類 JTable 提供了極為豐富的二維表格操作方法, 如設(shè)置編輯狀態(tài)、 顯示方式、 選擇行列等,在此不一一贅述。使 用類 JTable 顯示數(shù)據(jù)之前, 必須根據(jù)情況生成定制模型、 單元繪制器或單元編輯器。 類 Abst

5、ractListModel 用 來定制用 戶 自 己的 數(shù)據(jù) 模型, 這個(gè) 類在 后面要 介紹 。 TableCellRenderer 接口用來定制單元繪制器, TableCellEditor 接口用來定制單元編輯器, 這兩個(gè)接口主 要用于顏色對(duì)象的處理上,在例如中沒有用到,不做過多說明。3、類 AbstractTableModel 類 AbstractTableModel 是一個(gè)抽象類,沒有完全實(shí)現(xiàn),不能實(shí)例化,使用時(shí)必須在程序中 實(shí)現(xiàn)方法。它隸屬于 javax.swing.table 。類定義如下: public abstract class AbstractTableModel exte

6、nds Objectimpleme nts TableModel, Serializable類 AbstractTableModel 提供了 TableModel 接口中絕大多數(shù)方法的缺省實(shí)現(xiàn)。 TableModel 接口定義了 JTable 的根底數(shù)據(jù)結(jié)構(gòu)。用戶要生成自己的數(shù)據(jù)模型,本來可以通過實(shí)現(xiàn)TableModel 接口中所有方法來滿足要求,但管理聽眾表的功能對(duì)于所有數(shù)據(jù)模型是共同 的,所以在 javax.swing.table 中又定義了類 AbstractTableModel 來處理這個(gè)工作。它既 管理聽眾表,又為生成 TableModelEvents 事件并委托給聽眾提供了便利。

7、要想生成一個(gè)具體的 TableModel 作為 AbstractTableMode 的子類,至少必須實(shí)現(xiàn)下面三個(gè) 方法:public int getRowCount();public int getColumnCount();public Object getValueAt(int row, int column);至此,我們可以建立一個(gè)簡單二維表(5X 5),實(shí)現(xiàn)方法如下: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);二、數(shù)據(jù)庫及其連接方法簡介:例如采用Sybase數(shù)據(jù)庫系統(tǒng),數(shù)據(jù)庫存放在數(shù)據(jù)庫效勞器中。路徑為:D:WORKER數(shù)據(jù)庫名為: worker.dbf 。具有以下字段:字段名類型Wno(職工號(hào))VARCHARWnam(e 職工名)VARCHARSex (性別)VARCH

9、ARBirthday (出生日期)DATEWage (工資)FLOAT 要連接此數(shù)據(jù)庫,需使用 java.sql 包中的類 DriverManager 。此類是用于管理驅(qū)動(dòng)程序的 實(shí)用程序類。它提供了通過驅(qū)動(dòng)程序取得連接、注冊(cè),撤消驅(qū)動(dòng)程序,設(shè)置登記和數(shù)據(jù)庫訪問登錄超時(shí)等方法。具體連接方法如下: 第一步:定位、裝入和鏈接 SybDriver 類;driver="com.sybase.jdbc.SybDriver"SybDriver sybdriver=(SybDriver)Class.forName(driver).newInstance(); 第二步:注冊(cè) SybDriv

10、er 類;DriverManager.registerDriver(sybdriver); 第三步:取得連接( SybConnection )對(duì)象引用。 user="sa"password="" url="jdbc:sybase:Tds:202.117.203.114:5000/WORKER"SybConnection connection=(SybConnection)DriverManager.getConnection (url,user,password);建立完連接后,即可通過 Statement 接口進(jìn)行數(shù)據(jù)庫的查詢與更改

11、。三、實(shí)現(xiàn)方法:限于篇幅,在此只給出核心代碼,包引入、界面處理、變量定義等局部不再介紹。 第一步:對(duì)象聲明。AbstractTableModel tm;/ 聲明一個(gè)類 AbstractTableModel 對(duì)象 JTable jg_table;/ 聲明一個(gè)類 JTable 對(duì)象Vector vect;/ 聲明一個(gè)向量對(duì)象 JScrollPane jsp;/ 聲明一個(gè)滾動(dòng)杠對(duì)象 String title=" 職工號(hào) "," 職工名 "," 性別 "," 出生日期 "," 工資 " / 二維表列名

12、第二步:定制表格。1、實(shí)現(xiàn)抽象類 AbstractTableModel 對(duì)象 tm 中的方法: vect=new Vector();/實(shí)例化向量tm=new AbstractTableModel() public int getColumnCount() return title.length;/ 取得表格列數(shù) public int getRowCount() return vect.size();/ 取得表格行數(shù) 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;/ 設(shè)置表格列名 public void setValueAt(Object value,int row,int column) / 數(shù)據(jù)模型不可編輯,該方法設(shè)置為空 public Class getColumnClass(int c) return getValueAt(0,c).getClass();/ 取得列所屬對(duì)象類public boolean isCellE

14、ditable(int row,int column) return false;/ 設(shè)置單元格不可編輯,為缺省實(shí)現(xiàn) ;2、定制表格: jg_table=new JTable(tm);/ 生成自己的數(shù)據(jù)模型jg_table.setToolTipText(" 顯示全部查詢結(jié)果 ");/ 設(shè)置幫助提示 jg_table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);/ 設(shè)置表風(fēng)格整尺寸模式j(luò)g_table.setCellSelectionEnabled(false);/ 設(shè)置單元格選擇方式 jg_table.setShowVerticalL

15、ines(true);/設(shè)置是否顯示單元格間的分割線jg_table.setShowHorizontalLines(true);jsp=new JScrollPane(jg_table);/給表格加上滾動(dòng)杠第三步:顯示查詢結(jié)果。1、 連接數(shù)據(jù)庫:第二局部已給出。2、 數(shù)據(jù)庫查詢:Statement stmt=connection.createStatement();ResultSet rs=stmt.executeQuery("select * from worker");3、顯示查詢結(jié)果: vect.removeAllElements();/ 初始化向量對(duì)象 tm.fir

16、eTableStructureChanged();/ 更新表格內(nèi)容 while(rs.next()Vector rec_vector=new Vector();/ 從結(jié)果集中取數(shù)據(jù)放入向量 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 的內(nèi)容 例圖如下:假設(shè)要實(shí)現(xiàn)示圖中記錄前翻、后翻的效果,有兩種方法:一、如果軟件環(huán)境支持 2.0 ,可直接利用 rs.prevoius(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論