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

CalmReason發表於2015-10-29

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

官方文件和下載

ODB官方首頁    官方開發者說明書(開發教程)

安裝下載首頁(下載與安裝教程Windows/Linux)

Windows安裝步驟(都是英文版,流程雖然詳細,但是卻略顯麻煩,主要是因為ODB的機制造成的)

ODB的使用原理

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

ODB的架構和流程

(1)你自己定義一個C++的Person類.h/.cpp
(2)用安裝的ODB Compiler編譯Person.h得到新的


必選:

MySQL官方C開發庫 

只用這個即可同時開發C++程式

作用:這個是MySQL官方提供的用於C開發程式讀寫MySQL提供標頭檔案和動態連結庫檔案以及靜態連結庫檔案,跟ODB沒有任何關係。

這個不需要編譯,提供現成的標頭檔案和庫檔案。可以用C直接讀寫MySQL資料庫。

官方下載地址(全部都有自己選): libmysqlclient

百度雲下載僅提供:mysql-connector-c-6.1.6-win32.zip】或者【mysql-connector-c-6.1.6-winx64.zip

MySQL官方C++開發庫

不建議用:

後來發現/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編譯器

官方下載地址   百度雲下載:odb-2.4.0-i686-windows.zip

主要功能:將自定義ODB結構編譯生成標準的.hxx標頭檔案和標準的.cxx原始檔。

這個是個bin/odb.exe可執行檔案,免安裝。要想使用這個EXE只需要開啟CMD終端,將目錄切換到此目錄即可執行:



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

下載並編譯LIBODBlibodb-2.4.0.zip

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



下載並編譯資料庫執行時庫LIBODB-<DATABASE>

官方下載地址  libodb-mssql-2.4.0.zip、libodb-oracle-2.4.0.zip、libodb-mysql-2.4.0.zip

百度雲下載:libodb-mssql-2.4.0.ziplibodb-oracle-2.4.0.ziplibodb-mysql-2.4.0.zip

主要作用:將第三方資料庫介面封裝成統一介面給libodb,從而實現跨資料庫訪問。這些執行時庫用VS Building之後會生成lib和dll檔案

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

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

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

新增方法參考:http://blog.csdn.net/calmreason/article/details/6989390


直接編譯會因為(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】檔案


編譯執行Hello World

官方下載地址   百度雲下載:odb-examples-2.4.0.zip

選擇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。

其實這需要具體的設定:ip,port,usr,psw,預設情況下程式使用命令列獲取這些資訊,參考2.3 Compiling and Running,關於如何使用database的建構函式直接傳遞資料庫訪問資訊參考:3.4 Database 

直接修改程式碼,在程式碼中寫死連線資料庫的資訊:

原來的程式碼:

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也是如此!奔跑吧,小怪獸!!



相關文章