先简单说说我为什么要编译一个ORM访问数据库的版本, 以前在做C#访问数据库时候, 直接以orm方式访问数据库, 代码写起来简单,  不用写各种复杂的sql语句, 直接有orm框架生成, 后来转到C++上面来了, 也有访问的数据库, 虽然C++访问的数据库方式有很多, 但是都是那些odbc, ado 之类的访问方式, 虽然实现代码只有几行, 但是如果是新手调试的时候就有你受的了, 我影响最深的是, 我平时工作中访问的oracle数据库比较多, 由于公司前辈们都是与ado方式访问数据库, 所以我也网上找了一个ado访问oralce数据库的方式, 刚开始直接从网上copy了一份代码下来, 然后再根据自己的业务需求进行一下修修改改, 当时很高兴, 天真的以为编译成功就能用了, 但理想是完美的, 现实是残忍的, 程序运行起来既然在链接数据库的阶段就错了, 而且使用try catch抓到的错误莫名其妙, 百度答案五花八门没有能解决我的问题, 反正被这问题折腾了好几天, 主要有三个问题

  1, oralce驱动没安装

  2. 链接字符串不对(链接字符串根据你使用的驱动不同而有差异)

  3. msado15.dll 库不对, 这个库是微软自带的库, 每个操作系统上的这个库都不同, 所以最好使用目标主机上的库拿到本地编译

扯远了, 其实就想说明一下ado访问数据库也不简单, 现在进入正题, 由于我经常使用oracle数据库, 所以我编译的是oracle ODB 环境, 其他数据库是一样的

ODB官方下载路径: 

https://www.codesynthesis.com/products/odb/download.xhtml

需要下载的zip文件包

  window环境编译器:    Odb-2.4.0-i686-windows

  核心库:        libodb-2.4.0

  oralce库:       libodb-oracle-2.4.0

  测试例子库:     Odb-example-2.4.0

下载完成之后, 解压在同一文件夹中

开始ODB环境编译

1. 配置odb编译器------Odb-2.4.0-i686-windows

  打开Odb-2.4.0-i686-windows文件夹, 进入bin目录下, 会发现一个odb.exe文件, 后将odb.exe 的路径配置到系统环境变量的path中, 然后打开cmd窗口运行odb --version   命令, 查看是否配置成功

  如下图:

  操作1

  

  操作2

  

  操作3

  

 2.  编译libodb------libodb-2.4.0.zip

  直接进入libodb-2.4.0文件夹后发现有vs工程文件, 直接用vs工具打开并编译即可

  操作如下图:

  操作1:

  操作2: 打开直接编译, 无需任何配置

请记住生成的lib文件和bin文件

3. 编译oralce库文件------libodb-oracle-2.4.0.zip

  操作如下图

  操作1: 进入libodb-oracle-2.4.0, 直接用vs工具打开工程文件吗后编译

  

错误1: 无法打开包括文件:“odb/pre.hxx”: No such file or directory

解决方法: 将编译好的libodb库 中的lib 和odb两个文件夹直接复制替换到该工程下的libodb-oralce-2.4.0下的lib和odb目录

操作如下图

文件夹合并之后再编译

编译错误2: 找不到oci.h文件

解决方法: 因为oci.h是oracle的头文件, 需要到下官网下载oracle下载地址: https://www.oracle.com/downloads/index.html我下载的是oralce11gR2_Win32版本: 下载后,解压, 选择管理员模式安装, 然后找到oci.h文件所在的目录,

拷贝该目录下的lib和include两个文件夹(是两个文件夹, 不是一个, 即使你只拷贝include后面还是会出现找不到oci.lib库, 所以一下就讲连个文件夹都拷贝过去)

替换libodb-oracle-2.4.0目录中的lib和include两个文件夹

再编译:

还是找不到oci.h , 现在就需要修改项目属性

再编译:

继续配置项目工程属性

再编译:

再配置工程属性

编译:

终于成功了, 如果你还是失败了, 出现了如下错误:

error LNK2001: 无法解析的外部符号 _OCIDescriptorFree

那恭喜你, 你oralce下载错了版本, 你下的版本与你编译器运行的版本不一样(例如你下的是64bit, 和vs是Win32平台), 重新下载, 再编译就行了, 我刚开始就碰到这问题

4. 编译测试例子------odb-examples-2.4.0

  因为我编译的是oracle数据库, 所以我打开的是examples-oracle-vs12.sln

将hello-oracle设置为启动项

直接编译, 如果出现错误:error MSB6006: "cmd.exe" exited with code 9009.

解决方法: 电脑重启(因为是配置odb.exe的path路径没生效, 重启即可)

电脑重启后编译结果:

其实就是需要libodb-2.4.0中的(odb-d.lib库) 和libodb-oracle(odb-oracle-d.lib)库,但是当你打开工程属时会发现已经包含了这两个库

因此只要将libodb-oracle-2.4.0中的include, odb, lib 这三个目录合并到exeample中再配置工程属性就行了

拷贝过程省去, 直接配置头文件路径配置

配置(odb-d.lib库) 和libodb-oracle(odb-oracle-d.lib)库路径

编译结果:

5. 使用odb编译器生成标准的odb文件

  在hello-oracle-vc12工程中有一个person.hxx文件, 将将person.hxx(odb模板文件)文件拷贝到 目录odb-2.4.0-i686-windows\bin下,打开cmd, 进入到BIN目录, 运行命令

odb -d oracle --generate-query --generate-schema person.hxx

会生成这四个文件, person.sql, persion-odb.cxx, persion-odb.hxx, persion-odb.ixx, 然后将这4文件拷贝到hello-oracle-vc12工程中和person.hxx在同一级目录下

  如果不进入到BIN目录目录下, 直接运行 odb -d oracle --generate-query --generate-schema person.hxx则会出现如下错误:

 

  

C++版本 ORM 访问数据库之ODB 的Window环境编译(一)的更多相关文章

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

    ODB的组成部分: 1: 操作系统的ODB编译器 2: odb核心库libodb 3: 各种数据库的相关链接库 使用ODB访问数据需要的库和头文件(不懂, 请看https://www.cnblogs. ...

  2. C++版本 ORM 访问数据库之ODB 的oracle Demo测试(二)

    有上篇文章已经说了odb的环境编译, 现在直接拿来给的例子进行数据库的增删改查操作测试 1. ODB访问oracle数据库_ 插入操作(insert) 直接运行上篇编译好的exe文件会出现如下错误 错 ...

  3. 用dotnet core搭建web服务器(三)ORM访问数据库

    访问传统sql数据库,大家以前都是用sql语句去查询.这些年流行orm方法 ORM是对象关系映射的简拼,就是用一个对象(class)去表示数据的一行,用对象的成员去表述数据的列 dotnet 官方很早 ...

  4. 【一】ODB - C++ 访问数据库的利器--Hello World On Windows(Version-24)

    本文以MySQL数据库为例,其他数据类似. 官方文档和下载 ODB官方首页    官方开发者说明书(开发教程) 安装下载首页(下载与安装教程Windows/Linux) Windows安装步骤(都是英 ...

  5. [开源] .Net 使用 ORM 访问 达梦数据库

    前言 武汉达梦数据库有限公司成立于2000年,为中国电子信息产业集团(CEC)旗下基础软件企业,专业从事数据库管理系统的研发.销售与服务,同时可为用户提供大数据平台架构咨询.数据技术方案规划.产品部署 ...

  6. Python与数据库[2] -> 关系对象映射/ORM[3] -> sqlalchemy 的声明层 ORM 访问方式

    sqlalchemy的声明层ORM访问方式 sqlalchemy中可以利用声明层进行表格类的建立,并利用ORM对象进行数据库的操作及访问,另一种方式为显式的 ORM 访问方式. 主要的建立步骤包括: ...

  7. Python与数据库[2] -> 关系对象映射/ORM[4] -> sqlalchemy 的显式 ORM 访问方式

    sqlalchemy 的显式 ORM 访问方式 对于sqlalchemy,可以利用一种显式的ORM方式进行访问,这种方式无需依赖声明层,而是显式地进行操作.还有一种访问方式为声明层 ORM 访问方式. ...

  8. VS2017新建MVC+ORM中的LinqDb访问数据库项目

    1.前提概述 ORM对象关系映射(Object-Relational Mapping)是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效果上说,它其实是创建了一个可在编程语言 ...

  9. Spring实战6:利用Spring和JDBC访问数据库

    主要内容 定义Spring的数据访问支持 配置数据库资源 使用Spring提供的JDBC模板 写在前面:经过上一篇文章的学习,我们掌握了如何写web应用的控制器层,不过由于只定义了SpitterRep ...

随机推荐

  1. EF Core 根据已有的数据库来生成 EF 领域模型

    1. 如图: 2. 命令 <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFrame ...

  2. Linux查看日志常用命令(转载)

    转自: https://www.cnblogs.com/kbkiss/p/7567725.html -------------------------------------------------- ...

  3. 什么是code-Behind技术?

    code-Behind技术就是代码隐藏(代码后置),在ASP.NET中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建. 比如分工,美工和编程的可以个干各 ...

  4. 邮箱图标的css样式

    <div> <div style="position:relative; height:40px;width: 70px;border:2px solid black; m ...

  5. Linux帮助——获取帮助

    Linux帮助——获取帮助 摘要:本文主要学习了Linux众多命令中最基础的帮助命令. 介绍 作用 Linux的所有操作都可以通过命令行来完成,所以学习Linux最好从命令行开始.因为Linux的命令 ...

  6. iOS开发之--为UITextField监听数值变化的三种方法

    项目中有个验证码输入直接验证跳转页面,用的RAC来监听textfield的输入值,如下: @weakify(self); [self.codeView.textField.rac_textSignal ...

  7. 【PHP】关于系统性能追踪工具molten

    一.简介 关于molten的介绍网上有很多,是一个全链路追踪的工具,Molten可以看做是phptrace的的升级版(流行的php问题定位工具譬如phptrace,xhprof,这些工具可以自行Goo ...

  8. liteos互斥锁(七)

    1. 概述 1.1 基本概念 互斥锁又称互斥型信号量,是一种特殊的二值性信号量,用于实现对共享资源的独占式处理. 任意时刻互斥锁的状态只有两种,开锁或闭锁.当有任务持有时,互斥锁处于闭锁状态,这个任务 ...

  9. vm|vmware workstation 15|14 pro 激活|密钥|序列号|许可证

    VMware Workstation Pro 15 激活许可证 UY758-0RXEQ-M81WP-8ZM7Z-Y3HDA VF750-4MX5Q-488DQ-9WZE9-ZY2D6 UU54R-FV ...

  10. 关于宝塔一个站点绑定多个域名宝塔ssl证书的问题

    目前“宝塔SSL”自动申请绑定一个证书,即根域名和www域名,如果还需要绑定手机端m则需要绑定多个域名如果多域名绑定一个网站数据,需要新建多个站点指向同一文件目录. 用相同的方法,在不新建站点的前提下 ...