Java資料庫編程中查詢結果的輸出
利用Java開發資料庫應用系統時,經常需要在使用者介面上顯示查詢結果。由於SUN公司提供的JDK1.x開發套件不是可視化的整合式開發環境(IDE),能象Delphi、VB那樣方便地把查詢結果在DBGrid等表格中顯示出來。因此,只能靠自己編寫代碼來實現。
---- 在實際應用中,我們可以利用Vector、JTable、AbstractTableModel等三個類較好地解決這一問題。以下,具體介紹一下實現方法。
---- 一、類Vector、類JTable及類AbstractTableModel簡介:
---- 1、類Vector:
---- 類Vector是Java的曆史集合類,隸屬於java.util包。它封裝了異構鏈表和數組雜合體,具有以下兩個特點:
---- (1)向量是異構的,不要求每個元素的類型相同,向量中可以混合多種物件類型;
---- (2)向量是數組雜合體,因為它們可以在增加元素時動態增大。
---- 其異構性正好符合資料庫記錄中屬性類型不一的特點,而其動態性也正好符合資料庫查詢時,結果集記錄個數不定的特點。
---- 類Vector定義如下:
public class Vector extends AbstractList
implements List , Cloneable , Serializable{…}
---- 實現了向量成員的尋找、新增、刪除等方法。如:add(Object obj)可方便地加入一個對象;get(int index)可方便地得到向量中的一個對象;remove(Object obj)則可方便地刪除向量中一個對象。
---- 2、類JTable:
---- JTable組件是Swing組件中比較複雜的小件,隸屬於javax.swing包,它能以二維表的形式顯示資料。類JTable定義如下:
public class JTable extends JComponent
implements TableModelListener,
Scrollable, TableColumnModelListener,
ListSelectionListener,
CellEditorListener, Accessible{…}
---- 類JTable在顯示資料時具有以下特點:
---- (1)可定製性:可以定製資料的顯示方式和編輯狀態;
---- (2)異構性:可以顯示不同類型的資料對象,甚至包括顏色、表徵圖等複雜物件;
---- (3)簡便性:可以以預設方式輕鬆地建立起一個二維表。
---- 其可定製性可滿足不同使用者和場合的要求,異構性也正好符合資料庫訪問結果集中屬性類型不一的特點。類JTable提供了極為豐富的二維表格操作方法,如設定編輯狀態、顯示方式、選擇行列等,在此不一一贅述。
---- 使用類JTable顯示資料之前,必鬚根據情況產生定製模型、單元繪製器或單元編輯器。類AbstractListModel用來定製使用者自己的資料模型,這個類在後面要介紹。TableCellRenderer介面用來定製單元繪製器,TableCellEditor介面用來定製單元編輯器,這兩個介面主要用於顏色對象的處理上,在樣本中沒有用到,不做過多說明。
---- 3、類AbstractTableModel:
---- 類AbstractTableModel是一個抽象類別,沒有完全實現,不能執行個體化,使用時必須在程式中實現方法。它隸屬於javax.swing.table 。類定義如下:
public abstract class AbstractTableModel extends Object
implements TableModel, Serializable{…}
---- 類AbstractTableModel提供了TableModel介面中絕大多數方法的預設實現。TableModel介面定義了JTable 的基礎資料結構。使用者要產生自己的資料模型,本來可以通過實現TableModel介面中所有方法來滿足要求,但治理聽眾表的功能對於所有資料模型是共同的,所以在javax.swing.table中又定義了類AbstractTableModel來處理這個工作。它既治理聽眾表,又為產生TableModelEvents事件並委託給聽眾提供了便利。
---- 要想產生一個具體的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);