使用apr util中的DBD API

2021-08-30 09:45:44 字數 2239 閱讀 2166

1. 簡介

在apache2.1版本中引入了dbd 框架,dbd提供了乙個統一的、抽象的資料庫操作介面,封裝了不同資料庫之間的介面和實現差異。可以使我們很容易的編寫跨資料庫(coss-database)的程式。

2. 說明

本文的目的是簡單的介紹如何在c開發的程式中開始 使用dbd,而不具體介紹每個api的用法,所有介面的用法在dbd的介面檔案apr-dbd.h中有詳細的注釋。

筆者所用的環境是:

ubuntu-8.04

gcc-4.1.3

3. 安裝apr、apr-util及dbd:mysql驅動

安裝apr-util之前肯定要先安裝apr,安裝過程很簡單:

tar zvxf apr-1.3.3.tar.gz

cd apr-1.3.3

./configure --prefix=/usr/local

make

sudo make install

tar zvxf apr-util-1.3.4.tar.gz

cd apr-util-1.3.4

./configure --prefix=/usr/local --with-apr=/usr/local --with-mysql

make

sudo make install

我們這裡使用mysql資料庫,dbd的mysql驅動是作為乙個dso動態載入的。

配置apr-util時要帶--with-mysql的選項,如果使用sqlite2的資料庫則要帶--with-sqlite2的選項。要使用其他資料庫,輸入./configure --help可以檢視。

4. 如何使用

關於如何使用可以看apr-util專案中對dbd的測試**,它是很好的使用demo。這裡我做一下簡單的介紹。

1. 呼叫

apu_declare(apr_status_t) apr_dbd_init(apr_pool_t *pool)

它主要是建立驅動的hash表,如果驅動是通過dso動態的載入則建立的hash表為空表。

2. 呼叫

apu_declare(apr_status_t) apr_dbd_get_driver(apr_pool_t *pool, const char *name,

const apr_dbd_driver_t **driver)

如果驅動是靜態編譯到apr-util中,則此函式相當於直接從第一步建立的hash表中根據引數name取得driver。如果驅動是使用dso動態加 載,則函式根據引數name找到動態載入的模組,並將模組驅動載入到driver中。以後就可以用這個driver中提供的和具體資料庫相關的操作了。

3. 呼叫

apu_declare(apr_status_t) apr_dbd_open(const apr_dbd_driver_t *driver,

apr_pool_t *pool, const char *params,

apr_dbd_t **handle)

這個函式返回的是乙個對資料庫操作的控制代碼。開啟資料庫後,以後所有對資料庫的操作都是通過這個控制代碼來實現。引數params值得一提,沒有文件專門的說明 這個值應該傳遞什麼,params的值對不同的資料庫傳遞的值也不同。我分析過mysql dbd的驅動**,對於mysql來說這裡要傳的是要開啟資料庫的幾個要素,如:主機名(host),使用者名稱(user),密碼(pass),資料庫名 (dbname)等等,這些資訊組織成乙個鍵值對形式的字串並以delims = " \r\n\t;|," 中的任意一種分割,如:params = "host=localhost;user=root;pass=12345;dbname=test" 。

4. 對資料庫進行操作

如建立乙個表,**如下:

static int create_table(apr_pool_t* pool, apr_dbd_t* handle, const apr_dbd_driver_t* driver)

關於運算元據庫的其他api我不做多餘的介紹,因為apr-dbd.h中已經有非常詳細的注釋了,並且你也可以檢視apr-util中隊dbd的測試程式,它們簡直是使用dbd api入門的教科書,這裡有兩個測試程式,分別是:

1. test/dbd.c 它沒有使用apr的測試框架,直接是把常用的資料庫的操作都做了一遍,使用哪乙個資料庫驅動由你輸入的命令列引數決定。

2 test/testdbd.c 它應用了apr的測試框架,和1差不都,我這裡就不累述了。

apr和aprutil的安裝

apr的作用就不囉嗦了,在安裝有些軟體的時候會設計到apr的依賴,如svn httpd等,下面就分享一下我對apr和aprutil的安裝。第二步 安裝apr tar xvf apr 1.5.2.tar.gz cd apr 1.5.2 configure prefix opt apr 注意這裡可能會出...

apr 與 apr util 的關聯錯誤

編譯安裝apache時出現錯誤,比如 神馬 apr 找不到,apr util找不到,都安裝之後 報什麼 exports.c裡面有重複定義的錯誤,各種極品錯誤,折騰了1個多小時,經過各種測試,終於解決 安裝apr和apr util的時候分別指定了安裝路徑,這樣做是錯誤的,apr util本身就是apr...

shell 中if的使用

shell中if做比較 shell判斷陣列中是否包含某個元素 ary 1 2 3 a 2if a then echo a in ary else echo a not in ary fi比較兩個字串是否相等的辦法是 if test x test x then 這裡的關鍵有幾點 1 使用單個等號 2 ...