C++ 版本ORM访问数据库之ODB访问oracle的Demo(三)
ODB的組成部分:
1: 操作系統的ODB編譯器
2: odb核心庫libodb
3: 各種數據庫的相關鏈接庫
使用ODB訪問數據需要的庫和頭文件(不懂, 請看https://www.cnblogs.com/hul201610101100/p/9482311.html):
lib庫:?odb-oracle-d.lib,?odb-d.lib (由libodb-oracle-2.4.0編譯成功后產生的lib目錄下的兩個庫)
頭文件: 直接將libodb-oracle-2.4.0編譯成功后的odb目錄拷貝到工程即可
源代碼如下:
定義數據庫表信息頭文件:
1 #pragma once 2 #include <string> 3 #include "odb/core.hxx" //直接將libodb-oracle-2.4.0目錄中的odb目錄copy過來, 再設置工程屬性 4 5 using namespace std; 6 7 //odb -d oracle --generate-query --generate-schema 頭文件名 8 //eg: odb -d oracle --generate-query --generate-schema personinfo.h 9 10 //聲明接下來的一個對象是與數據庫相關的類 11 #pragma db object 12 class personinfo 13 { 14 public: 15 //查詢需要的構造函數 16 personinfo(){}; 17 //插入需要的構造函數 18 personinfo(string strName, string strSex, int nAge, string strId, string strAddress) 19 { 20 name = strName; 21 sex = strSex; 22 age = nAge; 23 idnum = strId; 24 address = strAddress; 25 }; 26 27 public: 28 string name; 29 string sex; 30 int age; 31 string idnum; 32 string address; 33 private: 34 //我們將類的構造函數或者將數據成員聲明為私有時,odb的access類可以訪問我們的數據成員和構造函數。 35 friend class odb::access; //odb/core.hxx 36 37 //表明接下來這個字段是這個持久化類的標識符字段 38 //或 39 //我們也可以不用#pragma db id,而是使用#pragma db object no_id,表明這個持久化類沒有標識符,如上例子 40 #pragma db id auto //編號自動增長, #pragma db object 這行代碼添加了, 則該行代碼一定添加, 不然用odb編譯會失敗 41 unsigned long id_; 42 };定義好了數據表頭文件之后, 將該文件拷貝到odb.exe目錄下, 運行生成操作數據庫相關的代碼
odb -d oracle --generate-query --generate-schema personinfo.h
--generate-query: 生成查詢書庫代碼
--generate-schema: 生成建表文件(.sql文件)
personinfo.h: 頭文件名稱
personinfo.h頭文件解析:
class personinfo: 數據表名personinfo
name, sex, idnum, address, age, id: 數據表列名
?
odb命名執行成功會生成4個文件:?personinfo-odb.cxx,?personinfo-odb.hxx,?personinfo-odb.ixx,?personinfo.sql
將這四個頭文件拷貝到工程目錄(和personinfo.h同級目錄)下, 后將?personinfo-odb.cxx(源文件),?personinfo-odb.hxx(頭文件),?personinfo-odb.ixx(頭文件), 加載到工程中
?訪問數據庫代碼如下:
1 #include <stdio.h> 2 #include "personinfo.h" 3 #include "personinfo-odb.hxx" 4 // 5 // 6 // 7 //odb 頭文件 8 #include "odb/database.hxx" 9 #include "odb/transaction.hxx" 10 #include "odb/oracle/database.hxx" 11 //odb 命名空間 12 using namespace odb::core; //transaction 13 14 //odb 調用的lib庫, 使用libodb-oracle-2.4.0目錄的lib目錄 15 #pragma comment(lib, "odb-oracle-d.lib") 16 #pragma comment(lib, "odb-d.lib") 17 int main() 18 { 19 try 20 { 21 auto_ptr<database> db(new odb::oracle::database( 22 "HUL", //用戶名 23 "sa", //密碼 24 "ORCL", //數據庫名 25 "127.0.0.1", //數據庫ip地址 26 1521)); //數據庫端口號 27 personinfo perInfo("mhm", "MAN", 66, "362329199512345678", "浙江杭州"); 28 transaction tInsert(db->begin()); 29 db->persist(perInfo); 30 tInsert.commit(); 31 printf("執行插入成功\n"); 32 33 typedef odb::query<personinfo> querys; 34 typedef odb::result<personinfo> results; 35 transaction tQuery (db->begin ()); 36 37 //results rQuery(db->query<personinfo>()); //無條件查詢 38 results rQuery(db->query<personinfo>(querys::age == 77)); //查詢年齡==77的結果集 39 for(results::iterator it = rQuery.begin(); it != rQuery.end(); ++it) 40 { 41 printf("姓名: %s, 性別: %s, 年齡: %d, 身份編號:%s, 地址: %s\n", it->name.c_str(), it->sex.c_str(), it->age, it->idnum.c_str(), it->address.c_str()); 42 } 43 tQuery.commit(); 44 printf("執行查詢操作成功\n"); 45 transaction tDelet(db->begin ()); 46 db->erase<personinfo>(2); //刪除id = 2, 當id = 2 不存在時, 會報錯: object not persistent 47 //db->erase<personinfo>(perInfo); //刪除對象 48 tDelet.commit (); 49 printf("執行刪除操作成功\n"); 50 51 transaction tUpdate (db->begin ()); 52 unsigned long id = 3; 53 auto_ptr<personinfo> joe (db->load<personinfo>(id)); //當id = 3 不存在時, 會報錯: object not persistent 54 joe->age = 1000; 55 db->update (*joe); 56 printf("執行更新操作成功\n"); 57 } 58 catch (const odb::exception& ex) //catch odb異常 59 { 60 printf("Error: %s", ex.what()); 61 getchar(); 62 return -1; 63 } 64 65 return 0; 66 }以上是以orm方式訪問書庫的簡單代碼, 希望能對你有點幫助, 也不枉我寫這三篇文章
前兩篇地址:
Window ODB 環境編譯 :https://www.cnblogs.com/hul201610101100/p/9482311.html
ODB Demo使用:?https://www.cnblogs.com/hul201610101100/p/9482605.html
轉載于:https://www.cnblogs.com/hul201610101100/p/9485756.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的C++ 版本ORM访问数据库之ODB访问oracle的Demo(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华南理工会计学计算机答案,2020华工会
- 下一篇: [原创]C/C++语言中,如何在main