文档章节

(二)Ubuntu 18 下安装使用 C++ ODB 连接mysql

o
 osc_a8eumg6j
发布于 2019/12/29 00:35
字数 645
阅读 47
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

接着我们采用 ODB 的案例利用odb 编译器生成相应的代码吧

#ifndef PERSON_HXX
#define PERSON_HXX

#include <string>
#include <cstddef> // std::size_t

#include <odb/core.hxx>

#pragma db object
class person
{
public:
  person (const std::string& first,
          const std::string& last,
          unsigned short age)
      : first_ (first), last_ (last), age_ (age)
  {
  }

  const std::string&
  first () const
  {
    return first_;
  }

  const std::string&
  last () const
  {
    return last_;
  }

  unsigned short
  age () const
  {
    return age_;
  }

  void
  age (unsigned short age)
  {
    age_ = age;
  }

private:
  friend class odb::access;

  person () {}

  #pragma db id auto
  unsigned long id_;

  std::string first_;
  std::string last_;
  unsigned short age_;
};

#pragma db view object(person)
struct person_stat
{
  #pragma db column("count(" + person::id_ + ")")
  std::size_t count;

  #pragma db column("min(" + person::age_ + ")")
  unsigned short min_age;

  #pragma db column("max(" + person::age_ + ")")
  unsigned short max_age;
};
#endif

这个是 person.hxx  可以根据命令 生成代码 sql 

 

person-odb.cxx

person-odb.hxx 

person.hxx

person.ixx

这都是程序中需要用的 

person.sql 是数据库中使用的 

 

为了更加直观的测试数据库 我安装了一个mysql 图形界面mysql-workbench

sudo apt-get install mysql-workbench

登录localhost 输入账号密码 新建一个schema  名字为person 的数据库

 

 然后双击打开person 这个数据库  点击-file->open sql script... ->选中生成的person.sql 文件即可生成表

好的数据库已经处理完毕

 

我们接着打开qt Creator 我打算在/home/你的用户/qtproject 下新建一个qt项目 test 

 

 

 新建完毕如上图所示

然后我们在test 目录下新建一个odbModule文件夹 放置有关odb的文件

person-odb.cxx

person-odb.hxx 

person.hxx

person.ixx

 

右键test项目 添加依赖库 Add Library->External library 外部依赖库 -> linux打勾  其他去掉  

连续将 usr/lib/x86_64-linux-gnu/libodb.a和 usr/lib/x86_64-linux-gnu/libodb-mysql.a 添加进来 pro 文件改为以下

 

 

 接着添加源文件 Add Existing Files-> 将odb下的四个文件全部包含进来

可能会出现环境问题无法运行Qt

执行  sudo apt-get install libgl1-mesa-dev

在main 函数中添加测试代码

 

#include "mainwindow.h"

#include <QApplication>


#include <odb/database.hxx>
#include <odb/database.hxx>
#include <odb/transaction.hxx>
#include <odb/mysql/database.hxx>

#include "odbModule/person.hxx"
#include "odbModule/person-odb.hxx"
//#include "odbModule/person-odb.ixx"
//#include "odbModule/person-odb.cxx"

using namespace std;
using namespace odb::core;
#include <iostream>
#include <memory>
using namespace std;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();


    auto_ptr<odb::database> db (
            new odb::mysql::database (
            "root"     // database login name
            ,"root" // database password
            ,"person" // database name
            ,"localhost"
            ,3306
            ));

    unsigned long john_id, joe_id;

    // Create a few persistent person objects.
    //
    {
      person john ("John", "Doe", 33);
      person jane ("Jane", "Doe", 32);
      person joe ("Joe", "Dirt", 30);

      transaction t (db->begin ());

      // Make objects persistent and save their ids for later use.
      //
      john_id = db->persist (john);
      db->persist (jane);
      joe_id = db->persist (joe);

      t.commit ();
    }

    return a.exec();


}

运行程序观察数据库 成功

 

 

好了C++ odb 对mysql 的初级应用就到这里  下次写如何利用基础的关系以表为对象高效开发 数据库相关代码  

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
6.2K
18
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
CDH5: 使用parcels配置lzo

一、Parcel 部署步骤 1 下载: 首先需要下载 Parcel。下载完成后,Parcel 将驻留在 Cloudera Manager 主机的本地目录中。 2 分配: Parcel 下载后,将分配到群集中的所有主机上并解压缩。 3 激...

cloud-coder
2014/07/01
6.9K
1
树莓派(Raspberry Pi):完美的家用服务器

自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...

异次元
2013/11/09
8K
8

没有更多内容

加载失败,请刷新页面

加载更多

wasm cpp 传值

简单传递基础值 #include <emscripten.h>extern "C"{ int fib(int n);}int fib(int n){ return n < 2 ? n : fib(n - 1) + fib(n - 2);}int main(int argc, char......

阿豪boy
10分钟前
0
0
全球产业数字化转型趋势及方向研判

中国电子学会研究咨询中心主任、中国数字经济百人会秘书长李颋发布由中国数字经济百人会依托中国电子学会专业研究团队编制的《全球产业数字化转型趋势及方向研判》。该报告结合国内外领军企业...

Idea
11分钟前
0
0
再谈测试浮躁论——深度好文!

目前来说软件测试人员都有这么些问题吧,这大概已经成为中国目前测试的瓶颈了。人心浮躁大概不是某些职业人特有的,其实是我们这些年轻人的通病了。但身为测试人员,当你在应聘找工作的时候是...

程序员一凡
19分钟前
10
0
Spring Boot 教程 - 文件上传下载

在日常的开发工作中,基本上每个项目都会有各种文件的上传和下载,大多数文件都是excel文件,操作excel的JavaAPI我用的是apache的POI进行操作的,POI我之后会专门讲到。此次我们不讲如何操作...

Butterfly-Tri
58分钟前
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部