国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java,Beans 和 關系數據庫 的 鏡像

2019-11-18 12:11:16
字體:
來源:轉載
供稿:網友

  摘 要
   JDK1.1 包 括 了 新 的 數 據 庫 存 取(JDBC) 及 組 件(javaBeans) 的 應 用 程 序 接 口(APIs)。 這 兩 個API 結 合 在 一 起, 可 用 來 開 發 通 用 數 據 庫 代 碼。 通 過 用 唯 一 的 一 個 類 去 存 取 任 何 一 種JDBC 數 據 庫( 封 裝 于 不 同 組 件 中 的 各 個 應 用 程 序 有 著 其 具 體 的 編 碼), 用 戶 就 不 必 因 為 數 據 庫 結 構 一 點 點 的 細 小 變 化 去 修 改 數 據 庫 編 碼。
  
   一 個 關 系 數 據 庫 基 本 上 包 括 一 系 列 相 互 關 連 的 表, 在 每 一 個 表 中 存 有 一 類 與 應 用 系 統 相 關 的 數 據。 例 如 一 個 地 址 簿 數 據 庫 中, 可 能 有 關 于 人 員、 住 址、 電 話 號 碼 等 方 面 的 表。 在 數 據 庫 中, 每 一 個 這 樣 的 實 體 將 被 作 為 一 系 列 的 字 符 串, 整 數 及 其 它 原 始 數 據 類 型 存 貯 起 來。 數 據 庫 中, 表 的 定 義 將 描 述 每 一 種 與 實 體 相 關 的 信 息 如 何 在 一 個 表 的 字 段 中 存 儲。 例 如, 你 可 以 在 一 個 名 為“ 人” 的 表 中, 有 兩 個 字 段 別 表 示 所 存 字 符 串 為“ 姓” 和“ 名”。 每 一 張 表 應 當 有 一 個 或 幾 個 字 段 值 作 為 標 識, 確 保 每 條 記 錄 的 唯 一 性。 這 些 標 識 或“ 鍵” 可 以 用 來 連 接 存 在 于 不 同 表 中 的 信 息。 例 如 你 可 以 在“ 人 員” 表 中, 為 每 個 人 指 定 唯 一 的“ 人 員 號 碼” 的 鍵 值, 并 在“ 地 址” 表 中 的 相 應 字 段 中 使 用 同 一 個 鍵 值。 這 樣, 你 可 以 通 過 對 兩 個 表 中 的“ 人 員 號 碼” 字 段 值 的 匹 配, 使 每 一 個 人 和 他 的 地 址 關 聯 起 來。
  
     關 系 數 據 庫 系 統 出 現 于 七 十 年 代, 時 至 今 日, 它 仍 然 是 存 儲 巨 量 數 據 的 主 要 方 式。 因 而,Java 軟 件 工 具 有 必 要 具 備 處 理 關 系 數 據 庫 的 能 力。
  
     關 系 數 據 庫 要 想 被 某 個Java 應 用 程 序 利 用, 首 先 需 要 解 決 兩 個 問 題。 第 一: 需 要 某 些 基 礎 的 中 間 件 來 建 立 與 數 據 庫 的 連 接, 向 數 據 庫 發 出SQL 查 詢 等 等; 第 二: 操 縱 數 據 庫 的 處 理 結 果 要 與 操 縱 任 何 一 種Java 信 息 一 樣 方 便 — — 作 為 一 個 對 象。 前 一 個 問 題 已 被SUN 及 幾 個 數 據 庫 產 商 解 決; 后 一 個 問 題 則 有 待 我 們 進 一 步 去 探 究。
  
     在 為 普 通 的 程 序 開 發 業 務 定 義 大 量 的APIs 這 項 工 作 上,SUN 一 直 保 持 著 與 許 多 軟 件 公 司 的 合 作 關 系。 在JDK1.1 APIs 中, JDBC 的API 是 最 早 建 立 起 來 的。 而 且, 它 已 得 到 了 為 數 眾 多 的 應 用。 這 些 應 用 中, 有 的 是100% 的 純Java, 有 的 則 是Java 和 其 它 程 序 的 混 合 體, 如: 用 現 有 的ODBC 數 據 源 進 行 連 接( 參 看 圖1)。JavaSoft 已 將 一 個 關 于 現 有 的JDBC 驅 動 程 序 的 介 紹 放 在 它 的Web 站 點 上(http://splash.javasoft.com/jdbc/jdbc.drivers.Html)。
   Java,Beans 和 關系數據庫 的 鏡像(圖一)
點擊查看大圖

  圖1 一 個 典 型 的JDBC 或JDBC/ODBC 配 置
   注 意: 此 圖 已 被 簡 化。 另 外 的 組 件 已 包 括 其 中( 如ODBD 驅 動 程 序)
  
  非 常 明 顯, 這 些 應 用 的 優 缺 點 取 決 于 你 的 環 境 和 設 置, 在 此 我 不 準 備 對 它 們 的 各 種 情 況 進 行 逐 一 論 述。 在 下 面 的 內 容 中, 我 們 假 定, 在 你 的 機 器 中 已 擁 有 某 種Java 開 發 環 境, 并 且 你 已 正 確 地 安 裝 并 測 試 過 某 個JDBC 驅 動 程 序, 或 者 運 用 過 某 種JDBC 驅 動 程 序 及SUN 的JDBC/ODBC 橋。
  
  JDBC API
   JDBC API 作 為 一 個 單 獨 的Java 包( 或 類 庫, 即java.sql) 出 現, 包 括 有 一 系 列 的 類。 這 些 類 提 供 了 處 理 某 個 關 系 數 據 庫 的 中 間 件。 本 質 上 講, 它 們 使 得 你 可 以 關 聯 某 個 數 據 庫, 并 向 其 發 出 查 詢。 你 可 以 對 這 些 查 詢 結 果 進 行 處 理, 檢 索 你 數 據 庫 的meta- 信 息(meta-information), 并 且 處 理 在 此 間 可 能 發 生 的 各 種 異 常 情 況。
  
   讓 我 們 來 看 一 個 簡 單 的JDBC 例 子, 看 一 看 應 用 了Java JDBC 之 后, 查 詢 會 得 到 怎 樣 的 簡 化。 表1 是 一 個 極 其 簡 單 的 數 據 庫。 在 清 單1 中 的 編 碼 是 一 段 最 簡 單 的 對 關 系 數 據 庫 進 行SQL 查 詢 所 需 的Java 語 句。
  Java,Beans 和 關系數據庫 的 鏡像(圖二)
   String ur1="jdbc:odbc:sample";
   String query="SELECT * FROM PERSON";
   boolean more;
   try
   {
   Class.forName("sun.jdbc.odbc.jdbcOdbcDriver");
   Connection con = DriverManager.getConnection(ur1,"sandor","guest");
   Statement stmt = con.createStatement();
   ResultSet rs = stmt.executeQuery(query);
   While (more = rs,next())
   {
     int number = rs.getInt("PERSON#");
     String firstName = rs.getString("FIRST_NAME");
     String lastName = rs.getString("LAST_NAME");
     System.out.PRintIn(number + " " + firstName + " " + lastName);
   }
   rs.close();
   stmt.close();
   con.close();
   }
   catch(SQLException ex)
   {
   ex.printStackTrace();
   }
  
  清 單1: 一 個 應 用 了JDBC 的SQL 查 詢
  
     這 段 編 碼 的 含 義 是: 先 裝 入SUN 的JDBC/ODBC 驅 動 程 序, 然 后 與 被jdbc:odbc:sample 指 定 的 數 據 庫 建 立 起 一 個 關 聯, 最 后 對 該 數 據 庫 進 行 一 個 簡 單 的SELECT 查 詢。 如 果 沒 有 遇 到 查 詢 異 常(SQLException), 程 序 將 循 環 地 從 結 果 集(ResultSet) 中 每 次 抽 出 一 條 數 據 庫 記 錄, 并 將 其 顯 示 在 屏 幕 上。
  
     好 了, 現 在 我 們 來 看 一 看 這 段 程 序 還 有 哪 些 不 足? 在 清 單1 的 這 類 程 序 中, 存 在 著 兩 個 根 本 性 的 錯 誤:
  
     1 . 這 種 編 碼 用 到 了 數 量 眾 多 的 數 據 庫meta- 信 息, 而 這 些 信 息 都 只 能 手 工 編 碼 到 程 序 中。 當 你 想 要 取 一 個 數 值 時, 你 必 須 提 前 知 道 你 將 取 到 的 數 值 是 一 個 整 數、 浮 點 數、 還 是 一 個 雙 精 度 數。 這 將 會 使 得 編 寫 一 個 可 以 處 理 任 何 一 個 數 據 庫 的 類 變 得 十 分 困 難; 并 且 每 一 個 數 據 庫 的 細 小 調 整 都 會 逼 你 去 仔 細 地 檢 查 和 修 改 程 序。
  
     2 . 數 據 庫 中 的 信 息 總 是 作 為 一 個 單 個 的RecordSet( 記 錄 集) 實 例 來 傳 遞, 而 這 種 實 例 并 不 是 一 個 真 正 的 對 象。RecordSet 類 ( 與 其 它 的 數 據 庫 類 封 裝 沒 什 么 差 別) 更 象 一 個 指 針 或 游 標, 借 助 方 法, 它 能 夠 提 供 存 取 數 據 信 息 的 途 徑。RecordSet 中 的 實 例 實 際 上 并 不 包 括 信 息, 它 們 僅 僅 表 示 獲 得 信 息 的 方 式。 這 正 說 明 了 當 你 要 調 用 另 外 的RecordSet 方 法 去 獲 取 某 些 真 實 的 數 據 信 息 的 時 候, 你 必 須 通 過RecordSet 去 做 更 多 的 工 作( 利 用RecordSet.NEXT() 去 移 動 指 針)。 實 際 上,JDBC 類 的 確 僅 僅 傳 遞 這 類 聯 系 松 散 的 字 段。 即 使 你 完 全 了 解 數 據 庫 的 所 有 內 部 細 節, 這 也 沒 有 任 何 價 值, 因 為 在Java 提 供 了 存 儲 和 處 理 信 息 的 方 法。
  
     所 以, 理 想 的 狀 態 是, 有 一 種 好 的 方 法, 能 夠 逐 一 地 從 數 據 庫 中 抽 取 記 錄 或 字 段( 通 過RecordSet), 并 且 將 取 到 的 信 息“ 填” 入 到 新 生 成 的 對 象 之 中。
  
     這 一 解 決 方 式 的 關 鍵 在 于 關 系 數 據 庫(RDB) 和 面 向 對 象 的 數 據 模 型(ODB) 之 間 的 相 似 性。RDB 中 的 表 和ODB 中 的 類 的 作 用 很 相 似, 而 記 錄 和 對 象 也 有 著 某 些 相 同 的 屬 性。 你 可 以 將 記 錄 看 作 是 用 來 初 始 化 某 個 對 象 的 數 據 元 素 的 數 據 組。 如 果 你 已 將 記 錄 從 數 據 庫 中 抽 取 出 來, 就 必 須 調 用 類 構 造 函 數 來 生 成 上 面 所 說 的 對 象。 若 能 夠 將 每 一 條 記 錄 自 動 地 傳 到 適 當 的 構 造 函 數 中, 就 可 以 輕 而 易 舉 地 由 記 錄 來 構 造 對 象。
  
     在 開 發 一 個 小 的 應 用 程 序 時, 有 可 能 將 每 一 個 記 錄 傳 遞 給 某 個 構 造 函 數, 以 此 來 生 成 新 的 對 象。 你 可 以 經 常 利 用 對 象 參 照 來 操 縱 從 數 據 庫 中 抽 取 的 任 何 數 據。 因 為 你 通 過RecordSet 所 得 到 的 每 一 個 對 象 最 終 都 是java.lang.Object 的 擴 充。 你 可 以 定 義 一 個BibClass, 使 其 具 有 各 類 的 共 同 屬 性,BigClass 類 操 作 將 利 用Java instanceof 算 子 來 實 時 決 定 運 行 中 所 遇 到 的 數 據 庫 信 息, 并 且 通 過 一 個 大 的switch 選 擇, 跳 到 相 應 的 程 序 段 中。
  
     你 也 可 以 定 義 一 個 相 似 的 帶 有 多 個 構 造 函 數 的BigClass, 每 個 構 造 函 數 有 差 別 不 太 大 的

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗定市| 罗源县| 邵武市| 陆丰市| 花垣县| 南昌市| 汝城县| 盈江县| 锡林浩特市| 双流县| 自贡市| 万宁市| 汶川县| 建德市| 呼玛县| 罗源县| 德清县| 麻阳| 五指山市| 屯留县| 永胜县| 吉水县| 疏勒县| 灵璧县| 名山县| 赫章县| 改则县| 馆陶县| 新民市| 临汾市| 永清县| 靖宇县| 通城县| 东兰县| 长丰县| 渭源县| 杭锦后旗| 龙泉市| 青冈县| 济阳县| 习水县|