系列首篇,展示自製 DataTable 元件的整體架構、JUnit 測試代碼、多表連接(Join)功能演示與實際運行結果。
從 .NET 轉 Java 開發,缺少 System.Data.DataTable 這類強大的記憶體資料結構。決定自行實現輕量級對應元件,支援:
@Test
public void joinTable() {
JingZongDB jzdb = new JingZongDB();
// 查詢兩張表
DataTable dt1 = jzdb.getDataTable("SELECT * FROM newsType");
DataTable dt2 = jzdb.getDataTable("SELECT * FROM news");
// 多表連接:dt1.id = dt2.typeid
DataTable dt = DataTable.joinTable(dt1, dt2, "id", "typeid");
// 輸出驗證
System.out.println("新聞類型表:" + dt1.getRows().size());
DataTable.outTable(dt1);
System.out.println("新聞表:" + dt2.getRows().size());
DataTable.outTable(dt2);
System.out.println("合併後:" + dt.getRows().size());
DataTable.outTable(dt);
}
id:1 typeName:學生工作 id:2 typeName:通知公告 id:3 typeName:招生簡章 id:4 typeName:教務信息
id:1 typeid:1 newsName:學生工作1 id:2 typeid:1 newsName:學生工作2 ... id:16 typeid:4 newsName:教務信息4
合併後:16 id:1 typeName:學生工作 id:1 typeid:1 newsName:學生工作1 id:1 typeName:學生工作 id:2 typeid:1 newsName:學生工作2 ... id:4 typeName:教務信息 id:16 typeid:4 newsName:教務信息4
JingZongDB (資料存取門面)
└── getDataTable(sql, params) → DataTable
DataTable (核心資料容器)
├── List rows
├── static joinTable(t1, t2, key1, key2) → DataTable
├── static outTable(DataTable) → void (控制台輸出)
DataRow
└── List columns
DataColumn
├── String name
└── Object value
SqlParameter (參數封裝,系列二詳述)
├── String type
├── String/int/boolean/Date/Blob value
JingZongDB 封裝不同資料源切換邏輯。joinTable 以 HashMap 建立左表索引,掃描右表匹配,時間複雜度 O(N+M)。@Test 註解驅動,System.out.println 驗證輸出(生產環境建議用 Assert 斷言)。SqlParameter 封裝與 getDataTable 核心查詢邏輯。addSqlParameter 實現與業務調用範例。