TableDataModel顧名思義就是要處理表格型的資料。應用到實際存放搜尋的資料庫內容時,比起ResultSet會佔住資料庫的資源,或是取得ResultSet後再放到String[][]在取用資料時不確定在哪裡,TableDataModel提供了方便的存取介面且易於改寫內部;物件轉換為字串後再壓縮也可以節省網路傳輸的頻寬。
第一個子節點只存放欄位的名稱與欄位的型態而不存放資料(我常用的設定是將所有欄位型態都定義為字串),名稱用逗號分隔放在放在一個attribute;往下依序每個子節點都是一筆記錄,記錄裡的每個欄位值都使用欄位名稱放在attribute裡。實際的對應範例如下圖所示。
TableDataModelInterface定義了一些存取欄位名稱與值的方法,實作就根據資料在基本Data Model裡的放置而設計。再往上應該準備CSVParserAction與ExcelParserAction兩個存取檔案的類別,前者依逗號分隔規則切割資料,後者使用JXL函式庫來存取Excel檔案內的資料;在資料庫的select應用場合可以解析sql command內的欄位名稱,直接new TableDataModel後放入欄位名稱與搜尋的結果。
public int getFieldCount();
public String[] listFieldNames();
public boolean setFieldNames(String[] fieldNames);
public int getRecordCount();
public String[] getRecord(int index);
public boolean appendRecord(int index, String[] data);
public boolean removeRecord(int index);
public String[] listFieldValue(String fieldName);
public String[] listFieldValue(int fieldIndex);
public String[][] listTableValue();
如果對於這種寫法的速度覺得不滿意,當然可以改寫為更有效率的作法而不影響這個元件的設計。
註:這裡的內容並未實作在workspace裡,但是在之前的專案裡已驗證過可行。
沒有留言:
張貼留言