青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

嵌入式靜態、動態SQL

Posted on 2009-08-03 15:16 Prayer 閱讀(1017) 評論(0)  編輯 收藏 引用 所屬分類: DB2
您是 DB2 應用程序開發新手嗎?有了此實用指南,您將立刻掌握 DB2 的習慣與文化。

如果您已經習慣了基于一種數據庫開發應用程序,那么切換到不同的數據庫就像是到本國的另一個地區去旅行一樣。基本語言雖然差不多,但是很可能不熟悉當地的方言。

當與那些將自己的應用程序從其他供應商的產品遷移到 DB2 Universal Database(DB2 UDB)的人們一起工作時,我發現如果他們一開始能掌握 DB2 環境特有的一些基本概念和術語,就可以取得更大的成功。

這里是特定于 DB2 應用程序開發的幾個關鍵概念的快速指南。關于更詳細的探索,請參閱 DB2 Application Development Certification Guide(Prentice Hall,2000 年)、DB2 Application Development Guide(可在 ibm.com/software/ data/db2/udb/ ad/v7/adg.html上獲取)和 Application Building Guide( ibm.com/software/ data/db2/java/ v6/abg.html)。

嵌入式 SQL

DB2 通過其預編譯器支持 C、C++、Java(SQLJ 和 Java 數據庫連接)、COBOL 和 FORTRAN。您可以采用其中一種宿主編程語言編寫包含 SQL 語句的應用程序。嵌入在應用程序中的 SQL 語句提供到數據庫的接口,宿主語言為應用程序的執行提供必要的支持。而 DB2 預編譯器可以將 SQL 語法直接轉換為 DB2 運行時服務應用程序編程接口(API)調用。





回頁首


靜態 SQL

嵌入式靜態 SQL 和嵌入式動態 SQL 都要用到 DB2 預編譯處理。然而,在已知數據庫將被查詢哪些問題時(例如,在航空訂票系統中),就可以使用靜態 SQL 語句。對于靜態 SQL 語句,在進行預編譯之前就知道 SQL 語句的類型以及表的列名。而未知的元素是語句進行搜索或更新的特定數據值,并且這些值是用宿主語言變量來表示的。宿主變量包含的是數據,而不是 SQL 語句。在運行應用程序之前要準備或者構建靜態 SQL 語句。

清單 1 展示了 C 程序中的樣本嵌入式靜態 SQL。請注意容納數據的宿主變量(例如, EXEC SQL FETCH c1 INTO :pname, :dept; )和由 EXEC SQL 為預編譯目的而分隔的 SQL 語句的用法。

為了使用包含嵌入式 SQL 的程序,不僅要進行典型的準備步驟(編譯、鏈接和運行),還必須執行 DB2 預編譯和綁定步驟(見 圖 1)。而這些步驟將為數據庫管理器創建執行時需要的程序包:

1. 預編譯:將嵌入式 SQL 源語句轉換為數據庫管理器可使用的形式。

2. 編譯和鏈接:創建必要的目標模塊。

3. 綁定:創建運行程序時數據庫管理器將使用的程序包。

預編譯器(帶有 BINDFILE 和 PACKAGE 選項的 PREP 命令)將嵌入式 SQL 語句轉換為注釋。接著,它將生成宿主編譯器可處理的 DB2 運行時 API 調用。然后,預編譯器將生成相應信息(存儲在程序包或綁定文件中),數據庫管理器將使用這些信息對數據庫執行 SQL 語句。

預編譯器選項 BINDFILE 創建一個綁定文件,用于存儲創建程序包所必要的數據。

預編譯器選項 PACKAGE 進行隱式綁定并且將程序包存儲在已連接的數據庫中。程序包是存儲在數據庫中的一種對象,其中包括執行單個源文件中的特定 SQL 語句所需的信息,這類信息又被稱為存取路徑。


清單 1:帶有嵌入式靜態 SQL 的 C 程序


圖 1:靜態 SQL 的 DB2 預編譯和綁定步驟





回頁首


動態 SQL

清單 2 展示了帶有嵌入式動態 SQL 的樣本 C 代碼。請注意嵌入式動態 SQL 的用法,它是通過宿主變量來容納 SQL 語句的 —— 例如, strcpy (qstring, "INSERT INTO name VALUES (?,?)" ); 。該行代碼將 SQL 語句存放在 qstring 中。請注意,其中存放的不是數據,而是獲取數據的命令。這些語句將由 EXEC SQL PREPARE s1 FROM :qstring; 語句在運行時進行預編譯。

注意,嵌入式動態 SQL 是包含在嵌入式靜態 SQL 應用程序之中的。 清單 2 中, EXEC SQL PREPARE s1 FROM :qstring; EXEC SQL EXECUTE s1 USING :trialname, :trialvalue; 都是動態語句。因此,對于代碼中的靜態 SQL 片斷要采取相同的程序準備步驟。但是,動態 SQL 需要增加 PREPAREEXECUTE 語句,以便在程序運行期間創建存取路徑和執行 SQL 語句(見 圖 2)。


清單 2: 帶有嵌入式動態 SQL 的 C 程序


圖 2:動態 SQL 的 DB2 預編譯和綁定步驟

PREPARE 從字符串形式的語句創建可執行的 SQL 語句。可執行形式被稱為已準備語句。而字符串形式則被稱為字符串語句。 EXECUTE 語句執行已準備的 SQL 語句。 EXECUTE IMMEDIATE 將字符串形式的語句準備為可執行形式的 SQL 語句,執行該 SQL 語句,并且不使用宿主變量。

既然已經理解了靜態和動態 SQL,現在就讓我們用 JDBC 和 SQLJ 將它們與 DB2 編程聯系起來。





回頁首


JAVA 方法

Java 以支持“一次編寫,到處運行”的程序而著名。那是如何實現的呢?Java 可以分兩步進行編譯和執行。首先,將 Java 代碼編譯成與機器無關的 字節碼(bytecode)。字節碼是用于理想化 Java 虛擬機的匯編語言。第二步,由運行系統執行該字節碼。運行系統既可以是一個解釋器(仿真器),也可以是一個即時編譯器,它首先將字節碼編譯成本機碼,然后執行編譯結果。該過程的兩個步驟可以在完全獨立的平臺上實現。

Java 程序可以從獨立的應用程序、Web 瀏覽器中運行的 applet 或者由 Web 應用程序服務器(如 IBM WebSphere)運行的 servlet 等訪問 DB2 數據庫。

Java 應用程序在相同的位置存儲并執行。Java applet 是存儲在 Web 服務器上并在本地 PC 瀏覽器中執行的 Java 程序。Java servlet 是在應用程序服務器上存儲并執行而在本地瀏覽器中查看執行結果的 Java 程序。





回頁首


數字游戲:JDBC

Java 數據庫連接(JDBC)的版本號和所有與之相關的東西都是十分混亂的。首先,JDBC 有不同的版本。然后,JDBC 驅動程序有不同的類型,可以被不同版本的 Java 使用。每個 Java 版本都有自己的別名和 Java 開發工具箱(JDK)。

DB2 UDB 支持 JDBC 1.2、2.0 和 2.1 版(存在一些操作系統限制)。JDBC 版本使用不同類型的 JDBC 驅動程序。而 JDBC 驅動程序將充當接口,以允許將 JDBC 實現的通用函數和方法轉換為數據庫特定調用。JDBC Type 1 驅動程序已經構建于 Java 中并且提供了 JDBC-ODBC 橋。JDBC Type 2 驅動程序是應用程序驅動程序,需要通過本地 DB2 客戶機來執行對遠程數據庫的連接。JDBC Type 3 是網絡驅動程序,是一個純 Java 實現,它需要與提供 DB2 JDBC applet 服務器的中間件交流。JDBC Type 4 驅動程序也是一個純 Java 實現,它還帶有分布式關系型數據庫體系結構(DRDA)應用程序請求功能。使用 JDBC Type 4 驅動程序的應用程序不需要為連接與 DB2 客戶機交互。

無論使用哪種版本的 JDBC 都有相關的 JDK 和 Java 運行時環境。關于該主題的更多細節,請參閱 DB2 開發者園地中 Paul Zikopoulos 所寫的文章“An Overview of DB2 and Java Database Connectivity”,可在 http://www.ibm.com/developerworks/cn/dmdd/library/techarticles/0307zikopoulos/0307zikopoulos.shtml 上在線獲得。





回頁首


JAVA 程序

DB2 有編寫動態 SQL 程序的 JDBC 驅動程序。有了 JDBC API,就不必進行預編譯。JDBC API 是核心 Java API 標準的組成部分,也是 Java JDK 必不可少的一部分。JDBC 沒有在 Java 代碼中直接嵌入 SQL。JDBC 允許您編寫對數據庫進行動態 SQL 調用的 Java 程序。 它實現了一組方法(類似于 ODBC),以允許將 SQL 語句傳遞給數據庫并且操縱結果。

JDBC 由一個高級 API 和多個用于連接不同數據庫的低級驅動程序組成。它指定 Java 接口、類和異常,以支持連接、數據結果集處理,等等。

清單 3 展示了如何編寫使用 JDBC 應用程序驅動程序訪問 DB2 數據庫的 Java 應用程序。編寫 JDBC 應用程序與編寫使用 CLI 訪問數據庫的 C 應用程序相似。在創建使用 JDBC 接口的 Java 應用程序的時候,要導入 java.sql 包以及根據 Java 規范調用方法。


清單 3:使用 JDBC 應用程序驅動程序訪問 DB2 數據庫的 Java 應用程序

清單 3 中的 Java 程序導入適當的 Java 包和類,加載適當的 JDBC 驅動程序,連接由 JDBC 規范中所定義的 URL 指定其位置的數據庫,將 SQL 語句傳遞給數據庫,接收結果并關閉連接。

您不必預編譯或者綁定 JDBC 應用程序。在給程序編碼之后,就像對任何其他 Java 程序一樣編譯它,要使用 JDK 中的 javac 編譯器將基于 JDBC 的 Java 程序編譯成 Java 字節碼。





回頁首


JAVA SQLJ

SQLJ 是一組對核心 Java 類的 ANSI 標準擴展,提供了更簡單的編程模型并支持創建靜態 SQL。在編譯產生 Java 源代碼之前,還必須用 SQLJ 轉換器轉換 SQLJ 源文件。

DB2 有一個 SQLJ 驅動程序,用于在 Java 代碼中嵌入靜態 SQL 語句。SQLJ API 也需要進行類似于預編譯(轉換)的處理。這些概念與我們在嵌入式靜態 SQL 和嵌入式動態 SQL 小節中所討論的十分相似。

SQLJ API 應用程序將 JDBC 用作連接數據庫和處理 SQL 錯誤等工作的基礎,但還可以在 SQLJ 源文件中包含嵌入式靜態 SQL 語句。

SQLJ 中的靜態 SQL 語句出現在 SQLJ 子句中。SQLJ 子句是一種機制,Java 程序中的 SQL 語句通過此機制與數據庫通信。SQLJ 轉換器(類似于預編譯器)通過 SQLJ 子句的結構(以標志 #sql 開始并以分號結束)以將其與 SQL 語句相區別。嵌入式 SQL 語句的參數由出現在 SQL 語句中的宿主變量來傳遞,并以冒號前綴開始。

清單 4 展示了如何編寫使用 JDBC 應用程序驅動程序訪問 DB2 數據庫的 SQLJ 應用程序。SQLJ 應用程序導入適當的 Java 包和類,加載適當的 JDBC 驅動程序,并使用 DB2 子協議(subprotocol)連接到由 JDBC 規范中所定義的 URL 指定其位置的數據庫。


清單 4

DB2 SQLJ 程序準備需要三個步驟:

1. 運行 SQLJ 轉換器。SQLJ 轉換器類似于用于支持其他語言(如 C)中的嵌入式靜態 SQL 的預處理器。它負責從源文件中提取嵌入式 SQL 命令并將之替換為對 SQLJ 運行時庫的調用。其結果就是已修改的可使用 Java 編譯器進行編譯的 Java 源代碼程序(.java 文件),以及包含程序中 SQL 操作信息的零個或多個 SQL 配置文件。

2. 使用 javac 命令編譯由轉換器輸出的已修改的 Java 源代碼。這將產生包含 Java 字節碼的一個或多個 .class 文件。

3. 為 DB2 定制 SQLJ 配置文件。配置文件是與供應商無關的,因此,必須定制它們。默認情況下,SQLJ 配置文件將 .ser 作為擴展名。定制過程將通用的 SQLJ 配置文件轉換為 DB2 特定的綁定文件,可通過將綁定文件綁定到程序包來將DB2 特定的綁定文件綁定到 DB2。

參考資料

IBM Software Migration Project Office
ibm.com/solutions/ softwaremigration

DB2 UDB Programming Fastpath Course(免費)
ibm.com/software/ data/db2/ct10crs





回頁首


達到熟練

如果您正計劃將應用程序從其他數據庫環境遷移到 DB2,就需要掌握一些特定于 DB2 的概念。本文只是作為一個簡介。我提及的那些出版物提供了更加完整的教學。如果您已經是一個熟練的開發者,那么將發現到 DB2 的轉換是十分平坦的。



關于作者

 

Debra Eaton 是 IBM 的 Software Migration Project Office 團隊的軟件信息技術專家。可通過 deaton@us.ibm.com與她聯系。


http://www.ibm.com/developerworks/cn/data/library/techarticles/mag_02q2eaton/eaton.html
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲视频一区二区| 欧美大色视频| 亚洲福利视频一区二区| 久久午夜电影网| 久久综合中文字幕| 欧美成人免费全部| 亚洲免费观看高清完整版在线观看熊| 最新国产成人av网站网址麻豆| 亚洲国产欧美一区| 一区二区三区欧美日韩| 亚洲欧美日韩成人| 久久综合给合久久狠狠狠97色69| 女女同性精品视频| 欧美亚洲成人免费| 国语自产精品视频在线看8查询8| 亚洲国产一成人久久精品| 一区二区三区免费网站| 欧美在线视频二区| 亚洲福利免费| 亚洲综合首页| 免费在线国产精品| 国产欧美一区二区白浆黑人| 尤物视频一区二区| 亚洲欧美日韩精品久久奇米色影视 | 亚洲免费高清| 欧美亚洲免费在线| 欧美经典一区二区三区| 国产精品永久入口久久久| 亚洲精品日韩在线| 久久久亚洲一区| av成人免费观看| 欧美不卡三区| 韩国自拍一区| 欧美一级精品大片| 一本色道久久综合狠狠躁篇的优点 | 国产精品久久久久久五月尺| 国产视频一区二区三区在线观看| 亚洲人精品午夜| 久久九九国产| 亚洲无线观看| 欧美激情精品久久久久久大尺度| 国产女人18毛片水18精品| 亚洲日韩视频| 欧美成人蜜桃| 久久黄色小说| 国产一区导航| 久久精品官网| 欧美在线电影| 国产日韩欧美在线看| 亚洲色图在线视频| 91久久久精品| 欧美日本久久| 99精品国产福利在线观看免费| 乱中年女人伦av一区二区| 亚洲欧美中日韩| 国产情人节一区| 午夜精品久久久久久久男人的天堂| 亚洲激情成人网| 老司机午夜精品| 一区二区视频欧美| 久久经典综合| 久久精品一二三区| 怡红院精品视频在线观看极品| 久久精品男女| 亚洲欧美电影院| 国产人成精品一区二区三| 久久福利影视| 欧美中文字幕在线| 在线精品视频免费观看| 久久国产天堂福利天堂| 午夜精品999| 好看的日韩av电影| 亚洲成人资源网| 欧美激情aⅴ一区二区三区 | 午夜国产精品影院在线观看 | 亚洲欧美不卡| 国产精品99久久久久久久久久久久| 欧美日韩国产123| 一区二区国产在线观看| 中文日韩在线| 国内精品久久久久久久影视麻豆 | 欧美午夜在线视频| 亚洲欧美日韩国产一区二区三区| 亚洲一区二区视频| 黄色在线一区| 亚洲国产成人久久综合一区| 欧美日韩在线视频一区二区| 亚洲综合日本| 亚洲自拍三区| 蜜桃av综合| 狼狼综合久久久久综合网| 在线看视频不卡| 亚洲人被黑人高潮完整版| 欧美日韩成人网| 久久久精品tv| 欧美精品色网| 久久手机免费观看| 欧美美女操人视频| 久久久一区二区| 欧美三级精品| 裸体歌舞表演一区二区| 国产精品xxxxx| 欧美成人精品1314www| 国产精品成人免费| 女人天堂亚洲aⅴ在线观看| 欧美三级网页| 亚洲第一在线综合网站| 国产欧美高清| 日韩一区二区福利| 亚洲啪啪91| 欧美一区深夜视频| 亚洲免费在线观看视频| 麻豆精品在线观看| 欧美在线一二三四区| 欧美日韩一区二区三区高清| 久久一区国产| 国产精品视区| 99视频有精品| 亚洲精品久久久久中文字幕欢迎你| 亚洲性图久久| 夜夜爽夜夜爽精品视频| 狂野欧美激情性xxxx欧美| 久久九九热免费视频| 国产精品日韩一区二区| 日韩性生活视频| av成人免费在线观看| 久久久久国产精品一区三寸| 亚洲男人影院| 国产精品成人av性教育| 亚洲黄色片网站| 日韩网站免费观看| 美女精品国产| 欧美黄色片免费观看| 亚洲福利小视频| 久久午夜激情| 亚洲第一天堂无码专区| 国产精品久久久久毛片软件| 日韩天堂在线视频| 国产精品99久久99久久久二8| 欧美理论电影在线观看| 亚洲精品久久久蜜桃| 亚洲欧洲日韩在线| 牛牛精品成人免费视频| 亚洲国产成人精品女人久久久| 亚洲第一色在线| 久久久噜噜噜久久中文字免| 欧美成人亚洲成人日韩成人| 精品av久久久久电影| 欧美一区激情| 亚洲国产精品久久91精品| 久久视频免费观看| 精品成人a区在线观看| 午夜一区不卡| 久久人人爽人人爽爽久久| 国产综合色产| 另类图片综合电影| 亚洲福利小视频| 日韩天堂在线观看| 欧美私人啪啪vps| 午夜精品在线看| 欧美岛国在线观看| 亚洲毛片视频| 欧美色图天堂网| 久久国产精品一区二区三区四区| 久久影音先锋| 亚洲日本一区二区| 欧美日韩精品一二三区| 日韩午夜一区| 老**午夜毛片一区二区三区| 一区二区三区中文在线观看| 欧美极品在线播放| 亚洲一区二区三区视频| 午夜亚洲视频| 韩国三级电影久久久久久| 蜜桃av一区二区| 中日韩高清电影网| 久久全球大尺度高清视频| 99精品国产高清一区二区| 欧美色一级片| 麻豆精品视频| 亚洲综合社区| 91久久在线视频| 久久精品成人欧美大片古装| 亚洲高清在线精品| 国产视频在线观看一区二区| 欧美男人的天堂| 久久婷婷综合激情| 亚洲一区二区三区久久| 亚洲精品国偷自产在线99热| 久久久噜噜噜久噜久久| 亚洲免费在线观看视频| 日韩亚洲视频| 亚洲精品免费在线播放| 狠狠久久亚洲欧美| 国产午夜精品视频| 欧美三级中文字幕在线观看| 欧美ed2k| 美女日韩在线中文字幕| 久久精品国产69国产精品亚洲| 亚洲影音一区|