本文以MySQL資料庫為例,其他資料類似。
下面介紹ODB的使用原理來說明為什麼會有這麼多步驟:
(1)你自己定義一個C++的Person類.h/.cpp
(2)用安裝的ODB Compiler編譯Person.h得到新的

必選:
<code>作用:這個是MySQL官方提供的用于C開發程式讀寫MySQL提供頭檔案和動态連結庫檔案以及靜态連結庫檔案,跟ODB沒有任何關系。</code>
<code>這個不需要編譯,提供現成的頭檔案和庫檔案。可以用C直接讀寫MySQL資料庫。</code>
不建議用:
後來發現/cpp裡面下載下傳的壓縮檔案中并沒有【mysql_version.h】和【mysql_time.h】而是在/c的C版本包裡有。是以下載下傳了上面/c網址下的包。下載下傳:mysql-connector-c++-noinstall-1.1.6-win32.zip 或者 mysql-connector-c++-noinstall-1.1.6-win64.zip
主要功能:将自定義ODB結構編譯生成标準的.hxx頭檔案和标準的.cxx源檔案。
這個是個bin/odb.exe可執行檔案,免安裝。要想使用這個EXE隻需要打開CMD終端,将目錄切換到此目錄即可執行:
上圖表示odb已經可以使用。
主要作用:官方名稱叫一般運作時庫Common Runtime Library (libodb),odb的主要功能接口都在這個庫裡面提供。這裡面有源代碼和VS工程,編譯完生成的庫檔案即可投入使用。
主要作用:将第三方資料庫接口封裝成統一接口給libodb,進而實作跨資料庫通路。這些運作時庫用VS Building之後會生成lib和dll檔案。
libodb-mysql在編譯的時候需要兩個東西(參考INSTALL檔案):
(1)libodb-2.4.0中編譯生成的頭檔案和連接配接庫
(2)MySQL的用戶端包,也就是【mysql-connector-c-6.1.6-win32.zip】裡面的頭檔案和連接配接庫
直接編譯會因為(1)(2)你沒有提供而報錯:
将libodb的/lib和/odb目錄拷貝到libodb-mysql的工程中覆寫
重新編譯提示缺少mysql-connector-c頭檔案:
将mysql-connector-c-2.4.0中的include和lib目錄拷貝到odb-mysql-2.4.0的工程中覆寫
重新設定工程屬性,編譯,編譯成功:
Debug生成lib【odb-mysql-d.lib】和dll【odb-mysql-d-2.4-vc10.dll】檔案
Release生成lib【odb-mysql-d.lib】和dll【odb-mysql-d-2.4-vc10.dll】檔案
選擇examples版本(以MySQL為例):
将【hello-mysql-vc10】project設定為啟動項目,直接編譯會報錯:error MSB6006: "cmd.exe" exited with code 9009.
這是odb環境變量沒有設定成功的問題,需要将odb.exe路徑設定到系統path變量中(最好重新開機生效)
之後會提示缺少一些頭檔案:主要是libodb的頭檔案、libodb-mysql的頭檔案
其實是需要:LIBODB(odb-d.lib)、LIBODB-<MYSQL>(odb-mysql-d.lib).(LIBMYSQLCLIENT(mysql-connector-c-6.1.6-win32)這個已經被編譯到odblib-mysql中了,是以不需要了)。
頭檔案自己加,庫檔案需要什麼工程裡已經為你寫好了:
由于剛才在編譯libodb-mysql的時候已經将libodb和mysql-connector-c的資源添加過了。
是以現在隻需要将libodb-mysql中的:include、odb、lib這三個目錄靠過來并在example(或者你自己的工程)工程屬性中添加引用即可。
目前項目中的【person.hxx】檔案是一個odb模闆檔案,還不能直接被VS編譯使用,項目中的【person-odb.hxx】、【person-odb.cxx】、【person-odb.ixx】也隻是空引用,打不開,因為這些檔案還不存在,需要odb編譯器編譯之後生成新的.h檔案和.cpp檔案才可以被CPP項目使用
将【person.hxx】拷貝到odb的bin目錄下,cmd執行:odb -d mysql --generate-query --generate-schema person.hxx
執行完生成【person-odb.hxx】、【person-odb.cxx】、【person-odb.ixx】、【person.sql】這四個檔案:
将這四個檔案拷貝到本項目【person.hxx】檔案同級目錄下
用【person.sql】建立資料庫表。
可以成功編譯:
生成的檔案driver.exe在目錄:【F:\程式設計開發\C++\ODB\odb-examples-2.4.0\odb-examples-2.4.0\hello\Debug】下,為了運作exe,需要将運作時庫檔案
libmysql.dll、odb-d-2.4-vc10.dll、odb-mysql-d-2.4-vc10.dll拷貝到此目錄。
執行Start Without Debugging:
2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
請按任意鍵繼續. . .
可以看出程式預設連接配接本機的MySQL服務,并且企圖通路端口:10061。
直接修改代碼,在代碼中寫死連接配接資料庫的資訊:
原來的代碼:
auto_ptr<database> db (create_database (argc, argv));
auto_ptr<odb::database> db (
new odb::mysql::database (
"root" // database login name
,"123456" // database password
,"collect" // database name
,"localhost"
,13306
));
編譯運作:
這個例子可以跑起來其實是需要odb的所有步驟的,其他例子均可仿照這個例子的做法,自己建立的項目引用odb也是如此!奔跑吧,小怪獸!!