(目录)
Ubuntu:22.04 LTS MySQL:8.0
一、安装MySQL
$sudo apt update
$sudo apt install -y mysql-server
$sudo systemctl status mysql.service
$sudo mysql -uroot
>alter user 'root'@'localhost' identified with mysql_native_password by '123456';
>update user set host='%' where user= 'root';
>grant all on *.* to 'root'@'%';
>flush privileges;
二、安装C++的支持库
sudo apt update
sudo apt-get install libmysqlclient-dev
dpkg -L libmysqlclient-dev
三、连接MySQL的代码示例
测试代码main.cpp
#include <iostream>
#include <mysql/mysql.h>
using namespace std;
// sql_create 创建数据库
void sql_create()
{
MYSQL mysql;
mysql_init(&mysql);
if (!mysql_real_connect(&mysql, "localhost", "root", "123456", 0, 3306,
NULL, 0))
{
cout << "mysql connect error: " << mysql_error(&mysql) << " "
<< mysql_errno(&mysql) << endl;
}
string str = "create database school;";
mysql_real_query(&mysql, str.c_str(), str.size());
str = "alter database school charset=utf8mb4;";
mysql_real_query(&mysql, str.c_str(), str.size());
str = "create table school.students(id int(10) primary key auto_increment, name varchar(20) not null, age int(3) not null);";
mysql_real_query(&mysql, str.c_str(), str.size());
mysql_close(&mysql);
}
// sql_add 增加数据
void sql_add()
{
MYSQL mysql;
mysql_init(&mysql);
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8mb4");
mysql_options(&mysql, MYSQL_INIT_COMMAND, "SET NAMES utf8mb4");
if (!mysql_real_connect(&mysql, "localhost", "root", "123456", "school", 3306,
NULL, 0))
{
cout << "mysql connect error: " << mysql_error(&mysql) << " "
<< mysql_errno(&mysql);
}
string str = "insert into students(id, name, age) values(null, \'黄飞鸿\', 30)";
mysql_real_query(&mysql, str.c_str(), str.size());
str = "insert into students(id, name, age) values(null, \'十三姨\', 28)";
mysql_real_query(&mysql, str.c_str(), str.size());
str = "insert into students(id, name, age) values(null, \'王武\', 33)";
mysql_real_query(&mysql, str.c_str(), str.size());
str = "insert into students(id, name, age) values(null, \'苏查擦耳灿\', 29)";
mysql_real_query(&mysql, str.c_str(), str.size());
str = "insert into students(id, name, age) values(null, \'赵君竹\', 30)";
mysql_real_query(&mysql, str.c_str(), str.size());
mysql_close(&mysql);
}
// sql_modify 修改数据
void sql_modify()
{
MYSQL mysql;
mysql_init(&mysql);
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8mb4");
mysql_options(&mysql, MYSQL_INIT_COMMAND, "SET NAMES utf8mb4");
if (!mysql_real_connect(&mysql, "localhost", "root", "123456", "school", 3306,
NULL, 0)) {
cout << "mysql connect error: " << mysql_error(&mysql) << " "
<< mysql_errno(&mysql);
}
string str = "update students set age = 35 where name = \'王武\'";
mysql_real_query(&mysql, str.c_str(), str.size());
mysql_close(&mysql);
}
/// sql_delete 删除数据
void sql_delete()
{
MYSQL mysql;
mysql_init(&mysql);
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8mb4");
mysql_options(&mysql, MYSQL_INIT_COMMAND, "SET NAMES utf8mb4");
if (!mysql_real_connect(&mysql, "localhost", "root", "123456", "school", 3306,
NULL, 0)) {
cout << "mysql connect error: " << mysql_error(&mysql) << " "
<< mysql_errno(&mysql);
}
string str = "delete from students where name = \'苏查擦耳灿\'";
mysql_real_query(&mysql, str.c_str(), str.size());
mysql_close(&mysql);
}
// sql_query 查询数据
void sql_query()
{
MYSQL mysql;
mysql_init(&mysql);
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8mb4");
mysql_options(&mysql, MYSQL_INIT_COMMAND, "SET NAMES utf8mb4");
if (!mysql_real_connect(&mysql, "localhost", "root", "123456", "school", 3306,
NULL, 0)) {
cout << "mysql connect error: " << mysql_error(&mysql) << " "
<< mysql_errno(&mysql);
}
string str = "select * from students;";
mysql_real_query(&mysql, str.c_str(), str.size());
MYSQL_RES *result = mysql_store_result(&mysql);
MYSQL_ROW row;
while (row = mysql_fetch_row(result))
{
cout << "id: " << row[0] << " name: " << row[1] << " age: " << row[2]
<< endl;
}
mysql_free_result(result);
mysql_close(&mysql);
}
int main()
{
cout << "创建数据库..." << endl;
sql_create();
cout << "添加数据..." << endl;
sql_add();
cout << "查询数据..." << endl;
sql_query();
cout << "修改数据..." << endl;
sql_modify();
cout << "查询数据..." << endl;
sql_query();
cout << "删除数据..." << endl;
sql_delete();
cout << "查询数据..." << endl;
sql_query();
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.22)
project(testbed)
file(GLOB SRCS "./*.cpp")
file(GLOB HDRS "./*.h")
add_definitions("-Wall -g")
add_executable(testbed ${SRCS} ${HDRS})
target_link_libraries(testbed -lmysqlclient)