栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Linux

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux

这里采用连接外部库的方式,使用C语言连接MySQL

文章目录
  • 1.项目导入MySQL
  • 2.调用MySQL测试
    • 初始化
    • 下达MySQL增删改命令
    • 调用MySQL查询数据
    • 事务等其他操作

1.项目导入MySQL

建议先看一下Linux_动态库与静态库(制作与安装)

首先先看一下自己是否有MySQL的头文件和库,如果没有去官网下载一下

检查命令,检查头文件和库是否存在

find /usr/include/ -name mysql.h
find /usr/lib64/ -name libmysqlclient.*


C语言调用MySQL库的下载地址

下载好后将压缩包上传到Linux上(新建一个文件夹)
使用tar xzf 安装包名解压,并使用mv命令将解压后的文件重命名

这时新创建一个项目文件,创建测试文件
使用软链接命令链接我们刚才解压的头文件和库

ln -s ~/LibMySQL/mysql_lib/include include;
//~/LibMySQL/mysql_lib/include 是解压后头文件的路径
//include 是软链接名
ln -s ~/LibMySQL/mysql_lib/lib lib;

建立好后结果如下:


注意:链接了外部库的话Makefile 编译时需要指定
具体看Linux_动态库与静态库(制作与安装)

Makefile如下

MySQL:TestConnect.cpp
	g++ -o $@ $^ -std=c++11 -I./include -L./lib -lmysqlclient

.PHONY:clean

clean:
	rm -f MySQL

此时可以编译了,但是执行错误

发现动态库系统还是没有找到
还是在这片文章中介绍了原因和解决方法Linux_动态库与静态库(制作与安装)

这里选择文章中的第三种方法,创建文件,更新系统配置

 cd /etc/ld.so.conf.d/

创建一个配置文件

打开配置文件,将解压的动态库链接拷贝进去,我这里是

sudo vim 



最后执行ldconfig即可

成功链接到动态库!!

测试代码如下:

#include

#include "include/mysql.h"

int main(){
    std::cout<<"MySQL Connect Version"< 

成功打印出MySQL版本,使用软链接让C语言调用MySQL成功。

2.调用MySQL测试 初始化

MYSQL *mysql_init(MYSQL *mysql);
要使用库,必须先进行初始化

MySQL 连接函数

MYSQL *mysql_real_connect(MYSQL *mysql,---- MySQL句柄
const char *host, -----连接IP
const char *user, ----使用人
const char *passwd, -----对应密码
const char *db, ----- 连接的数据库
unsigned int port, ------MySQL端口
const char *unix_socket, -----远端给nullptr即可
unsigned long clientflag);----其他参数

void mysql_close(MYSQL *sock);—关闭MySQL连接

注意:数据库在默认情况下不认识中文,在插入,查询是遇到中文会出现乱码情况

在来连接成功后还需要设置编码格式utf-8

//设置MySQL编码格式
mysql_set_character_set(sql,"utf8");
#include

#include "include/mysql.h"

int main(){
    //std::cout<<"MySQL Connect Version"<
        std::cerr<<"MySQL Connect Error"< 


基本连接完成


这里要对这个数据库进行修改

下达MySQL增删改命令

修改数据库表:

下发mysql命令
int mysql_query(MYSQL *mysql, const char *q);

需要让MySQL执行那些命令就传入到q中

#include
#include

#include "include/mysql.h"

int main(){
    //std::cout<<"MySQL Connect Version"<
        std::cerr<<"MySQL Connect Error"< 

调用MySQL查询数据

1. 通过mysql_store_result这个函数来读取结果
MYSQL_RES *mysql_store_result(MYSQL *mysql);

该函数会调用MYSQL变量中的st_mysql_methods中的 read_rows 函数指针来获取查询的结果。

同时该函数会返回MYSQL_RES 这样一个变量,该变量主要用于保存查询的结果。

同时该函数malloc了一片内存空间来存储查询过来的数据,所以我们一定要记的 free(result),不然是肯定会造成内存泄漏

执行完mysql_store_result以后,其实数据都已经在MYSQL_RES 变量中了,下面的api基本就是读取MYSQL_RES 中的数据。

//1. 获取结果行数mysql_num_rows
 my_ulonglong mysql_num_rows(MYSQL_RES *res);
//2.获取结果列数mysql_num_fields
 unsigned int mysql_num_fields(MYSQL_RES *res);
//3.获取列名mysql_fetch_fields
 MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);
//4.获取结果内容mysql_fetch_row
 MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

#include
#include

#include "include/mysql.h"

int main(){
    //std::cout<<"MySQL Connect Version"<
        std::cerr<<"MySQL Connect Error"<
        std::cerr<<"find error"<
        MYSQL_ROW row=mysql_fetch_row(res);//获取查询结果一行的数据
        for(int j=0;j
            std::cout< 

//获取MySQL所有列属性
MYSQL_FIELD*mysql_fetch_field(MYSQL_RES*);
#include
#include

#include "include/mysql.h"

int main(){
    //std::cout<<"MySQL Connect Version"<
        std::cerr<<"MySQL Connect Error"<
        std::cerr<<"find error"<
        //获取列名称
        std::cout<
        MYSQL_ROW row=mysql_fetch_row(res);//获取查询结果一行的数据
        for(int j=0;j
            std::cout< 

事务等其他操作
my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode); 
my_bool STDCALL mysql_commit(MYSQL * mysql); 
my_bool STDCALL mysql_rollback(MYSQL * mysql);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931406.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号