Linux下使用C++连接MySql8.0一二三事

一  连接前准备

1  正确安装数据库 MySql 8.0

官网下载对应自己操作系统以及版本的包即可,这一步一定要正确安装。

推荐在官网https://dev.mysql.com/downloads/下载包,之后使用 dpkg 命令安装。

2  安装 boost 库

命令:

sudo apt-get install libboost-all-dev

3  安装 libmysqlclient 库

命令:

sudo apt-get install libmysqlclient-dev

注意,不安装这个库会提示错误(可能有多个):

libmysqlclient.so: cannot open shared object file: No such file or directory

4  安装 C++Connector 库

官网地址:https://dev.mysql.com/downloads/connector/cpp/

注意这几个库是不一样的,选择:

libmysqlcppconn8-2_8.0.20-1ubuntu18.04_amd64.deb

安装之后linux便能链接到这个库了,不过我们还需要头文件,把头文件写入CMakeList,之后链接 mysqlcppconn8 即可:

include_directories(/usr/include/mysql-cppconn-8)

link_libraries(mysqlcppconn8)

target_link_libraries(your_prj_name mysqlcppconn8)

5  CMakeLists

cmake_minimum_required(VERSION 3.16)
project(your_prj_name)

set(CMAKE_CXX_STANDARD 11)

#自身编写的头文件
include_directories(./include)

#外部头文件
#使用自己安装 mysqlcppconn8 的目录即可
include_directories(/usr/include/mysql-cppconn-8)

#项目源文件
set(SOURCE
        main.cpp
        source/xxx.cpp
        source/yyy.cpp
        source/zzz.cpp
        )

#链接外部库
link_libraries(mysqlcppconn8)

add_executable(your_prj_name ${SOURCE})
target_link_libraries(your_prj_name mysqlcppconn8)

二  连接数据库

为了方便测试,首先在 MySql 8.0 中创建数据库:webserver,并在库中创建表:

CREATE TABLE `webserver`.`user` (
  `username` VARCHAR(16) NOT NULL,
  `email` VARCHAR(255) NULL,
  `password` VARCHAR(32) NOT NULL,
  `create_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`username`));

 在其中插入一条数据:

insert into user (`username`, `email`, `password`) values ('test', 'test@163.com', 'testpwd');

注意:`create_time`的数据类型是 TIMESTAMP,mysqlcppconn8 并不支持这样的数据类型(如果使用 C++ API 的话),使用C API中的 MYSQL_TIME 数据结构可以存取时间类型的数据,官方文档:

https://dev.mysql.com/doc/refman/8.0/en/c-api-prepared-statement-date-handling.html

若一定要使用 C++ API 官方建议在数据库中做类型转换(本文采取这种做法),官方文档:

https://forums.mysql.com/read.php?167,683855,683891#msg-683891

#include <iostream>
#include <mysqlx/xdevapi.h>

using namespace mysqlx;

void ptUser() {
    using std::cout;
    using std::endl;
    using std::vector;

    try {
        const char* url = "mysqlx://root:rootpwd@127.0.0.1:33060/webserver?ssl-mode=disabled";  
        //注意 mysqlcppconn8 默认使用的端口:33060,若连接3306端口会提示错误
        //使用用户名:root
        //用户 root 的密码是:rootpwd
        //主机:127.0.0.1
        //端口:33060
        //数据库:webserver

        cout << "Creating session on " << url
             << " ..." << endl;

        SessionSettings option("127.0.0.1", 33060, "root", "rootpwd");
        Session sess(option); //也可使用这种方式连接
        //Session sess(url);  第一种方式建立连接
        
        cout <<"Done!" <<endl;
        cout <<"Session accepted, creating collection..." <<endl;

        sess.sql("use webserver").execute();  //使用数据库 webserver

        //如何存取时间类型值,在 mysqlcppconn8 中并没有很好的规定
        //注意,我们在此处将字符串转为 timestamp 类型,以插入该条数据
        sess.sql(R"(insert into user (`username`, `email`, `password`, `create_time`) values
                         ('ice', 'kawaii@qq.com', '654321', timestamp('2020-06-14 17:00:00')))"
                         ).execute();

        //注意,我们在此处 timestamp 类型转换为字符串,以取出该条数据
        RowResult rs = sess.sql("select username, email, password, cast(create_time as char) from user").execute();
        for (auto it = rs.begin();it != rs.end();++it){
            cout << (*it).get(0).get<string>() <<" ";
            cout << (*it).get(1).get<string>() <<" ";
            cout << (*it).get(2).get<string>() <<" ";
            cout << (*it).get(3).get<string>();
            cout << endl;
        }

    } catch (const Error& e) {
        cout << e.what() <<endl;
    }
}

 输出结果如下:

Creating session on mysqlx://root:rootpwd@127.0.0.1:33060/webserver?ssl-mode=disabled ...
Done!
Session accepted, creating collection...
ice kawaii@qq.com 654321 2020-06-14 17:00:00
test test@163.com testpwd 2020-06-12 22:52:36

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《C MySQL8.0数据库跨平台编程实战笔记》是一本介绍如何在不同平台上使用C语言和MySQL8.0数据库进行编程的实用指南。本书从数据库的基本概念开始讲解,包括数据库的设计、表的创建和管理,以及SQL语句的基本使用方法。然后深入探讨了C语言和MySQL8.0数据库的结合,通过示例代码演示了如何在不同操作系统上使用C语言连接和操作MySQL8.0数据库。 本书以实战为主,介绍了在Windows、Linux和MacOS等不同平台上使用C语言编写跨平台的数据库程序的方法。读者可以通过学习本书,掌握在不同平台上使用C语言和MySQL8.0数据库的技巧和方法。此外,本书还介绍了一些实用的编程技巧和调试方法,帮助读者更好地应用C语言和MySQL8.0数据库进行开发和调试。 作者通过丰富的实例和详细的讲解,使读者能够快速掌握使用C语言和MySQL8.0数据库进行跨平台编程的技能。不论是初学者还是有一定开发经验的读者,都可以从本书中获得丰富的知识和经验。本书内容通俗易懂,深入浅出,适合作为C语言和数据库编程的入门指南,也适用于数据库开发人员和C语言程序员作为进阶学习和实践的参考。 总之,《C MySQL8.0数据库跨平台编程实战笔记》是一本实用性强、内容丰富的技术书籍,对于想要学习C语言和MySQL8.0数据库跨平台编程的读者来说是一本难得的好书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值