一
我們的終極目標是一個能夠滿足所有潛在用戶的Intranet
首先
然而
在范例查詢系統中
二
對於一些程序員來說
數據庫最基本的元素之一是表
【Listing
import java
public class DBTable {
String pkey; // 主鍵
String name; // 表的名字
Vector columns; // 結果集包含的列
Hashtable col_desc; // 各個列的描述
Vector children; // 子表
Vector constraints; // 所有約束
/* 創建一個新的
protected DBTable() {
columns = new Vector();
children = new Vector();
constraints = new Vector();
col_desc = new Hashtable();
}
/* 創建一個新的表
public DBTable(String name
this();
this
this
}
/* 返回主鍵 */
public String getPrimaryKey() {
return pkey;
}
/* 創建一個新的約束
* 並把它加入表的約束列表
*/
public void addConstraint(String column
int op
Constraint c = new Constraint();
lumn = column;
c
c
constraints
}
/* 把結果集限制為單個記錄的簡便方法 */
public void constrainByPrimaryKey(String value) {
addConstraint(pkey
}
/* 添加一個列 */
public void addColumn(String column
String description) {
columns
col_desc
}
/* 添加一個子表
public void addChildTable(DBTable table
children
addConstraint(this
table
}
/* 搜索當前表以及(遞歸地搜索)所有子表
* 尋找指定的列
public String findColumnDescription(String column) {
String result = (String) col_desc
if (result != null) { // 已經找到指定的列
return result;
} else {
// 在所有子表中搜索該列
Enumeration e = children
while (e
DBTable child = (DBTable) e
result = child
if (result != null) { // 已經找到!
return result;
}
}
return null; // 在所有表中都無法找到指定的列
}
}
/* 搜索當前表以及(遞歸地搜索)所有子表
* 檢查指定的列是否是一個主鍵 */
public boolean isPrimaryKey(String column) {
if (pkey
return true;
} else {
// 搜索所有子表
Enumeration e = children
while (e
DBTable child = (DBTable) e
if (child
return true;
}
}
return false;
}
}
}
單獨的DBTable類其實沒有什麼實際用途
下面就是DBTable類的子類SQLDBTable
【Listing
import java
import java
public class SQLDBTable extends DBTable {
/* 構造函數 */
public SQLDBTable(String name
super(name
}
/* 生成一個SQL命令 */
public String generateSQL() {
/* 獲得SQL命令中出現的所有表的一個清單 */
Vector tables = new Vector();
findTables(tables);
/* 獲得所有列的一個清單 */
Vector columns = new Vector();
findColumns(columns);
/* 獲得必須在WHERE子句中出現的所有約束
* 的一個清單
*/
Vector where = new Vector();
findConstraints(where);
/* 創建一個容納SQL命令的StringBuffer */
StringBuffer sql = new StringBuffer(
sql
sql
sql
if (where
sql
sql
}
return sql
}
/* 利用一個JDBC連接提取結果記錄
* 注意
* Statement對象
*/
public ResultSet fetchRows(Connection conn)
throws Exception
{
String sql = generateSQL();
/* 創建Statement(可能拋出SQLExeception異常)*/
Statement stmt = conn
/* 返回結果集 */
return stmt
}
/* 這是一個從主鍵以外的各個列獲取數據的簡便
* 方法
*關於使用該方法的例子
*/
public Enumeration getDisplayData(ResultSet rs) throws SQLException
{
ResultSetMetaData rmd = rs
Vector result = new Vector();
for(int i =
String column = rmd
if (isPrimaryKey(column)) {
continue;
}
result
}
return result
}
/* 該方法生成帶分界符的列表
* 用來為SQL命令生成空格或逗號分隔的列表
*/
private String delimitedList(String delim
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19196.html