【一】ODB - C++ 訪問資料庫的利器--Hello World On Windows(Version-24)
本文以MySQL資料庫為例,其他資料類似。
官方文件和下載
安裝下載首頁(下載與安裝教程Windows/Linux)
Windows安裝步驟(都是英文版,流程雖然詳細,但是卻略顯麻煩,主要是因為ODB的機制造成的)
ODB的使用原理
下面介紹ODB的使用原理來說明為什麼會有這麼多步驟:
ODB的架構和流程
必選:
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已經可以使用。
下載並編譯LIBODB:libodb-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.zip、libodb-oracle-2.4.0.zip、libodb-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也是如此!奔跑吧,小怪獸!!
相關文章
- 最長的Hello, World!(C++)C++
- MySql資料庫C++訪問(轉)MySql資料庫C++
- C++演變史 | Hello WorldC++
- Hello, World
- Hello World!
- Hello World
- react的”Hello World !“React
- WebGL 的 Hello WorldWeb
- spring boot(一)hello worldSpring Boot
- 第一個程式Hello world
- C++ COM 開發 Hello World V2C++
- 用JDBC訪問一個資料庫JDBC資料庫
- Windows 下JDBC 訪問Oracle11g 資料庫WindowsJDBCOracle資料庫
- React Native 探索(一)環境搭建與 Hello World(Windows/Mac)React NativeWindowsMac
- React Native探索(一)環境搭建與Hello World(Windows/Mac)React NativeWindowsMac
- jboss訪問資料庫的問題資料庫
- Go - Hello WorldGo
- Docker Hello WorldDocker
- 【Java】Hello worldJava
- React Hello,WorldReact
- Mockito Hello WorldMockito
- ant Hello World
- Deep "Hello world!"
- Go:Hello WorldGo
- 1. Context – React跨元件訪問資料的利器ContextReact元件
- 1. Context - React跨元件訪問資料的利器ContextReact元件
- react 第一個元件 “hello world!”React元件
- spring boot(一)hello world 搭建Spring Boot
- 第一個ncurses程式: hello world !!!
- 第一個PHP程式——Hello WorldPHP
- JDBC資料庫訪問JDBC資料庫
- 訪問HyperSQL資料庫的方法SQL資料庫
- 資料庫VIP地址無法訪問(一)資料庫
- 用JDBC訪問一個資料庫(轉)JDBC資料庫
- Ubuntu訪問Windows共享資料夾UbuntuWindows
- Hello Python worldPython
- ABAP程式Hello World
- dotnet hello world