unix安裝ODBC
作者:齊亮
本文主要內容是介紹ODBC的簡單原理,以及如何在Linux/Unix下進行ODBC的安裝、配置與編程。
一、 ODBC原理
ODBC 是Open Database Connect 即開放數據庫互連的簡稱,它是由Microsoft 公司於1991 年提出的一個用於訪問數據庫的統一界面標准,是應用程序和數據庫系統之間的中間件。它通過使用相應應用平台上和所需數據庫對應的驅動程序與應用程序的交互來實現對數據庫的操作,避免了在應用程序中直接調用與數據庫相關的操作,從而提供了數據庫的獨立性。
ODBC 主要由驅動程序和驅動程序管理器組成。驅動程序是一個用以支持ODBC 函數調用的模塊,每個驅動程序對應於相應的數據庫,當應用程序從基於一個數據庫系統移植到另一個時,只需更改應用程序中由ODBC 管理程序設定的與相應數據庫系統對應的別名即可。驅動程序管理器可鏈接到所有ODBC 應用程序中,它負責管理應用程序中ODBC 函數與DLL 中函數的綁定。
ODBC 使用層次的方法來管理數據庫,在數據庫通信結構的每一層,對可能出現依賴數據庫產品自身特性的地方,ODBC 都引入一個公共接口以解決潛在的不一致性,從而很好地解決了基於數據庫系統應用程序的相對獨立性,這也是ODBC 一經推出就獲得巨大成功的重要原因之一。
從結構上分,ODBC 分為單束式和多束式兩類。
單束式驅動程序
單束式驅動程序介於應用程序和數據庫之間,像中介驅動程序一樣數據提供一個統一的數據訪問方式。
當用戶進行數據庫操作時,應用程序傳遞一個ODBC 函數調用給ODBC 驅動程序管理器,由ODBC API 判斷該調用是由它直接處理並將結果返回還是送交驅動程序執行並將結果返回。
由上可見,單束式驅動程序本身是一個數據庫引擎,由它直接可完成對數據庫的操作,盡管該數據庫可能位於網絡的任何地方。
多束式驅動程序
多束式驅動程序負責在數據庫引擎和客戶應用程序之間傳送命令和數據,它本身並不執行數據處理操作而用於遠程操作的網絡通信協議的一個界面。
前端應用程序提出對數據庫處理的請求,該請求轉給ODBC 驅動程序管理器,驅動程序管理器依據請求的情況,就地完成或傳給多束驅動程序,多束式驅動程序將請求翻譯為特定廠家的數據庫通信接口(如Oracle 的SQLNet)所能理解的形式並交於接口去處理,接口把請求經網絡傳送給服務器上的數據引擎,服務器處理完後把結果發回給數據庫通信接口,數據庫接口將結果傳給多束式ODBC 驅動程序,再由驅動程序將結果傳給應用程序。
很多程序員已經體會到了在Windows平台下的ODBC的益處,而在Linux/Unix下進行數據庫編程的時候卻不得不根據不同的數據庫來選擇特有的API進行編程,一旦數據庫發生了改變,所有與這些API相關的程序都必須進行修改。其實在Linux/Unix下現在也有了自己的ODBC,可以使我們的數據庫編程就像在Windows平台下一樣簡單。
下面我們開始介紹Linux/Unix下的ODBC:
二、 Linux/Unix下ODBC的安裝:
方法一:
先下載最新的unixODBC源碼包(http://www.unixodbc.org/unixODBC-2.2.1.tar.gz)放到/usr/local下,然後運行下述命令:
tar zxvf unixODBC-2.2.1.tar.gz
cd unixODBC-2.2.1
./configure --prefix=/usr/local/unixODBC-2.2.1 --includedir=/usr/include --libdir=/usr/lib -bindir=/usr/bin --sysconfdir=/etc
make
make install
安裝成功後,unixODBC所需的頭文件都被安裝到了/usr/inlucde下,編譯好的庫文件安裝到了/usr/lib下,與unixODBC相關的可執行文件安裝到了/usr/bin下,配置文件放到了/etc下。
方法二:
下載rpm包進行安裝,我們這裡以Red Hat 7.3為例:
unixODBC-2.2.0-5 RPM for i386(安裝包及源碼包)
(ftp://speakeasy.rpmfind.net/linux/redhat/7.3/en/os/i386/RedHat/RPMS/unixODBC-2.2.0-5.i386.rpm、ftp://ftp.rpmfind.net/linux/redhat/7.3/en/os/i386/SRPMS/unixODBC-2.2.0-5.src.rpm)
unixODBC-devel-2.2.0-5 RPM for i386
(ftp://speakeasy.rpmfind.net/linux/redhat/7.3/en/os/i386/RedHat/RPMS/unixODBC-devel-2.2.0-5.i386.rpm)
直接將unixODBC-2.2.0-5.i386.rpm和unixODBC-devel-2.2.0-5.i386.rpm裝入系統就可以了,命令如下:
rpm -ivh unixODBC-2.2.0-5.i386.rpm
rpm -ivh unixODBC-devel-2.2.0-5.i386.rpm
安裝好以後,所需的各個部分與上面所列的位置相同。
三、 Linux/Unix下ODBC的配置:
運行ODBCConfig程序(在/usr/bin下),如下圖:
圖一:ODBCConfig主窗口
和Windows下的ODBC設置窗口是不是很像?我想大家都能看懂吧。
第一步:安裝數據庫的ODBC驅動程序
Drivers這一欄中用來設置數據庫的驅動程序,點擊Add按鈕,會出現下圖:
圖二:ODBCConfig Driver Properties窗口
Name一欄填入數據庫驅動的名稱,Description是數據庫驅動的描述,Driver是用來選擇數據庫驅動程序的,Setup是用來選擇數據庫驅動安裝程序的,如果你是按照上述安裝方法安裝的,這些程序都放在/usr/lib下,下面是數據庫驅動程序的列表:
數據庫 數據庫驅動程序 數據庫驅動安裝程序
TXT libodbctxt.so libodbctxtS.so
NNTP libnn.so libodbcnnS.so
MiniSQL libodbcmini.so libodbcminiS.so
PostgreSQL libodbcpsql.so libodbcpsqlS.so
MySQL (注釋) libodbcmyS.so
Sybase/MS SQL (注釋) libtdsS.so
Oracle (注釋) liboraodbcS.so
注釋:
MySQL、Sybase/MS SQL和Oracle的數據庫驅動可以在下列網址找到:
MySQL http://www.unixodbc.org/myodbc.html
Sybase/MS SQL http://www.freetds.org
Oracle http://www.easysoft.org
MySQL的驅動程序MyODBC-2.50.39-4 RPM for i386以及源碼包:
ftp://speakeasy.rpmfind.net/linux/redhat/7.3/en/os/i386/RedHat/RPMS/MyODBC-2.50.39-4.i386.rpm
ftp://ftp.redhat.com/pub/redhat/linux/7.3/en/os/i386/SRPMS/MyODBC-2.50.39-4.src.rpm
選擇好驅動程序之後,點擊"√"保存退出。
第二步:設置DSN
DSN分為User DSN、System DSN和File DSN三種,我們以System DSN為例。選中System DSN一欄以後,點擊Add…按鈕就會見到下圖:
圖三:創建DSN選擇數據庫驅動
列表中會列出你已經安裝好的數據庫驅動程序,我這裡只裝了MySQL和PostgreSQL,然後選擇你所要使用的驅動程序,然後點擊OK就會出現下圖:
圖四:DSN的設置
我這裡使用的是MySQL的數據庫驅動,不同的數據庫,這個窗口的內容會有所不同。Name是數據源的名稱,Description是描述,Server可以選擇服務器,如果本機啟動了MySQL就可以選擇localhost,如果Port和Socket有特殊要求,再根據實際情況進行修改,Database是用來選擇數據庫的,下拉菜單不一定包含所有的數據庫,你可以把自己已經創建好的數據庫名稱填寫在這裡。都配置好之後,點擊"√"保存退出。
這樣Linux/Unix下的ODBC數據源就已經設置好了,大家還可以在ODBCConfig程序的Status欄中查看ODBC的使用情況,在Advanced欄中設置是否做日志或者啟動連接池,在About欄中,有一個Linux/Unix ODBC的示意圖,在Credits按鈕中可以看到所有開發者的名字的列表。 ODBCConfig程序中所有有關數據庫驅動程序的信息被放在odbcinst.ini(在/etc下)文件中,有關DSN的信息被放在odbc.ini(在/etc下)文件中,大家有興趣的話,可以自己去觀察一下。
第三步:使用DataManager程序浏覽數據庫
運行DataManager程序之後就可以查看Drivers、System DSN和User DSN這幾項內容,,在浏覽數據庫的時候,可以在右面的SQL欄中輸入SQL語句,然後點擊人形按鈕就可以運行SQL語句,運行結果會在Results一欄中顯示出來,具體情況可以見下圖:
圖五:使用DataManager浏覽數據庫
第四步:使用isql程序查看數據庫
unixODBC還提供了命令台下查看數據庫的程序,這就是isql,用法如下:
isql DSN [UID [PWD]] [options]
DSN 數據源名稱
UID 用戶ID
PWD 用戶密碼
Options:
-b 批處理,沒有提示符的模式
-dx 設置列之間的分隔符為x
-w 將查詢結果輸出為HTML格式
-c 第一行輸出列名
--version 輸出isql的版本號
四、 Linux/Unix下ODBC的編程:
1、使用unixODBC提供的ODBC API進行編程:
在進行編程之前,我們來看一下ODBC API中的常用數據類型與我們在C語言中使用的數據類型的對應關系:
類型標識符 ODBC數據類型 C數據類型
SQL_C_CHAR SQLCHAR * unsigned char *
SQL_C_SSHORT SQLSMALLINT short int
SQL_C_USHORT SQLUSMALLINT unsigned short int
SQL_C_SLONG SQLINTEGER long int
SQL_C_FLO