C++开源项目:mysqlpp项目环境搭建

219 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

本文是我之前在微信公众号上的一篇文章记录。原链接为:MySQL++学习笔记:环境搭建

今天主要是将C++的mysql API环境搭建起来,能正常编译,正常读写mysql数据库。

环境

目录结构

大概的目录结构如下,中间很多原文件和头文件没有列出来,mysql是官方开源的C接口,mysqlpp是开源的C++Wrapper。

myproj/
├── main.cpp
├── makefile
├── mysql
│   ├── bin
│   │ 
│   ├── COPYING
│   ├── docs
│   │   
│   ├── include
│   │   
│   ├── lib
│   │   ├── libmysqlclient.a
│   │   ├── libmysqlclient.so -> libmysqlclient.so.18
│   │   ├── libmysqlclient.so.18 -> libmysqlclient.so.18.4.
│   │   └── libmysqlclient.so.18.4.
│   └── README
└── mysqlpp
    ├── examples
    │   
    ├── src
    │   
    ├── ssx
    │
    └── test

Makefile

makefile文件很简单,就不多说了。

CC ?= gcc
CXX ?= g++
​
CURPATH := $(shell pwd)
​
CXXFLAGS :=
CXXFLAGS += -c -std=c++17 -Wall
​
​
LDFLAGS :=
LDFLAGS += -L$(CURPATH)/mysql/lib
​
LIBS :=
LIBS += -lmysqlclient
​
# 运行时查找链接库目录
ORIGIN := -Wl,-rpath=$(CURPATH)/mysql/lib
​
INC :=
INC += -I$(CURPATH)/mysql/include
INC += -I$(CURPATH)/mysqlpp/src
​
​
target := main.bin
filedir := $(CURPATH)/mysqlpp/src
SRC_C:=$(wildcard $(filedir)/*.c)
SRC_CPP:=$(wildcard $(filedir)/*.cpp)
​
​
#SRC_CPP += $(CURPATH)/main.cpp
SRC_CPP += $(CURPATH)/mysqlpp/examples/simple1.cpp
​
OBJ_C:= ${patsubst %.c, %.o, ${SRC_C}}
OBJ_CPP:= ${patsubst %.cpp, %.o, ${SRC_CPP}}
​
​
all: $(target)$(target): $(OBJ_C) $(OBJ_CPP)
    $(CXX) $(OBJ_C) $(OBJ_CPP) $(ORIGIN) $(LDFLAGS) $(LIBS) -o $@ 
​
​
%.o: %.cpp
    $(CXX) $(CXXFLAGS) -o $@ -c $< ${INC}
%.o: %.c
    $(CC) $(CXXFLAGS) -o $@ -c $< ${INC}
​
clean:
    rm -f $(OBJ_C) $(OBJ_CPP) $(target)

运行

今天的目的是编译以及成功运行一个sample,我们就选mysqlpp中的simple1.cpp来测试。

下面我们来看下simple1的代码:

#include "cmdline.h"
#include "printdata.h"
#include <mysql++.h>
#include <iostream>
#include <iomanip>using namespace std;
​
int
main(int argc, char *argv[])
{
    // Get database access parameters from command line
    mysqlpp::examples::CommandLine cmdline(argc, argv);
    if (!cmdline) {
        return 1;
    }
​
    // Connect to the sample database.
    mysqlpp::Connection conn(false);
    if (conn.connect(mysqlpp::examples::db_name, cmdline.server(),
            cmdline.user(), cmdline.pass())) {
        // Retrieve a subset of the sample tb_person table set up by resetdb
        // and display it.
        mysqlpp::Query query = conn.query("select * from tb_person");
        if (mysqlpp::StoreQueryResult res = query.store()) {
            cout << "We have:" << endl;
            mysqlpp::StoreQueryResult::const_iterator it;
            for (it = res.begin(); it != res.end(); ++it) {
                mysqlpp::Row row = *it;
                cout << '\t' << row[1] << endl;
            }
        }
        else {
            cerr << "Failed to get tb_person list: " << query.error() << endl;
            return 1;
        }
​
        return 0;
    }
    else {
        cerr << "DB connection failed: " << conn.error() << endl;
        return 1;
    }
}

首先是使用cmdline来解析运行时传入的参数来获取server,user和password,但是运行命令中并没有指定数据库的名称,搜索db_name发现是在cmdline.cpp中直接写的,我当前使用的数据库名是alpha_plus,所以我修改了,如下:

const char* db_name = "alpha_plus";

运行命令如下:

./main.bin -s 127.0.0.1 -u root -p 123456

运行结果:

codemaxi@pc:~/cpp/myproj$ ./main.bin -s 127.0.0.1 -u root -p 123456
We have:
        syb
        tyy
        james

查询成功,确实是数据库中的数据:

640.png

好了,今天的文章就到这里了,上面的源码放在gitee上了:gitee.com/codemaxi/my…,有兴趣的可以看看。