zoukankan      html  css  js  c++  java
  • 【一】ODB

    本文以MySQL数据库为例,其他数据类似。

    官方文档和下载

    ODB官方首页    官方开发者说明书(开发教程)

    安装下载首页(下载与安装教程Windows/Linux)

    Windows安装步骤(都是英文版,流程虽然详细,但是却略显麻烦,主要是因为ODB的机制造成的)

    ODB的使用原理

    下面介绍ODB的使用原理来说明为什么会有这么多步骤:

    ODB的架构和流程

    (1)你自己定义一个C++的Person类.h/.cpp
    (2)用安装的ODB Compiler编译Person.h得到新的

    必选:

    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已经可以使用。

    下载并编译LIBODBlibodb-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.ziplibodb-oracle-2.4.0.ziplibodb-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++ODBodb-examples-2.4.0odb-examples-2.4.0helloDebug】下,为了运行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 

    直接修改代码,在代码中写死连接数据库的信息:

    原来的代码:

    [cpp] view plain copy
     
    1. auto_ptr<database> db (create_database (argc, argv));  

    修改访问数据库的代码:

    [cpp] view plain copy
     
    1. auto_ptr<odb::database> db (  
    2.     new odb::mysql::database (  
    3.     "root"     // database login name  
    4.     ,"123456" // database password  
    5.     ,"collect" // database name  
    6.     ,"localhost"  
    7.     ,13306  
    8.     ));  

    编译运行:



    这个例子可以跑起来其实是需要odb的所有步骤的,其他例子均可仿照这个例子的做法,自己创建的项目引用odb也是如此!奔跑吧,小怪兽!!

  • 相关阅读:
    javascript异步编程系列【十】—Jscex+Easeljs制作坦克大战
    博客园分页JQuery打造的分页无刷新的Repeater
    参赛作品
    摄像机、投影、3D旋转、缩放
    javascript异步编程系列【八】Jscex版火拼俄罗斯
    javascript异步编程系列【七】扫盲,我们为什么要用Jscex
    javascript异步编程系列【五】Jscex制作愤怒的小鸟
    javascript异步编程系列【六】Jscex版愤怒的小鸟之冲锋陷阵鸟
    每周优秀代码赏析—Jscex内核【一】
    javascript异步编程系列【一】用Jscex画圆
  • 原文地址:https://www.cnblogs.com/lidabo/p/7545508.html
Copyright © 2011-2022 走看看