加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

12_MySQL数据库_CentOS7下C-C++链接MySQL

发布时间:2022-12-03 14:05:11 所属栏目:MySql教程 来源:互联网
导读: 此专栏所有章节快速导航
01_MySQL数据库_CentOS7安装MySQL
02_MySQL数据库_数据库基础知识
03_MySQL数据库_库的操作
04_MySQL数据库_表的操作
05_MySQL数据库_数据类型
06_MySQL数据库_表的

此专栏所有章节快速导航

01_MySQL数据库_CentOS7安装MySQL

02_MySQL数据库_数据库基础知识

03_MySQL数据库_库的操作

04_MySQL数据库_表的操作

05_MySQL数据库_数据类型

06_MySQL数据库_表的约束

07_MySQL数据库_增删查改

08_MySQL数据库_复合查询

09_MySQL数据库_索引

10_MySQL数据库_事务管理

11_MySQL数据库_用户管理

12_MySQL数据库_CentOS7下C-C++链接MySQL

文章目录

一. 链接mysqlclient动态库时报错 1.1 报错提示信息

/opt/rh/devtoolset-7/root/usr/libexec/gcc/x86_64-redhat-linux/7/ld: 找不到 -lmysqlclient collect2: error: ld returned 1 exit status make: *** [test_mysql] 错误 1

1.2 分析原因

提示结果为找不到动态库mysql数据库,经过排查我发现mysql的动静态库安装时不在/usr/lib64下,而是在/usr/lib64/mysql目录下,如下图所示

在这里插入图片描述

1.3 解决方法

下面是我的Makefile文件

test_mysql:test_mysql.cpp
	g++ -o $@ $^  -std=c++11 -L/usr/lib64/mysql -lmysqlclient  # 编译时用-L指明所在目录
.PHONY:clean
clean:
	rm -rf test_mysql

二. C/C++链接MySQL代码部分

#include 
#include 
#include 
#include 
const char* const host = "127.0.0.1";  // 数据库所在主机的IP地址
const char* const user = "lihua";  // 数据库用户名
const char* const password = "Ji3#.10086";  // 数据库用户对应的密码
const char* const db = "db_for_lihua";  // 需要操作的数据库
const unsigned int port = 3306;  // 数据库端口号
int main()
{
    // 1. 创建mysql句柄
    MYSQL* mysql1 = mysql_init(nullptr);
    
    // 获取mysql数据库版本信息
    //std::cout << "mysql version:" << mysql_get_client_info() << std::endl;
	
    // 2. 连接数据库
	if (mysql_real_connect(mysql1, host, user, password, db, port, nullptr, 0) == nullptr)
	{
        std::cerr << "connet failed!" << std::endl;
        return 1;
	}
    else 
    {
        std::cout << "connect success!" << std::endl;
        // 设置连接的编码格式
        mysql_set_character_set(mysql1, "utf8");  // 如果发现插入数据为乱码就需要改一下编码格式
        // 3. 执行sql语句
        
        // 3.1 插入
        // std::string sql = "insert into student(name) value('李华')";
        
        // 3.2 查询
        std::string sql = "select * from student";
        
        // 执行sql语句
        int code = mysql_query(mysql1, sql.c_str());
        if (code != 0)
        {
            std::cerr << "execute:" << sql << " failed" << std::endl;
        }
        else 
        {
            std::cout << "execute:" << sql << "success" << std::endl;
            // 3.2.1 获取查询结果的行号和列号
            MYSQL_RES* result = mysql_store_result(mysql1);
            int row = mysql_num_rows(result);
            int col = mysql_num_fields(result);
            // 3.2.2 获取字段名
            MYSQL_FIELD* field = mysql_fetch_fields(result);
            for (int i = 0; i < col; i++)
            {
                std::cout << field[i].name << "\t";
            }
            std::cout << std::endl;
            // 3.2.3 获取查询的结果(不包括字段行)
            for (int i = 0; i < row; i++)
            {
                MYSQL_ROW line = mysql_fetch_row(result);  // MYSQL_ROW是一个二级指针
                for (int j = 0; j < col; j++)
                {
                    std::cout << line[j] << "\t";
                }
                std::cout << std::endl;
            }
            //free(result_backup);
        }
    }
    
    mysql_close(mysql1);
    return 0;
}

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!