CentOS7 下 C++ 连接 Mysql 数据库的环境配置以及常用API测试

安装Mysql

首先到官网下载MySQL,由于我们使用的是CentOS7, 所以这里选择红帽的 8.0.29 版本。

使用 XFtp 工具将一下 7 个包传至 CentOS 的 /opt 目录下,

使用 rpm -ivh 命令按照以下顺序依次安装:

  •  mysql-community-common-8.0.29-1.el7.x86_64.rpm
  • mysql-community-client-plugins-8.0.29-1.el7.x86_64.rpm
  • mysql-community-libs-8.0.29-1.el7.x86_64.rpm
  • mysql-community-client-8.0.29-1.el7.x86_64.rpm
  • mysql-community-icu-data-files-8.0.29-1.el7.x86_64.rpm
  • mysql-community-server-8.0.29-1.el7.x86_64.rpm
  • mysql-community-devel-8.0.29-1.el7.x86_64.rpm

其中安装第三个包的报错解决方法:yum remove mariadb-libs,安装最后一个包报错的解决方案:yum install openssl-devel

安装完毕之后使用初始密码(mysqld.log里面)登录,修改密码就可以正常使用了。

创建一个临时的数据库以及表以供测试

为了测试 cpp 代码,我们创建 test 数据库:Create database test;

再创建临时的 user 表:

 

编写Cpp Code

C++操纵数据库时几个常用的函数api如下,所需参数见代码段中:

函数解释
mysql_init()初始化数据库句柄
mysql_options()设置额外的连接选项,如设置字符编码
mysql_real_connect()连接数据库
mysql_select_db()选择数据库
mysql_real_query()执行sql语句
mysql_store_result()获取查询结果集
mysql_fetch_row()获取查询到的每一行数据
mysql_free_result()释放结果集
mysql_close()关闭数据库
mysql_error()获取数据库当前操作失败的原因

操纵数据库所用到的变量类型:

类型解释
MYSQL数据库句柄
MYSQL_RES查询结果集
MYSQL_ROW记录结果集结构体

完成代码如下,已做注释:

#include <iostream>
#include <string.h>
#include <mysql/mysql.h>
#define SQL_MAX 256
using namespace std;

// 连接数据库 与 选择数据库
bool connectDB(MYSQL& mysql) {
    // 初始化数据库句柄
    mysql_init(&mysql);

    // 设置字符编码
    mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8");

    // 连接数据库
    MYSQL* ret = mysql_real_connect(&mysql, "localhost", "root", "yetao1996", "test", 3306, NULL, 0);
    if (ret == NULL) {
        cout << "数据库连接失败!失败原因:" << mysql_error(&mysql) << endl;
        return false;
    } else cout << "数据库连接成功!" << endl;

    // 选择数据库,成功返回0, 失败返回非0
    int res = mysql_select_db(&mysql, "test");
    if (res) {
        cout << "数据库选择失败!失败原因:" << mysql_error(&mysql) << endl;
        return false;
    } else cout << "数据库选择成功!" << endl;

    return true;
}

// 插入表数据
bool addTableData(int id, const char* user_name, const char* user_password) {
    MYSQL mysql;       // 数据库句柄
    char sql[SQL_MAX];        // 存储语句

    // 连接数据库
    if (!connectDB(mysql)) return false;

    // c语言字符串组合
    snprintf(sql, SQL_MAX, "INSERT INTO user VALUES (%d, '%s', '%s');", id, user_name, user_password);
    cout << "插入 sql 语句:" << sql << endl;

    int ret = mysql_real_query(&mysql, sql, (unsigned long)strlen(sql));
    cout << "执行插入语句,插入返回结果:" << ret << endl;

    if (ret) {
        cout << "插入表数据失败!失败原因:" << mysql_error(&mysql) << endl;
        return false;
    }

    cout << "插入数据成功!" << endl;

    mysql_close(&mysql);
    return true;
}

//删除表数据
bool delTableData(int id) {
    MYSQL mysql;        // 数据库句柄
    char sql[SQL_MAX];  // 存储sql语句

    //连接数据库
    if (!connectDB(mysql)) return false;

    // c语言字符串组合
    snprintf(sql, SQL_MAX, "DELETE FROM user where id = %d;", id);
    cout << "删除 sql 语句:" << sql << endl;

    // 执行sql,成功返回0
    int ret = mysql_real_query(&mysql, sql, (unsigned)strlen(sql));
    cout << "执行删除语句,插入返回结果:" << ret << endl;

    if (ret) {
        cout << "删除表数据失败!失败原因:" << mysql_error << endl;
        return false;
    }

    cout << "删除表数据成功!" << endl;
    mysql_close(&mysql);
    return true;
}

// 修改表数据
bool alterTableData(int id, const char* password) {

    MYSQL mysql;        // 数据库句柄
    char sql[SQL_MAX];  // sql语句

    // 连接数据库
    if (!connectDB(mysql)) return false;

    // c语言组合字符串
    snprintf(sql, SQL_MAX, "UPDATE user SET user_password = '%s' WHERE id = %d;", password, id);
    cout << "修改 sql 语句:" << sql << endl;

    // 执行sql语句,成功返回0
    int ret = mysql_real_query(&mysql, sql, (unsigned long)strlen(sql));
    cout << "执行修改语句,修改返回结果:" << ret << endl;

    if (ret) {
        cout << "数据修改失败!失败原因:" << mysql_error(&mysql) << endl;
        return false;
    }
    cout << "修改表数据成功!" << endl;
    mysql_close(&mysql);
    return true;
}

// 查询表数据
bool queryTableData() {
    MYSQL mysql;        // 数据库句柄
    MYSQL_RES* res;     // 查询结果集
    MYSQL_ROW row;      // 记录结构体
    char sql[SQL_MAX];  // SQL语句

    // 连接数据库
    if (!connectDB(mysql)) return false;

    // C语言组合字符串
    snprintf(sql, SQL_MAX, "SELECT id, user_name, user_password FROM user;");
    cout << "查询 sql 语句:" << sql << endl;

    int ret = mysql_real_query(&mysql, sql, (unsigned long)strlen(sql));
    cout << "执行查询语句,查询返回结果:" << ret << endl;

    if (ret) {
        cout << "数据查询失败!失败原因:" << mysql_error(&mysql) << endl;
        return false;
    }

    cout << "数据查询成功!" << endl;
    
    // 获取结果集
    res = mysql_store_result(&mysql);

    while (row = mysql_fetch_row(res)) {
        cout << "用户id:" << atoi(row[0]) << "\t";  // 转换为int类型,打印id
        cout << "用户姓名:" << row[1] << "\t";      // 打印用户姓名
        cout << "用户密码:" << row[2] << endl;          // 打印用户密码
    }
    mysql_free_result(res);
    mysql_close(&mysql);
    return true;
}


int main() {
    // addTableData(2, "zhuangqian", "66666666");
    // delTableData(2);
    // alterTableData(1, "88888888");
    queryTableData();

    return 0;
}

编译运行

很重要的一步是编写 makefile, 如下所示:

target=test
libs=test.cpp

$(target):$(libs)
    @$(CXX) -std=c++11 -I/usr/include/mysql -L/usr/lib64/mysql -lmysqlclient $^ -o $@

这里 -L 的地址可能有差别, 可是使用 mysql_config 指令查看,如果不加-I 或者 -L 的话,make 的时候可能找不到相应的库,或者链接的时候出问题!!!

make 一下生成 test 可执行文件, 运行验证结果:

[root@localhost test]# make
[root@localhost test]# ls
makefile  test  test.cpp
[root@localhost test]# ./test

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是在 CentOS 7 上编译安装 MySQL 5.6.50 的步骤: 1. 确保系统已安装必要的依赖库: ```shell yum -y install gcc gcc-c++ make cmake bison-devel ncurses-devel ``` 2. 下载 MySQL 5.6.50 源码包: ```shell wget https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.50.tar.gz ``` 3. 解压缩源码包: ```shell tar -zxvf mysql-5.6.50.tar.gz cd mysql-5.6.50 ``` 4. 配置编译选项: ```shell cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DSYSCONFDIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DWITH_SSL=system \ -DWITH_ZLIB=system \ -DWITH_LIBWRAP=0 \ -DWITH_EMBEDDED_SERVER=0 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BOOST=../boost ``` 5. 编译安装: ```shell make && make install ``` 6. 添加 MySQL 用户和用户组: ```shell groupadd mysql useradd -r -g mysql -s /bin/false mysql ``` 7. 初始化 MySQL 数据库: ```shell cd /usr/local/mysql ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/ ``` 8. 修改配置文件: ```shell cp support-files/my-default.cnf /etc/my.cnf vi /etc/my.cnf ``` 在 [mysqld] 段中添加以下内容: ```shell datadir=/usr/local/mysql/data socket=/usr/local/mysql/mysql.sock ``` 9. 启动 MySQL 服务: ```shell /usr/local/mysql/support-files/mysql.server start ``` 10. 设置开机自启动: ```shell cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql chmod +x /etc/init.d/mysql chkconfig mysql on ``` 11. 设置 MySQL 环境变量: ```shell echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile source /etc/profile ``` 现在,你已经成功地在 CentOS 7 上编译安装了 MySQL 5.6.50。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值