2009年4月1日 星期三

U13 第二個元件(3)──讀寫CSV與Excel檔案

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裡,但是在之前的專案裡已驗證過可行。

沒有留言:

張貼留言