空间购买网站,微信网站定制,刚开始做网站布局很吃力 怎么办,敲代码做网站多少钱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编译成功后产生的l…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 once2 #include string3 #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.h9
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.h2 #include personinfo.h3 #include personinfo-odb.hxx4 //5 // 6 //7 //odb 头文件8 #include odb/database.hxx9 #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_ptrdatabase 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::querypersoninfo querys;
34 typedef odb::resultpersoninfo results;
35 transaction tQuery (db-begin ());
36
37 //results rQuery(db-querypersoninfo()); //无条件查询
38 results rQuery(db-querypersoninfo(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-erasepersoninfo(2); //删除id 2, 当id 2 不存在时, 会报错: object not persistent
47 //db-erasepersoninfo(perInfo); //删除对象
48 tDelet.commit ();
49 printf(执行删除操作成功\n);
50
51 transaction tUpdate (db-begin ());
52 unsigned long id 3;
53 auto_ptrpersoninfo joe (db-loadpersoninfo(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