【一】ODB - C++ 访问数据库的利器--Hello World On Windows(Version-24)
本文以MySQL数据库为例,其他数据类似。
官方文档和下载
安装下载首页(下载与安装教程Windows/Linux)
Windows安装步骤(都是英文版,流程虽然详细,但是却略显麻烦,主要是因为ODB的机制造成的)
ODB的使用原理
下面介绍ODB的使用原理来说明为什么会有这么多步骤:
ODB的架构和流程
必选:
MySQL官方C开发库
只用这个即可同时开发C++程序
作用:这个是MySQL官方提供的用于C开发程序读写MySQL提供头文件和动态链接库文件以及静态链接库文件,跟ODB没有任何关系。
这个不需要编译,提供现成的头文件和库文件。可以用C直接读写MySQL数据库。
官方下载地址(全部都有自己选): libmysqlclient
百度云下载仅提供:【mysql-connector-c-6.1.6-win32.zip】或者【mysql-connector-c-6.1.6-winx64.zip】
MySQL官方C++开发库
不建议用:
后来发现/cpp里面下载的压缩文件中并没有【mysql_version.h】和【mysql_time.h】而是在/c的C版本包里有。所以下载了上面/c网址下的包。下载:mysql-connector-c++-noinstall-1.1.6-win32.zip 或者 mysql-connector-c++-noinstall-1.1.6-win64.zip
下载并使用ODB编译器
官方下载地址 百度云下载:odb-2.4.0-i686-windows.zip
主要功能:将自定义ODB结构编译生成标准的.hxx头文件和标准的.cxx源文件。
这个是个bin/odb.exe可执行文件,免安装。要想使用这个EXE只需要打开CMD终端,将目录切换到此目录即可执行:
上图表示odb已经可以使用。
下载并编译LIBODB:libodb-2.4.0.zip
主要作用:官方名称叫一般运行时库Common Runtime Library (libodb),odb的主要功能接口都在这个库里面提供。这里面有源代码和VS工程,编译完生成的库文件即可投入使用。
下载并编译数据库运行时库LIBODB-<DATABASE>
官方下载地址 libodb-mssql-2.4.0.zip、libodb-oracle-2.4.0.zip、libodb-mysql-2.4.0.zip
百度云下载:libodb-mssql-2.4.0.zip、libodb-oracle-2.4.0.zip、libodb-mysql-2.4.0.zip
主要作用:将第三方数据库接口封装成统一接口给libodb,从而实现跨数据库访问。这些运行时库用VS Building之后会生成lib和dll文件。
libodb-mysql在编译的时候需要两个东西(参考INSTALL文件):
(1)libodb-2.4.0中编译生成的头文件和连接库
(2)MySQL的客户端包,也就是【mysql-connector-c-6.1.6-win32.zip】里面的头文件和连接库
添加方法参考:http://blog.csdn.net/calmreason/article/details/6989390
直接编译会因为(1)(2)你没有提供而报错:
将libodb的/lib和/odb目录拷贝到libodb-mysql的工程中覆盖
重新编译提示缺少mysql-connector-c头文件:
将mysql-connector-c-2.4.0中的include和lib目录拷贝到odb-mysql-2.4.0的工程中覆盖
重新设置工程属性,编译,编译成功:
Debug生成lib【odb-mysql-d.lib】和dll【odb-mysql-d-2.4-vc10.dll】文件
Release生成lib【odb-mysql-d.lib】和dll【odb-mysql-d-2.4-vc10.dll】文件
编译运行Hello World
官方下载地址 百度云下载:odb-examples-2.4.0.zip
选择examples版本(以MySQL为例):
将【hello-mysql-vc10】project设置为启动项目,直接编译会报错:error MSB6006: "cmd.exe" exited with code 9009.
这是odb环境变量没有设置成功的问题,需要将odb.exe路径设置到系统path变量中(最好重启生效)
之后会提示缺少一些头文件:主要是libodb的头文件、libodb-mysql的头文件
其实是需要:LIBODB(odb-d.lib)、LIBODB-<MYSQL>(odb-mysql-d.lib).(LIBMYSQLCLIENT(mysql-connector-c-6.1.6-win32)这个已经被编译到odblib-mysql中了,所以不需要了)。
头文件自己加,库文件需要什么工程里已经为你写好了:
由于刚才在编译libodb-mysql的时候已经将libodb和mysql-connector-c的资源添加过了。
所以现在只需要将libodb-mysql中的:include、odb、lib这三个目录靠过来并在example(或者你自己的工程)工程属性中添加引用即可。
目前项目中的【person.hxx】文件是一个odb模板文件,还不能直接被VS编译使用,项目中的【person-odb.hxx】、【person-odb.cxx】、【person-odb.ixx】也只是空引用,打不开,因为这些文件还不存在,需要odb编译器编译之后生成新的.h文件和.cpp文件才可以被CPP项目使用
将【person.hxx】拷贝到odb的bin目录下,cmd执行:odb -d mysql --generate-query --generate-schema person.hxx
执行完生成【person-odb.hxx】、【person-odb.cxx】、【person-odb.ixx】、【person.sql】这四个文件:
将这四个文件拷贝到本项目【person.hxx】文件同级目录下
创建数据库表
用【person.sql】创建数据库表。
可以成功编译:
生成的文件driver.exe在目录:【F:\编程开发\C++\ODB\odb-examples-2.4.0\odb-examples-2.4.0\hello\Debug】下,为了运行exe,需要将运行时库文件
libmysql.dll、odb-d-2.4-vc10.dll、odb-mysql-d-2.4-vc10.dll拷贝到此目录。
执行Start Without Debugging:
2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
请按任意键继续. . .
可以看出程序默认连接本机的MySQL服务,并且企图访问端口:10061。
其实这需要具体的设置:ip,port,usr,psw,默认情况下程序使用命令行获取这些信息,参考2.3 Compiling and Running,关于如何使用database的构造函数直接传递数据库访问信息参考:3.4 Database
直接修改代码,在代码中写死连接数据库的信息:
原来的代码:
- auto_ptr<database> db (create_database (argc, argv));
修改访问数据库的代码:
- auto_ptr<odb::database> db (
- new odb::mysql::database (
- "root" // database login name
- ,"123456" // database password
- ,"collect" // database name
- ,"localhost"
- ,13306
- ));
编译运行:
这个例子可以跑起来其实是需要odb的所有步骤的,其他例子均可仿照这个例子的做法,自己创建的项目引用odb也是如此!奔跑吧,小怪兽!!
【一】ODB - C++ 访问数据库的利器--Hello World On Windows(Version-24)的更多相关文章
- 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文件会出现如下错误 错 ...
- C++版本 ORM 访问数据库之ODB 的Window环境编译(一)
先简单说说我为什么要编译一个ORM访问数据库的版本, 以前在做C#访问数据库时候, 直接以orm方式访问数据库, 代码写起来简单, 不用写各种复杂的sql语句, 直接有orm框架生成, 后来转到C+ ...
- C#使用ADO.NET访问数据库(一)
博主好久没更新博客了,最近有点忙(打麻将0.0..),今天更新一篇C#的,我还是想坚持更新博客,分享一下自己的心得,闲话少说,开始正题~~ ADO.NET概述:ADO.NET的作用在于他是客户端访问服 ...
- Android 异步任务,通过PHP访问数据库,多线程,线程间通讯
文章列表MainActivity.java package com.eric.asynctask; import java.io.IOException; import java.util.Array ...
- ADO.NET 访问数据库
对数据库的访问时各种数据库应用程序开发的核心技术,.NET框架中提出的ADO.NET技术为应用程序的开发提供了一致的接口,增强了程序的可移植性和可扩展性. a:使用链接对象Connection连接数据 ...
- 如何通过JDBC访问数据库
Java数据库连接(JDBC)用与在Java程序中实现数据库操作功能,它提供了执行SQL语句.访问各种数据库的方法,并为各种不同的数据库提供统一的操作接口,java.sql包中包含了JDBC操作数据库 ...
- (转)发布Silverlight+WCF程序到IIS后,客户端访问数据库失败的解决方案
转自url:http://greatverve.cnblogs.com/archive/2011/11/30/silverlight-wcf-pub.html 我们在编写Silverlight程序时, ...
- 在 Mac OS X 上创建的 .NET 命令行程序访问数据库 (使用Entity Framework 7 )
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
随机推荐
- 笔记-python -asynio
笔记-python -asynio 1. 简介 asyncio是做什么的? asyncio is a library to write concurrent code using the a ...
- 笔记-python lib-pymongo
笔记-python lib-pymongo 1. 开始 pymongo是python版的连接库,最新版为3.7.2. 文档地址:https://pypi.org/project/pymong ...
- PHP.28-TP框架商城应用实例-后台5-多表操作-商品表与品牌表
表与表之间的关系:1:1 1:多 多:多 功能需求决定表关系 此处的表关系为:品牌表:商品表=1:多 1.首先在表结构上关联,在多的表(商品表)添加一个字段,关联一的表(品牌表)的ID(主键) 添加字 ...
- 解决boostrap-table有水平和垂直滚动条时,滚动条滑到最右边表格标题和内容单元格无法对齐的问题
问题:boostrap-table有水平和垂直滚动条时,滚动条不高的时候(滚动高度比较大的时候没有问题),滚动条滑到最右边表格标题和内容单元格无法对齐的问题 问题原因:bootstrap-table源 ...
- 1,MongoDB简介和安装
一.初识MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数 ...
- Adobe Photoshop Lightroom 5.3和序列号
Adobe Photoshop Lightroom是一款针对专业摄影师开发的专业照片管理和处理软件.12.11发布了Lightroom 5.3正式版,这个版本支持RAW格式(相机原始数据格式),镜头配 ...
- [转]多多“亦”善:把大量内容放到一页PPT的5个技巧
技巧一:利用灰色“隐蔽”内容 灰色有个好处:自动成为“备胎”,在“现任”被浏览后才会被注意到.所以使用灰色能够让页面内容看起来没那么多. 技巧二:对齐和亲密 这是排版的两个原则. 对齐是指对页面上的元 ...
- php jsonp单引号转义
php中jsonp输出时一般用下面的格式: callbackname('json string'); 如果中间的json string中含有单引号,这个输出就是有问题的,调用方一般是无法处理的,所以我 ...
- gradle构建
https://blog.csdn.net/baidu_30809315/article/details/77865414
- Python全栈工程师(面向对象)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰 开局一张图 Python人工智能从入门到精通 day16补充: 异常处理 文件 ...