天天看點

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

本文以MySQL資料庫為例,其他資料類似。

下面介紹ODB的使用原理來說明為什麼會有這麼多步驟:

(1)你自己定義一個C++的Person類.h/.cpp

(2)用安裝的ODB Compiler編譯Person.h得到新的

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)
【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

必選:

<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 - C++ 通路資料庫的利器--Hello World On Windows(Version-24)
【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

上圖表示odb已經可以使用。

主要作用:官方名稱叫一般運作時庫Common Runtime Library (libodb),odb的主要功能接口都在這個庫裡面提供。這裡面有源代碼和VS工程,編譯完生成的庫檔案即可投入使用。

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)
【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

主要作用:将第三方資料庫接口封裝成統一接口給libodb,進而實作跨資料庫通路。這些運作時庫用VS Building之後會生成lib和dll檔案。

libodb-mysql在編譯的時候需要兩個東西(參考INSTALL檔案):

(1)libodb-2.4.0中編譯生成的頭檔案和連接配接庫

(2)MySQL的用戶端包,也就是【mysql-connector-c-6.1.6-win32.zip】裡面的頭檔案和連接配接庫

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

直接編譯會因為(1)(2)你沒有提供而報錯:

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

将libodb的/lib和/odb目錄拷貝到libodb-mysql的工程中覆寫

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

重新編譯提示缺少mysql-connector-c頭檔案:

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

将mysql-connector-c-2.4.0中的include和lib目錄拷貝到odb-mysql-2.4.0的工程中覆寫

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

重新設定工程屬性,編譯,編譯成功:

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

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】檔案

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

選擇examples版本(以MySQL為例):

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

将【hello-mysql-vc10】project設定為啟動項目,直接編譯會報錯:error MSB6006: "cmd.exe" exited with code 9009.

這是odb環境變量沒有設定成功的問題,需要将odb.exe路徑設定到系統path變量中(最好重新開機生效)

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

之後會提示缺少一些頭檔案:主要是libodb的頭檔案、libodb-mysql的頭檔案

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

其實是需要:LIBODB(odb-d.lib)、LIBODB-&lt;MYSQL&gt;(odb-mysql-d.lib).(LIBMYSQLCLIENT(mysql-connector-c-6.1.6-win32)這個已經被編譯到odblib-mysql中了,是以不需要了)。

頭檔案自己加,庫檔案需要什麼工程裡已經為你寫好了:

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

由于剛才在編譯libodb-mysql的時候已經将libodb和mysql-connector-c的資源添加過了。

是以現在隻需要将libodb-mysql中的:include、odb、lib這三個目錄靠過來并在example(或者你自己的工程)工程屬性中添加引用即可。

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

目前項目中的【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】這四個檔案:

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

将這四個檔案拷貝到本項目【person.hxx】檔案同級目錄下

用【person.sql】建立資料庫表。

可以成功編譯:

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

生成的檔案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&lt;database&gt; db (create_database (argc, argv));  

auto_ptr&lt;odb::database&gt; db (  

    new odb::mysql::database (  

    "root"     // database login name  

    ,"123456" // database password  

    ,"collect" // database name  

    ,"localhost"  

    ,13306  

    ));  

編譯運作:

【一】ODB - C++ 通路資料庫的利器--Hello World On Windows(Version-24)

這個例子可以跑起來其實是需要odb的所有步驟的,其他例子均可仿照這個例子的做法,自己建立的項目引用odb也是如此!奔跑吧,小怪獸!!