前言
安装各种库之后用c++连接本地的数据库一直报错,被自己蠢哭了,将这个使用的过程记录下来。
安装mysql
环境:ubuntu18
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
mysql-server是本地需要运行的mysql服务器,安装配置步骤参考:
(38条消息) Ubuntu安装MySQL_wavehaha的博客-CSDN博客
mysql-client和libmysqlclient-dev是开发需要的,没有配置选项,直接安装。
mysql的配置检查
首先确保已经安装上mysql服务器,然后启动mysql服务
mysql --version
systemctl start mysql
进入mysql命令行,新建一个数据库,以便后续用c++连接
# 一定要加上-u选项,否则命令行里面命令不会生效
mysql -uroot -p
命令行中新建database:
create database hh
show databases
为了避免登录的时候出现权限等问题,直接设置本地可以不验证登录
在Ubuntu终端命令行:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
在打开的配置文件末尾加入
skip-grant-tables
如下:
在c++中使用mysql
mysql的 c api 参考文档:
MySQL :: MySQL 5.7 C API 开发人员指南 :: 5.4.54 mysql_real_connect()
由于是apt-get安装,所以mysql头文件就在/usr/include/下,本地g++是默认包含该路径的,直接
#include<mysql/mysql.h>
就可以,但是cmake中需要将用于连接mysql的mysqlclient链接到自己的构建目标中去:
#CMakeLists中添加链接:
add_executable(Hello main.cpp)
target_link_libraries(Hello mysqlclient)
#-----------------------------------
# 如果不用cmake,而是 g++,则需要用:
g++ -o test test.c `mysql_config --cflags --libs`
然后就可以使用mysql相关的函数操作mysql了。
网上抄的例子:
#include <iostream>
#include<cstring>
#include<mysql/mysql.h>
using namespace std;
int main(){
MYSQL mysql;
mysql_init(&mysql);
if (!mysql_real_connect(&mysql,"localhost","root","111111","hh",0,NULL,0))
{
cout<<"Failed to connect to database: Error: "<<mysql_error(&mysql)<<endl;
}
if (mysql_real_query(&mysql, "select * from hh;", (unsigned long)strlen("select * from hh;"))){
cout << "mysql_real_query failure!" << endl;
return 0;
}
// 存储结果集
MYSQL_RES *res = mysql_store_result(&mysql);
if (res==NULL){
cout << "mysql_store_result failure!" << endl;
return 0;
}
// 重复读取行
MYSQL_ROW row;
while (row = mysql_fetch_row(res)){
cout << row[0]<<" "<<row[1]<<" "<<row[2] << endl;
}
// 释放结果集
mysql_free_result(res);
// 关闭Mysql连接
mysql_close(&mysql);
return 0;
}
输出:
mysql命令行中:
c++程序: