C++版本 ORM 访问数据库之ODB 的Window环境编译(一)
先简单说说我为什么要编译一个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环境编译(一)的更多相关文章
- C++ 版本ORM访问数据库之ODB访问oracle的Demo(三)
ODB的组成部分: 1: 操作系统的ODB编译器 2: odb核心库libodb 3: 各种数据库的相关链接库 使用ODB访问数据需要的库和头文件(不懂, 请看https://www.cnblogs. ...
- C++版本 ORM 访问数据库之ODB 的oracle Demo测试(二)
有上篇文章已经说了odb的环境编译, 现在直接拿来给的例子进行数据库的增删改查操作测试 1. ODB访问oracle数据库_ 插入操作(insert) 直接运行上篇编译好的exe文件会出现如下错误 错 ...
- 用dotnet core搭建web服务器(三)ORM访问数据库
访问传统sql数据库,大家以前都是用sql语句去查询.这些年流行orm方法 ORM是对象关系映射的简拼,就是用一个对象(class)去表示数据的一行,用对象的成员去表述数据的列 dotnet 官方很早 ...
- 【一】ODB - C++ 访问数据库的利器--Hello World On Windows(Version-24)
本文以MySQL数据库为例,其他数据类似. 官方文档和下载 ODB官方首页 官方开发者说明书(开发教程) 安装下载首页(下载与安装教程Windows/Linux) Windows安装步骤(都是英 ...
- [开源] .Net 使用 ORM 访问 达梦数据库
前言 武汉达梦数据库有限公司成立于2000年,为中国电子信息产业集团(CEC)旗下基础软件企业,专业从事数据库管理系统的研发.销售与服务,同时可为用户提供大数据平台架构咨询.数据技术方案规划.产品部署 ...
- Python与数据库[2] -> 关系对象映射/ORM[3] -> sqlalchemy 的声明层 ORM 访问方式
sqlalchemy的声明层ORM访问方式 sqlalchemy中可以利用声明层进行表格类的建立,并利用ORM对象进行数据库的操作及访问,另一种方式为显式的 ORM 访问方式. 主要的建立步骤包括: ...
- Python与数据库[2] -> 关系对象映射/ORM[4] -> sqlalchemy 的显式 ORM 访问方式
sqlalchemy 的显式 ORM 访问方式 对于sqlalchemy,可以利用一种显式的ORM方式进行访问,这种方式无需依赖声明层,而是显式地进行操作.还有一种访问方式为声明层 ORM 访问方式. ...
- VS2017新建MVC+ORM中的LinqDb访问数据库项目
1.前提概述 ORM对象关系映射(Object-Relational Mapping)是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效果上说,它其实是创建了一个可在编程语言 ...
- Spring实战6:利用Spring和JDBC访问数据库
主要内容 定义Spring的数据访问支持 配置数据库资源 使用Spring提供的JDBC模板 写在前面:经过上一篇文章的学习,我们掌握了如何写web应用的控制器层,不过由于只定义了SpitterRep ...
随机推荐
- SourceTree 版本跳过bitbucket注册方法
1.安装sourcetree时 需要选择 bitbucket账号,这个令人头疼 当然肯定有办法来跳过这一步 2.关闭当前安装界面 进入 C:\Users\Administrator\AppData ...
- jQuery 源码解析(七) jQuery对象和DOM对象的互相转换
jQuery对象是一个类数组对象,它保存的是对应的DOM的引用,我们可以直接用[]获取某个索引内的DOM节点,也可以用get方法获取某个索引内的DOM节点,还可以用toArray()方法把jQuery ...
- VS 中批量格式化、删除未使用的 using 语句代码的插件
插件名称:Format All Files 插件地址:https://marketplace.visualstudio.com/items?itemName=munyabe.FormatAllFile ...
- 使用SolrJ(即java客户端)开发Solr。
1.什么是SolrJ呢? 答:Solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务.开始配置schema ...
- 百度编辑器UEditor,保存图片的配置问题
前言: 在使用百度编辑器UEditor的时候,如何将图片保存到服务器,我刚开始以为是要自己写上传文件的方法,后来发现只需要配置一下即可,如果你也正在使用百度富文本编辑器UEditor的话,这篇文章将非 ...
- Java生鲜电商平台-物流动态费率、免运费和固定运费设计与架构
Java生鲜电商平台-物流动态费率.免运费和固定运费设计与架构 说明:物流配送环节常见的有包邮,免运费,或者偏远地区动态费率,还存在一些特殊的情况,固定费率,那么如何进行物流的架构与设计呢? 运费之困 ...
- CSS box-sizing属性的正确用法
CSS自定义属性(变量) CSS box-sizing属性允许我们在元素的总宽度和高度中包含填充和边框. 没有CSS box-sizing属性 默认情况下,元素的宽度和高度计算如下: width + ...
- xcode6新建工程
xcode6中新建空工程 (2014-10-29 13:14:44) 转载▼ 标签: it ios 分类: iOS 升级xcode6之后,直接建立Empty工程后发现,这是太坑,真的是什么都没有啊.只 ...
- 【设计模式】Prototype
前言 这篇讲设计模式的部分相对较少.Prototype设计模式,它提供一种复制对象的思路.使用Prototype就可以在不需要了解类结构的前提下,复制一个现有对象.写了一个代码片段,讲解使用Objec ...
- Struts2 在Action中操作数据
Servlet存储数据的方式 在Servlet中,使用ServletContext对象来存储整个WebApp的数据,ServletContext中直接存储整个WebApp的公共数据,可使用set|ge ...