在Linux环境下使用C++连接并操作MySQL数据库需要一些准备工作和步骤。以下是详细的步骤和示例代码。
准备工作
首先,需要确保系统中安装了MySQL服务器和开发库。可以使用以下命令安装MySQL服务器和开发库:
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
安装完成后,确保MySQL服务正在运行:
sudo service mysql start
配置MySQL
初次安装MySQL后,可能无法直接使用root用户登录。可以通过查看MySQL配置文件获取默认用户名和密码:
sudo cat /etc/mysql/debian.cnf
使用配置文件中的用户名和密码登录MySQL,并设置root账户的密码:
mysql -udebian-sys-maint -p
Enter password: (输入配置文件中的密码)
mysql> update user set password=password('新密码') where user='root' and host='localhost';
mysql> flush privileges;
编写C++代码
在编写C++代码时,需要包含MySQL的头文件,并链接MySQL的库。以下是一个示例代码,展示了如何使用C++连接MySQL数据库并执行查询操作:
#include <mysql/mysql.h>
#include <iostream>
#include <string>
int main() {
MYSQL *mysql;
MYSQL_RES *res;
MYSQL_ROW row;
// 初始化MySQL对象
mysql = mysql_init(NULL);
if (mysql == NULL) {
std::cerr << "mysql_init() failed\n";
return EXIT_FAILURE;
}
// 连接数据库
if (mysql_real_connect(mysql, "localhost", "root", "新密码", "test_db", 0, NULL, 0) == NULL) {
std::cerr << "mysql_real_connect() failed\n";
mysql_close(mysql);
return EXIT_FAILURE;
}
// 设置字符集
if (mysql_set_character_set(mysql, "utf8")) {
std::cerr << "mysql_set_character_set() failed\n";
mysql_close(mysql);
return EXIT_FAILURE;
}
// 执行SQL查询
if (mysql_query(mysql, "SELECT * FROM test_table")) {
std::cerr << "SELECT * FROM test_table failed. Error: " << mysql_error(mysql) << "\n";
mysql_close(mysql);
return EXIT_FAILURE;
}
// 获取查询结果
res = mysql_store_result(mysql);
if (res == NULL) {
std::cerr << "mysql_store_result() failed. Error: " << mysql_error(mysql) << "\n";
mysql_close(mysql);
return EXIT_FAILURE;
}
// 打印查询结果
int num_fields = mysql_num_fields(res);
while ((row = mysql_fetch_row(res))) {
for (int i = 0; i < num_fields; i++) {
std::cout << (row[i] ? row[i] : "NULL") << " ";
}
std::cout << "\n";
}
// 释放结果集
mysql_free_result(res);
// 关闭MySQL连接
mysql_close(mysql);
return EXIT_SUCCESS;
}
编译和运行
先找到安装的libmysqlclient.so.21 和libmysqlclient.so.21库
find / -name "libmysqlclient.so.21"
find / -name "libmysqlclient.so"
找到这两个库文件直接复制到本地程序所需的执行目录中
sudo cp /usr/lib/aarch64-linux-gnu/libmysqlclient.so* xxx
其中/usr/lib/aarch64-linux-gnu/替换为自己的真实路径
如果为纯净c++则编译时
g++ -o mysql_example mysql_example.cpp -lmysqlclient /mysql_example
在qt中则直接手动添加外部库到.pro使用