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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

平均年薪60.8万,Linux开发拿下这个证书有多吃香?

互联网行业竞争一年比一年严峻&#xff0c;随着互联网的发展和进步&#xff0c;很多人都是想要进军到编程行业中去&#xff0c;作为工程师的我们唯有不停地学习&#xff0c;不断的提升自己才能保证自己的核心竞争力&#xff0c;打破内卷。从而拿到更好的薪水&#xff0c;进入心…

Linux新手必须掌握的命令(2)

一、输入输出重定向 输入重定向是指把文件导入到命令中&#xff0c;而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。 在日常的学习和工作中&#xff0c;相较于输入重定向&#xff0c;我们使用输出重定向的频率更高。 所以又将输出重定向分为了标准输出重定向…

极限编程与敏捷开发(4)

解决方案一&#xff1a; 下面图1是一种最简单的解决方案&#xff0c;Switch对象可以轮询真实开关的状态&#xff0c;并且可以发送相应的turnOn和turnOff消息给Light。 图1解决方案二&#xff1a; 上面这个设计违反了两个设计原则&#xff1a;依赖倒置原则(DIP)和开放封闭原则(O…

虚拟机四种网络连接模式比较

虚拟机一直用&#xff0c;但选择网络时的四种模式总是搞不清楚&#xff0c;只知道选择bridge最好用。为了能更深入了了解&#xff0c;查询了些资料&#xff0c;总结如下 第一种 NAT模式 Vhost访问网络的所有数据都是由主机提供的&#xff0c;vhost并不真实存在于网络中&#xf…

CPU加了缓存后,有人急了~

Hi&#xff0c;我是CPU一号车间的阿Q&#xff0c;还记得我吗&#xff0c;真是好久不见了&#xff5e;我所在的CPU是一个八核CPU&#xff0c;就有八个工作车间&#xff0c;那运行起来速度杠杆的&#xff5e;虚拟地址翻译一大早&#xff0c;我们一号车间MMU&#xff08;内存管理单…

redis -- 学习

redis 安装 就不细说了。 可以看这个 地址 https://www.cnblogs.com/feijl/p/6879929.html 配置完成之后 连接不上redis 如果报错守护模式 解决办法 1.修改redis配置 redis.conf 守护模式不启用 如下 2.第二种 启动redis后 设置密码 先查看是否设置了 config get requirepass…

一个学妹写的按键检测函数把我秀翻了!

摘要&#xff1a;今年实验室来了三个学妹&#xff0c;其中一个学妹以前是物联网专业的&#xff0c;进了实验室老师二话没说&#xff1a;先把STM32单片机过一遍上来第一个例程就是使用按键点亮一个LED灯&#xff0c;好家伙。点灯小师弟比较在行&#xff0c;毕竟32、FPGA、Linux的…

嵌入式行业需要什么样的技术人才?

关注「嵌入式大杂烩」&#xff0c;选择「星标公众号」一起进步&#xff01;来源 | 巧学模电数电单片机嵌入式行业需要什么样的技术人才&#xff1f;仔细观察各种招聘的岗位要求吧&#xff0c;无非是两方面。1&#xff09;通用要求比如什么学历&#xff0c;多少年工作经验&#…

消除VIM光标闪烁

2019独角兽企业重金招聘Python工程师标准>>> VIM光标闪烁比较影响人读代码的心情&#xff0c;消除光标闪烁&#xff0c;在配置文件中写下set gcra:block-blinkon0 保存并重启VIM 即可消除光标闪烁。 转载于:https://my.oschina.net/tonyyang/blog/10240

java异常个人理解

废话不说先贴图 所有的异常和错误都继承与Throwable类&#xff0c;它的下面又分为两大子类。 1.Error(uncheck) Error,错误。它是java程序中不被捕获的错误&#xff0c;并且总是不被控制。 例如&#xff1a;OutOfMemoryError 2.Exception(check) Exception,异常。所有的异常类都…

华为专家助你1个月拿下物联网高工认证,首次提供全方位就业指导!

物联网职业方向主要包括研究型岗位、研发型岗位、技术型岗位和技能型岗位4类&#xff1a;技能型岗位&#xff1a;工作内容主要是系统部署实施、运维管理等技术支持服务。技术型岗位&#xff1a;工作内容主要是负责物联网系统规划、设计、集成、技术咨询。研发型岗位&#xff1a…

php获取linux是几核的,linux下怎么查看机器cpu是几核的

linux下怎么查看机器cpu是几核的&#xff1f;linux下查看机器是cpu是几核的几个cpumore /proc/cpuinfo |grep "physical id"|uniq|wc -l每个cpu是几核(假设cpu配置相同)more /proc/cpuinfo |grep "physical id"|grep "0"|wc -lcat /proc/cpuinfo…

我的自学编程之路!

大家好&#xff0c;我是写代码的篮球球痴昨晚上打车回家&#xff0c;接我的滴滴司机是一个年纪比较大的大姐&#xff0c;她说她儿子毕业了&#xff0c;但是找不到好的工作&#xff0c;就报名参加了编程培训&#xff0c;培训费两万多。我就问&#xff0c;那谁给他学费&#xff0…

鹰眼拓扑锁定跟踪 网络管理一目了然

为什么要在网管软件中引入“鹰眼”的概念&#xff1f; 企业网管经常遇到的问题是&#xff1a;为什么业务人员访问生产系统&#xff08;例如ERP等&#xff09;速度非常慢&#xff0c;甚至无法访问&#xff1f;邮件系统无法使用&#xff1f;下载数据时总是无法连接&#xff…

读工作31年退休的同事离职信有感

大家好&#xff0c;我是写代码的篮球球痴&#xff0c;下面的文章是我的朋友痞子衡写的。大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。今天痞子衡不讲技术&#xff0c;跟大家随便唠唠嗑。这周五&#xff0c;痞子衡收到了一位来自恩智浦深圳分公司同事的离职信…

Silverlight 计时器

代码 publicpartialclassMainPage : UserControl{inti 1;TextBlock myTextBlock;publicMainPage(){ InitializeComponent(); myTextBlock newTextBlock(); myTextBlock.Loaded this.StartTimer; myTextBlock.Margin newThickness(30); LayoutRoot.Children.Add(myTextBlock);}p…

这三个Offer,你怎么选?

前几天&#xff0c;有读者给我发信息&#xff0c;让我帮他看一下offer的选择&#xff1a;字节、腾讯天美、阿里云&#xff0c;随便一个都是羡煞旁人的offer&#xff0c;这家伙一下拿了三个&#xff0c;我都开始酸了起来。于是我让他总结一下面试过程中考察的知识点&#xff0c;…

挖掘经典:几乎被人遗忘的HTML七种用法 (转)

转来学习http://www.cnblogs.com/netWild/archive/2010/11/30/1892418.html 当今的WEB领域&#xff0c;新概念、新技术不断涌现 -- WEB2.0、AJAX、HTML5.0... ... 但在几乎被我们忽略的HTML和XHTML里&#xff0c;还有许多并不为人所知的&#xff0c;但却非常有用的一些TAG 以下…

这种扯淡的嵌入式项目,尽量不要碰

第一种&#xff1a;画大饼的项目不接。有的客户会很热情的找到你&#xff0c;告诉你这个项目如何如何地有前途&#xff0c;产品研发成功了之后会有多么大的出货量&#xff0c;会有多么丰厚的利润&#xff0c;建议你一起跟他创业合作&#xff0c;成功了之后给你高额提成。但是产…

高频面试题,malloc实现

面试官&#xff1a;你好&#xff0c;请先做自我介绍我&#xff1a;巴拉巴拉&#xff0c;我喜欢打篮球……面试官&#xff1a;请解释下malloc的实现原理我&#xff1a;我不会面试官&#xff1a;那就先这样&#xff0c;我们就不浪费大家的时间了。在开发c或c时&#xff0c;经常需…