天天看點

一個常見資料庫操作錯誤的分析(二)

進一步查找資料,發現在使用Java連接配接SQL Server或者Access資料庫時也會有類似的問題。其中一位網友的問題描述如下:

我用JDBC-ODBC橋連,代碼應該是沒問題的,ODBC資料源也是配置成功了的。但就是有異常:

[Microsoft][ODBC驅動程式管理器]未發現資料源名稱并且未指定預設驅動程式

我百思不得其解,上網查資料,GOOGLE搜,還是沒解決問題。此時,我已經搞了2天了,還是沒搞好。第三天,上網看到用SQL Server的驅動來連,不用JDBC-ODBC,這次是成功了的,但現在還是沒弄清楚用我這裡用JDBC-ODBC連就不行。

附上:JDBC連SQL Server資料庫的方法。

首先要下載下傳SQL Server 2000 Driver for JDBC SP3,在微軟的觀網上有( http://www.microsoft.com/downloads/details.aspx?FamilyID=07287b11-0502-461a-b138-2aa54bfdc03a&displaylang=en)。還要為SQL Server 2000資料庫打上SP3更新檔。(http://www.microsoft.com/china/sql/downloads/sp3.asp)。

将SQL Server 2000 Driver for JDBC SP3安裝後,會在它的lib目錄下有三個包:msutil.jar,msbase.jar,mssqlserver.jar

可以在環境變量中的CLASSPATH中添加這三個包:

建立個JDBC_HOME = D:/Microsoft SQL Server 2000 Driver for JDBC(這是你安裝Driver的目錄)

CLASSPATH = .;%JDBC_HOME%/lib/msbase.jar;%JDBC_HOME%/lib/mssqlserver.jar;%JDBC_HOME%/lib/msutil.jar

準備工作就結束了,在程式中和JDBC-ODBC橋連差不多,先是注冊你的驅動,

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").netInstance();

然後建立連接配接

String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Coffees";

這裡的localhost是你的資料庫伺服器所在的IP位址,或者主機名。DatabaseName是你想要連接配接的資料庫。

總結:“看來jdbc-odbc橋是不行,要用jdbc for sql server”

看來有必要研究一下Windows平台上資料庫連接配接的知識了。

[ODBC API通路資料庫]

在沒有ODBC以前

請允許我将那時候成為第二黑暗時代,第一黑暗時代是沒有資料庫的時代。

ODBC的出現結束了資料庫開發的無标準時代。在沒有ODBC以前不同的資料庫的開發所采用的标準是不統一的。一般來講不同的資料庫廠商都有自己的資料庫開發包,這些開發包支援兩種模式的資料庫開發:預編譯的嵌入模式(例如Oracle的ProC,SQL Server的ESQL)和API調用(例如Oracle的OCI)。

對于一個開發人員來講使用預編譯方式開發是極其痛苦的,我就有過這樣的經曆,所有的SQL語句要寫在程式内部,并且遵守一定的規則,然後由資料庫廠商的預編譯工具處理後形成C代碼,最後由C編譯器進行編譯。預編譯的最大問題就在于無法動态的生成SQL語句,我想作為一個程式員是很難接受的。

接下來的是使用API進行開發,和預編譯相比算是前進了一大步。資料庫廠商提供了開發包,你通過各種API函數就可以連接配接資料庫,執行查詢、修改、删除,操縱光标,執行存儲過程等。對于程式員來講有了更多的自由,而且可以建立自己的開發包。但是這一切的開發隻能針對同一種資料庫。

Oracle的OCI是一個非常優秀的C語言開發包,在ODBC中就在很多地方參照了OCI的設計。

ODBC介紹

ODBC(Open Database Connectivity)是由微軟公司提出的一個用于通路資料庫的統一界面标準,随着客戶機/伺服器體系結構在各行業領域廣泛應用,多種資料庫之間的互連通路成為一個突出的問題,而ODBC成為目前一個強有力的解決方案。ODBC之是以能夠操作衆多的資料庫,是由于目前絕大部分資料庫全部或部分地遵從關系資料庫概念,ODBC看待這些資料庫時正是着眼了這些共同點。雖然支援衆多的資料庫,但這并不意味ODBC會變得複雜,ODBC是基于結構化查詢語言(SQL),使用SQL可大大簡化其應用程式設計接口(API),由于ODBC思想上的先進性,而且沒有同類标準或産品與之競争,因而越來越受到衆多廠家和使用者的青睐。目前,ODBC已經成為客戶機/伺服器系統中的一個重要支援技術。

在1994年時ODBC有了第一個版本,這種名為Open Data Base Connection(開放式資料庫互連)的技術很快通過了标準化并且得到各個資料庫廠商的支援。ODBC在當時解決了兩個問題,一個是在Windows平台上的資料庫開發,另一個是建立一個統一的标準,隻要資料廠商提供的開發包支援這個标準,那麼開發人員通過ODBC開發的程式可以在不同的資料庫之間自由轉換。這對開發人員來說的确值得慶賀。

ODBC參照了X/OpenData Management: SQL Call-Level Interface和ISO/ICE1995 Call-Level Interface标準,在ODBC版本3.X中已經完全實作了這兩個标準的所有要求。是以本書所有内容都基于ODBC 3.0以上版本。

最開始時支援ODBC的資料庫隻有SQL Server,ACCESS,FoxPro,這些都時微軟的産品,他們能夠支援ODBC一點也不奇怪,但是那時候Windows的圖形界面已經成為了用戶端軟體最理想的載體,是以各大資料廠商也在不久後釋出了針對ODBC的驅動程式。

在Windows 3.X和Windows 95的時候ODBC并不作為系統的組成部分出現,使用前必須另行安裝。但到了Windows 98的時候,當你安裝好作業系統後,ODBC不需要另行安裝了,因為它已經成為了作業系統的一部分。這對很多拒絕ODBC的人來說又少了一個借口。

作為一個程式員,至少是我,我實在找不出什麼理由不為ODBC歡呼。此外ODBC的結構很簡單和清晰,學習和了解ODBC的機制和開發方法對學習ADO等其他的資料庫通路技術會有所幫助。

ODBC結構

圖2.1顯示了ODBC的結構。

圖2.1

應用程式(Application)

應用程式本身不直接與資料庫打交道,主要負責處理并調用ODBC函數,發送對資料庫的SQL請求及取得結果。

驅動程式管理器(Driver Manager )

驅動程式管理器是一個帶有輸入程式的動态連結庫(DLL),主要目的是加載驅動程式,處理ODBC調用的初始化調用,提供ODBC調用的參數有效性和序列有效性。

驅動程式(Driver)

驅動程式是一個完成ODBC函數調用并與資料庫互相影響的DLL,這些驅動程式可以處理對于特定的資料的資料庫通路請求。對于應用驅動程式管理器送來的指令,驅動程式再進行解釋形成自己的資料庫所能了解的指令。驅動程式将處理所有的資料庫通路請求,對于應用程式來講不需要關注所使用的是本地資料庫還上網絡資料庫。

ODBC的一緻性

ODBC接口的優勢之一為互操作性,程式設計員可以在不指定特定資料源情況下建立ODBC應用程式。從應用程式角度方面,為了使每個驅動程式和資料源都支援相同的ODBC函數調用和SQL語句集,ODBC接口定義了一緻性級别,即ODBC API一緻性和ODBC SQL文法一緻性。SQL一緻性規定了對SQL語句文法的要求,而API一緻性規定了驅動程式需要實作的ODBC函數。一緻性級别通過建立标準功能集來幫助應用程式和驅動程式的開發者,應用程式可以很容易地确定驅動程式是否提供了所需的功能,驅動程式可被開發以支援應用程式選項,而不用考慮每個應用程式的特定請求。

[使用ODBC進行資料庫開發基本知識介紹]

建立ODBC DSN

DSN(Data Source Name)是用于指定ODBC與相關的驅動程式相對應的一個入口,所有DSN的資訊由系統進行管理,一般來講當應用程式要使用ODBC通路資料庫時,就需要指定一個DSN以便于連接配接到一個指定的ODBC驅動程式。在控制台中打開ODBC管理器,回看到如圖2.2的界面。

圖2.2

DSN共分為三類:

l          使用者DSN:對目前登入使用者可見,隻能夠用于目前計算機。

l          系統DSN:對目前系統上所有使用者可見,包括NT中的服務。

l          檔案DSN:DSN資訊存放在檔案中,對能夠通路到該檔案的使用者可見。

一個使用Access資料庫的DSN中的資訊如下:

[ODBC]

DRIVER=Driver do Microsoft Access (*.mdb)

UID=admin

DefaultDir=C:/www.vchelp.net/DB

DBQ=C:/www.vchelp.net/DB/chat.mdb

對于檔案DSN來講這些資訊存放在檔案中,對于使用者DSN和系統DSN來講這些資訊存放在系統資料庫内。你可以通過建立檔案DSN來檢視每種DSN對應的資訊内容。

下面的例子将告訴你如何添加一個SQL Server的DSN。

圖2.3

圖2.3中的四個步驟分别是:

l          選擇SQL Server作為驅動程式

l          輸入DSN名稱和SQL Server伺服器位址或别名

l          輸入使用者和密碼進行連接配接

l          選擇預設資料庫并完成

使用ODBC所需要的檔案

你需要下面的檔案:

l          sql.h:包含有基本的ODBC API的定義。

l          sqlext.h:包含有擴充的ODBC的定義。

l          odbc32.lib:庫檔案。

這些檔案在VC6,VC7都已經随開發工具提供了,不需要另外安裝。

此外所有的ODBC函數都以SQL開始,例如SQLExecute,SQLAllocHandle。

注意:以上内容主要摘錄自http://www.vchelp.net/wyy/wyy.asp

下一次進一步分析還有什麼其他的方法