一 连接前准备
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)