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(三)相关推荐
- C++版本 ORM 访问数据库之ODB 的oracle Demo测试(二)
有上篇文章已经说了odb的环境编译, 现在直接拿来给的例子进行数据库的增删改查操作测试 1. ODB访问oracle数据库_ 插入操作(insert) 直接运行上篇编译好的exe文件会出现如下错误 错 ...
- php访问数据库例子,PHP访问MSSQL数据库(实例代码)
本例子只作为简单的引导,实现一个简单的查询: php中mssql数据库简单查询完整实例 //说明:测试的时候是连接的是远程的mssql数据库,没有在本机运行 //初始化mssql数据库连接,分别是 主 ...
- 访问数据库_如何访问虚拟主机中的数据库
如何访问虚拟主机中的数据库?访问虚拟主机数据库,通过虚拟主机控制面板,找到数据库入口,在数据库管理界面,以Linux系统为例,我们点击"管理MySQL数据库(UTF-8版)",或者 ...
- ADO连接并访问数据库(MSSQL、Oracle、MySQL等)
1.引入msado.dll动态库 添加以下代码到*.cpp文件或者添加到*.h头文件(该头文件要被*.cpp文件引用),编译一次,自动生成msado15.tlh和msado15.tli文件 #impo ...
- oracle数据库第八章答案,Oracle培训(三十)——Oracle 11g 第八章知识点小结——处理数据...
Oracle培训(三十)--Oracle 11g 第八章知识点总结--处理数据 Oracle 11g 第八章知识点总结--处理数据 知识点预览 复习 处理数据 复习 --建表t_user create ...
- 使用程序设计语言访问SQL:JDBC、从Python访问数据库、ODBC、嵌入式SQL
SQL 提供了一种强大的声明式查询语言.用 SQL 编写查询通常比用通用程序设计语言同样的查询进行编码要简单得多.然而,基于至少两种原因数据库程序员必须能够访问通用程序设计语言: 1.因为 SQL 并 ...
- vertica 数据库 linux,配置访问列式数据库vertica的php环境
vertica是一个和Sybase IQ,infobright类似的列式数据库,没有用过Sybase IQ,就和infobright 3.4的社区版做了简单对比测试,在同样一个一亿条记录的表中,下面的 ...
- [原]flash研究(二)——与asp.net服务交互(访问数据库)
前一篇文章写了flash本地通信的方法,这篇文章主要研究一下flash访问数据库的方法.一个完整的flash访问数据库的程序,包括两部分,一是flash端请求程序,一是服务端接收到请求处理并返回数据的 ...
- 【一】ODB - C++ 访问数据库的利器--Hello World On Windows(Version-24)
本文以MySQL数据库为例,其他数据类似. 官方文档和下载 ODB官方首页 官方开发者说明书(开发教程) 安装下载首页(下载与安装教程Windows/Linux) Windows安装步骤(都是英 ...
最新文章
- 青海省计算机应用能力考试,青海省2015年职称计算机应用能力考试西宁考区四月份考试安排通知...
- 几个与PPT相关的Blog
- 6.15 Unity引擎渲染效率全解析
- Mysql中的增删改查操作
- Windows Phone 7中用好Silverlig“.NET研究”ht开发利器
- ORACLE PL/SQ入门
- Jenkins中的一些问题解决(~~不断更新~~)
- 各大快递公司面单号准确性验证的正则表达式,来自淘宝开放平台,时间是20181206,...
- pandas数据处理、绘图
- 2019最新盘点:适合中小型企业的财务系统软件
- 上海图书馆e卡通阅读器差强人意
- 如何理解失效模式与影响分析(FMEA)
- vmware 12 许可证秘钥
- 模仿学习:逆向强化学习(Inverse Reinforcement Learning, IRL)
- Swift Black Substratum主题v23.3补丁[最新]
- 图像形状特征(五)--自由式变形模板
- spring boot指定运行环境
- Python调用使用自颁发证书的https接口
- python简单实例-python简单案例
- C语言实现网络聊天室 socket的简单应用