Java數(shù)據(jù)庫編程中查詢結(jié)果的表格式輸出_第1頁
Java數(shù)據(jù)庫編程中查詢結(jié)果的表格式輸出_第2頁
Java數(shù)據(jù)庫編程中查詢結(jié)果的表格式輸出_第3頁
Java數(shù)據(jù)庫編程中查詢結(jié)果的表格式輸出_第4頁
Java數(shù)據(jù)庫編程中查詢結(jié)果的表格式輸出_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Java數(shù)據(jù)庫編程中査詢結(jié)果的表格式輸出在實(shí)際應(yīng)用中,我們可以利用Vector JTable、AbstractTableModel等三個(gè)類較好地解決這一 問題。以下,詳細(xì)介紹一下實(shí)現(xiàn)方法。一、類 Vector a 類 JTable 及類 AbstiactTableModel 簡介:1、類 Vector:類Vector是Java的歷史集合類,隸屬于java.util包。它包裝了異構(gòu)鏈表和數(shù)組雜合體,具 有以下兩個(gè)特點(diǎn):*向量是異構(gòu)的,不要求每個(gè)元素的類型相同,向量中可以混合多種對彖類型;*向量是數(shù)組雜合體,因?yàn)樗鼈兛梢栽谠黾釉貢r(shí)動(dòng)態(tài)增大。其異構(gòu)性正好符合數(shù)據(jù)庫記錄中屬性類型不一的特點(diǎn),而其動(dòng)態(tài)

2、性也正好符合數(shù)據(jù)庫查詢 時(shí),結(jié)果集記錄個(gè)數(shù)不定的特點(diǎn)。類Vector定義如卞:public class Vector extends AbstractListunplements List, Cloneable , Serializable-實(shí)現(xiàn)了向量成員的查找、新增、刪除等方法。如:add(Objectobj)4方便地加入一個(gè)對象; get(int mdex)可方便地得到向量中的一個(gè)對象;remove(Object obj)。則可方便地刪除向量中 一個(gè)對彖。2、類 JTable:JTable組件是Swing組件中比較復(fù)雜的小件,隸屬于javax.swmg包,它能以二維表的形式 顯示數(shù)據(jù)。類J

3、Table定義如下:public class JTable extends JComponentmiplements TableModelListener, Scrollable, TableColunuiModelListener,ListSelectionListener, CellEditorListener, Accessible”類JTable在顯示數(shù)據(jù)時(shí)具有以下特點(diǎn):*可定制性:可以定制數(shù)據(jù)的顯示方式和編輯狀態(tài);*異構(gòu)性:可以顯示不同類型的數(shù)據(jù)對彖,甚至包拾顏色、圖標(biāo)等復(fù)雜對彖;*簡便性:可以以缺省方式輕松地建立起一個(gè)二維表。其可定制性可滿足不同用戶和場合的要求,異構(gòu)性也正好符合數(shù)

4、據(jù)庫訪問結(jié)呆集中屬性類型不一的特點(diǎn)。類JTable提供了極為豐富的二維表格操作方法,如設(shè)置編輯狀態(tài)、顯示方式、選擇行列等,在此不一一贅述。使用類JTable顯示數(shù)據(jù)之前,必須根據(jù)情況生成定制模型、單元繪制器或單元編輯器。類AbsUactListModel用來定制用戶自己的數(shù)據(jù)模型,這個(gè)類在后面要介紹。TableCellRenderer接I I用來定制單元繪制器,TableCellEditor接I I用來定制單元編輯器,這 兩個(gè)接1主要用于顏色對象的處理上,在示例中沒有用到,不做過多說明。 3、類 AbstractTableModel:類AbsnactTableModel是一個(gè)抽象類,沒有完全實(shí)

5、現(xiàn),不能實(shí)例化,使用時(shí)必須在程序中實(shí)現(xiàn)方法。它隸屬于javax.swing.table。類定義如下:public abstract class AbstractTableModel extends Objectmiplements TableModel, Serializable-類AbstiactTableModel提供了 TableModel接I I中絕人多數(shù)方法的缺省實(shí)現(xiàn)。TableModel接【I定義了 JTable的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)。用戶要生成自己的數(shù)據(jù)模型,本來可以通過實(shí)現(xiàn)TableModel接I I中所冇方法來滿足要求,但管理聽眾表的功能對于所有數(shù)據(jù)模型是共同的,所以在javax.s

6、wing.table中又定義了類AbstractTableModel來處理這個(gè)工作。它既管理聽眾表,又為生成TableModelEvents事件并委托給聽眾提供了便利。 要想生成一個(gè)具體的TableModel作為AbstractTableMode的子類,至少必須實(shí)現(xiàn)下面三個(gè)方 法:public iiit getRowCount();public mt getColunmCount();public Object getValueAt(iiit row, iiit column);至此,我們可以建立一個(gè)簡單二維表(5X5),實(shí)現(xiàn)方法如下:TableModel dataModel = new Ab

7、stractTableModelQ public iiit getColunmCount() return 5; public iiit getRowCount() return 5;public Object getValueAt(iiit row, iiit 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ù)庫服務(wù)器中。路徑為:

8、D:WORKER,數(shù)據(jù) 庫名為:worker.dbfo具有以下字段:字段名類型Wno (職工號(hào))VARCHARWname (職工名)VARCHARSex (性別)VARCHARButhdav (出生口 期)DATEWage (工資)FLOAT要連接此數(shù)據(jù)庫,需使用java.sql包中的類DnverManageio此類是用于管理JDBC驅(qū)動(dòng)程序 的實(shí)用程序類。它提供了通過驅(qū)動(dòng)程序取得連接、注冊,撤消驅(qū)動(dòng)程序,設(shè)置登記和數(shù)據(jù) 庫訪問登錄超時(shí)等方法。具體連接方法如下:第一步:定位、裝入和鏈接SvbDiivei類;driver=ncom.svbase.jdbc.SybDriverH;SybDriver

9、 sybdriver=(SybDrivei)Class.fbrName(dnvei).newIiistance();第二步:注冊SybDriver類;DriverManager.registerDnver(sybdriver);第三步:取得連接(SvbCoiuiection)對彖引用。user=nsaH;password=HH;url=jdbc:sybase:Tds:202.117.203.114:5000AVORKER,r;SybComiection coimection=(SybCoimection)DnverManager.getCoiiiiection(urtuseLpasswoid)

10、;建立完連接后,即可通過Statement接I I進(jìn)行數(shù)據(jù)庫的查詢與更改。三、實(shí)現(xiàn)方法:限于篇幅,在此只給出核心代碼,包引入、界面處理、變量定義等部分不再介紹。第一步:對彖聲明。AbstiactTableModel tm;聲明一個(gè)類 AbstractTableModel 對象JTable jg_table;/聲明一個(gè)類 JTable 對彖Vector vect;/聲明一個(gè)向量對象JScrollPane jsp;/聲明一個(gè)滾動(dòng)杠對彖Strmgtitle=H5R工號(hào)”,”職工名”,”性別”,”出生口期,“工資”;二維表列名第二步:定制表格。1、實(shí)現(xiàn)抽象類AbstiactTableModel對象tm

11、中的方法: vect=new VectorQ;/ 實(shí)例化向量 tm=new AbstractTableModelQ public mt getColunmCount() retuin title, length;/ 取得表格列數(shù) public mt getRowCount() retuin vect. size(); 取得表格行數(shù) public Object getValueAt(mt rowjnt colunm) if(! vect isEmpty () return(Vector)vect.elementAt(iow). elementAt(colunm);elseletuin null;

12、/取得單元格中的屬性值 public String getColuniiiName(int column” retui n title column;/ 設(shè)置表格列名 public void setValueAt(Object value.iiit rowjnt colunm) 數(shù)據(jù)模型不可編輯,該方法設(shè)置為空 public Class getColunmClass(iiit c) return getValueAt(Ox).getClass();取得列所屬對象類public boolean isCellEditable(mt rowjnt colunm) i-etuin false;/設(shè)置單

13、元格不可編輯,為缺省實(shí)現(xiàn) ;2、定制表格: jg_table=new JTable(tm);/生成自己的數(shù)據(jù)模型 jg-table.setToolTipTextC顯示全部查詢結(jié)果”);/設(shè)置幫助提示 jg_table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);設(shè)置表格調(diào)整尺寸模式j(luò)g_table.setCellSelectionEnabled(false);/ 設(shè)置單元格選擇方式 jg_table.setShoxvVei-ticalLines(u-ue)y/設(shè)置是否顯示單元格間的分割線 jg_table.setShowHoiizontalLmes(ti

14、iie);j sp=new J ScrollP ane(jg_table);給表格加上滾動(dòng)杠第三步:顯示查詢結(jié)果。1、連接數(shù)據(jù)庫:第二部分已給出。2、數(shù)據(jù)庫查詢:Statement stmt=coiuiection.cieateStatement();ResultSet rs=stmt.executeQueiy(nselect * from worker*);3、顯示查詢結(jié)果:vect.removeAllElementsQ/ 初始化向量對彖 tm.fiieTableStHictureChanged();/ 更新表格內(nèi)容 while(rs.next()Vector rec_vectoi-new

15、VectorQ;/從結(jié)果集中取數(shù)據(jù)放入向量rec_vector中rec_vector.addElement(is.getStrmg( 1);rec_vector.addElement(is.getStrmg(2);rec_vector.addElement(is.getStrmg(3);rec_vector.addElement(is.getDate(4);rec_vector.addElement(new F loat(rs. getF loat(5 ); vect.addElement(rec_vector)y/向量 iec_vector 加入向量 vect 中 tm.fiieTableS

16、tRicnireChanged();/更新表格 顯示向量 vect 的內(nèi)容。本程序采用 MSAcc亡ss數(shù)據(jù)庫,Database名稱為DBAddressBook, Table名稱為TblAddressBooko 表結(jié)構(gòu)如卜:字段名類型編號(hào)Text(50)姓名Text(50)電話Text(50)地址Text(50)由于本人對該程序的注釋極為詳細(xì),故不再作進(jìn)一步的講解,該程序在Wmdows2000, jdkl.3 下編譯并成功運(yùn)行。下載源代碼。執(zhí)行方法:參照上表設(shè)計(jì)數(shù)據(jù)庫,并配置ODEC的DSN名稱為AddressBookojavac DisplaueryResults.javaDisplayQu

17、eryResults/Displaymiport java.sql.*;miport javax.swing.*;miport java.awt.*;miport java.awt.event.*;miport java.util.*;public class DisplavQueryResults extends JFrame 數(shù)據(jù)庫變量定義private Connection connection;private Statement statement;private ResultSet resultSet;private ResultSetMetaData rsMetaData;/GUI

18、變屋定義private JTable table;private JTextAiea mputQuery;private JButton subnutQuery;public DisplavQueiyResults()/Form的標(biāo)題super(”輸入SQL語句,按提交按鈕查看結(jié)果?!?;/url中指定ODBC中設(shè)置的DSN名稱String url = Mj dbc: odbc: AddressBook*;String username =String password =,H;/加載驅(qū)動(dòng)程序以連接數(shù)據(jù)庫Class.forName( nsun.jdbc.odbc.JdbcOdbcDnvern)

19、; connection = DriverManagei-.getComiection( url, username, password );捕獲加載驅(qū)動(dòng)程序異常catch ( ClassNotFoundException cnfex) System.err.println(”裝載JDBC/ODBC驅(qū)動(dòng)程序失敗。”);cnfex.printStackTraceO;System.exit( 1 ); / tenniiiate program捕獲連接數(shù)據(jù)庫異常catch ( SQLException sqlex) System.en-.pnntln( “無法連接數(shù)據(jù)庫”); sqlex.print

20、StackTiaceQ;System.exit( 1 ); / tenniiiate program如果數(shù)據(jù)庫連接成功,則建立GUI/SQL語句Strmg test=HSELECT * FROM TblAddiessBook11; mputQueiv = new JTextAiea( test, 4, 30 );subniitQueiy = new JButton( ”查詢”);/Button 事件subniitQueiy. addActioiiListener(new ActioiiListener() public void actioiiPeiibrmed( ActioiiEvent e

21、 ) getTableQ;);JPaiiel topPanel = new JPanel();topPanel.setLayout( new BoiderLayout();將”輸入查詢”編輯框布置到CENTERtopPanel.add( new JScrollPaiie( mputQueiy), BoiderLayout.CENTER);將提交查詢”按鈕布置到SOUTHtopPanel.add( subnutQueiy Border Layout. SOUTH );table = new JTableQ;Contamer c = getContentPaneQ;c.setLayout( new

22、 BordeiLayout();將”topPanel”編輯框布置到NORTHc.add( topPaneL BorderLayout.NORTH);將”table”編輯框布置到,CENTERc.add( table, BorderLayout.CENTER);getTableQ;setSize( 500, 300);顯示Formshow();private void getTableQ執(zhí)行SQL語句Strmg query = mputQuery.getTextQ; statement = coniiection.createStatement(); resultSet = statement.

23、executeQueiy( query);在表格中顯示查詢結(jié)果displayResultSet( resultSet);catch ( SQLException sqlex) sqlex.pnntStackTraceQ; private void displavResultSet( ResultSet is ) tluows SQLException定位到達(dá)第一條記錄boolean moreRecords = rs.nextQ;如呆沒有記錄,則提示一條消息if ( ! moreRecords ) JOptioiiPane.showMessageDialog( this,”結(jié)果集中無記錄”);s

24、etTitle( M無記錄顯示);retuin;Vector colunuiHeads = new Vector();Vector rows = new Vectoi();try獲取字段的名稱ResultSetMetaData rsmd = rs.getMetaDataQ;for (inti= l;i= rsmd. getColuiniiC ount(); +i)colunmHeads.addElement( rsmd.getColuniiiName( i);獲取記錄集do iows.addElement( getNextRow( is, rsmd ); while (is.nextQ );在表格中顯示查詢結(jié)果table = new JTa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論