unixODBC介紹
时间:2007-01-16 来源:darrenshen
unixODBC介紹
ODBC(Open DataBase Connectivity)是一個跨平台的標準介面,從1990年代開始推行以來,一直廣為業界所使用,即使如今有ADO或JDBC等新的標準,在業界中卻仍時常見到這種界面。即是因為推廣的時間久及開放式的架構,讓用戶已經習慣且易於去使用它了。
在Windows中,透過ODBC Driver Manager,各家資料庫可個自保留自己的Native Driver,然後使用一層轉接接口,將相對應的ODBC Call轉化成自己的Native API Call;但在User的角度而言,這兩者在外觀上是完全相同的,而各家資料庫則需負責將標準的ODBC Call,轉換成自己獨特的Native Call。
這樣的使用方式,讓ODBC在推出不久,即廣為用戶所接受,User也都習慣在ODBC Driver Manager中註冊自己的Driver,及設定相關的DSN(Data Source Name)。
這樣方便的設計,在Linux中,卻一直欠缺相同的機制;使得當要使用各式語言去連接資料庫時,便得依該語言的特性去重build一版可呼叫Native Call的模組(module),而一旦Build完後,若當中需要一些變動(如版本昇級),常常就要重build一次,這樣的設計使得Linux在使用資料庫時,極為不便!!
有鑑於此,便有一unixODBC的組織嚐試在Linux底下,建立類似ODBC Driver Manager的機制。此一機制與ODBC Driver Manager的功能相仿,便是要能提供Runtime的動態變換功能,讓AP可以透過ODBC Driver Manager,動態地載入不同的資料庫Driver,透過這樣的方式去連接資料庫。
如今,許多Distribution廠商都已經將unixODBC列為標準安裝的套件,而愈來愈廣為人知,本文即是要安裝unixODBC,並利用PHP去連接DBMaker 4.2資料庫,並由此來看看使用unixODBC所帶來的方便性。有關unixODBC的其他說明,請參閱官方網站。
安裝unixODBC
接下來談到本文的主角-unixODBC,由於多數人已習慣RedHat的rpm安裝方式,故本文會使用rpm來安裝,至於若要自行build者,請參閱unixODBC的官方網站。
首先至官方網站中取得最新的unixODBC package,本文使用的是2.2.3-6的版本。
接著,我們使用rpm將unixODBC安裝上去:
[root@support tmp]# rpm -ihv unixODBC-2.2.3-6.i386.rpm warning: unixODBC-2.2.3-6.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e Preparing... ########################################### [100%] [root@support RPMS]# rpm -ql unixODBC|more<==檢查一下到底安裝了那些檔案! /etc/odbc.ini <==這是安裝DSN的檔案,本文的重點 /etc/odbcinst.ini <==這是Driver Manager所放置的Driver設定區,亦為本文重點 /usr/bin/dltest /usr/bin/isql /usr/bin/iusql /usr/bin/odbcinst /usr/bin/odbctest /usr/lib/libboundparam.so.1 /usr/lib/libboundparam.so.1.0.0 /usr/lib/libesoobS.so.1 /usr/lib/libesoobS.so.1.0.0 /usr/lib/libgtrtst.so.1 /usr/lib/libgtrtst.so.1.0.0 /usr/lib/libnn.so.1 /usr/lib/libnn.so.1.0.0 /usr/lib/libodbc.so /usr/lib/libodbc.so.1 /usr/lib/libodbc.so.1.0.0 ............
在設定Windows的Driver Manager時,在加上一個新的DSN時,資料庫廠商通常都提供一個安裝程式,讓使用者可以登記如Server位置、Port Number、須要使用什麼認證…等等。這個畫面就是上述的「Setup」,由於DBMaker目前在unixODBC中並未提供安裝畫面,故須暫時將它關閉;待之後的版本提供後,再把它開啟。
設定ODBC DSN
接下來便是設定Data Source Name了(DSN),在Windows時,有所謂的System DSN及User DSN,其實主要的差別便是System DSN是可為所有User所存取,而User DSN則只能為某特定user存取;當login成另一位user時,便看不到原來User登錄的DSN了!
而在unixODBC中,則是使用不同位置的檔案,來存放System DSN及User DSN,在我們的環境中,System DSN會放在/etc/odbc.ini,而User DSN則會放在個別User的家目錄/.odbc.ini。
由於我們要使用Web的PHP來連接DBMaker,所以要設定System DSN,以下是我們所放置的內容:
[dbsample4] Description = Database for dbsample4 Driver = DBMaker 4.2 Driver <==注意,此處須與之前Driver設定的名稱相同 Database = dbsample4 <== 資料庫名稱 Host = localhost <== server所在位置 Port = 2450 <== 埠位置 User = SYSADM <==使用名稱(DBMaker預設所使用的管理者名稱) Password = <==使用密碼 (DBMaker預設所使用的管理者密碼) 當然您可以使用不同的帳號/密碼登入,但此處為方便,使用DBMaker所預設建立的管理者帳號SYSADM,及預設的密碼(空白)
測試連接
接下來,我們使用unixODBC所附的isql來連接dbsample4的資料庫,isql的標準語法為: isql DSN [UID [PWD]] [options] 我們直接用下方命令來連接資料庫: [root@support RPMS]# isql dbsample4 sysadm +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select * from SYSTABLE;