日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 版本ORM访问数据库之ODB访问oracle的Demo(三)

發布時間:2023/12/20 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。