文章目录

  • 库安装
  • 接口介绍
    • mysql_init()
    • mysql_real_connect()
    • mysql_query()
    • 获取select结果的接口
    • mysql_store_result()
    • mysql_num_rows()
    • mysql_num_fields()
    • mysql_fetch_fields()
    • mysql_fetch_row()
    • mysql_close

库安装

C语言连接首先要安装connector,按下图指示,下载的是旧版本的,下载新版要配置openssl,很麻烦。
不想找的话,这是链接

安装之后解压(tar -xvf + 文件名)。选项x是解压的意思

解压之后进入目录:重点看两个文件夹,一个是include,一个是lib。一个是所有头文件,一个是库文件,包括静态库和动态库。

由于这是第三方库,自然是要链接文件的了。

  1. 若是动态链接:
    export LD_LIBRARY_PATH=动态库名字
    g++ -o $@ $^ -I include -L lib -l mysqlclient(库文件名字)

  2. 静态链接:
    g++ -o mysql_conn mysql_conn.cc -I include -L lib -l mysqlclient -ldl -pthread -static
    至于为什么要链接dl文件和pthread文件不需要关心。因为是静态链接,所有库都必须是静态的

能跑得动这个程序既是安装并连接成功

#include <iostream>
#include "include/mysql.h"                                                                                                                                                                                                                                               using namespace std;
int main()
{cout << "version: " << mysql_get_client_info() << endl;
}

接口介绍

mysql_init()

相当于创建一个句柄资源。相当于文件描述符了。和socket是一个道理。

它的返回值是一个MYSQL类型的指针

MYSQL* my = mysql_init(NULL);

mysql_real_connect()

MYSQL *mysql_real_connect(MYSQL *mysql,
const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned long clientflag);

host就是服务器ip,和命令行的-h是同理的,db是你想要访问的数据库名字,port是端口号,mysql服务器的端口号默认是3306。unix_socket默认给null即可,clientflag默认给0即可。

mysql_query()

发送sql语句给mysql服务器
q是你要写的sql语句的字符串。返回值是代表是否成功发送query,成功返回0,失败返回1.

int mysql_query(MYSQL *mysql, const char *q);

对于insert,delete,update这种无反馈的query,直接使用即可。对于seletc这种有反馈的,我们需要更多接口去获得内容。

获取select结果的接口

mysql_store_result()

MYSQL_RES *mysql_store_result(MYSQL *mysql);

该函数malloc了一段空间之后,把select的结果放在这段空间了。这个函数的返回值是MYSQL_RES类型,执行完这个函数之后,select结果就在MYSQL_RES变量里面了。下面就从这个变量里读数据即可。

注:记得free掉这段空间。

mysql_num_rows()

获取有多少行,返回值是一个无符号整型

unsign int mysql_num_rows(MYSQL_RES *res);

mysql_num_fields()

获取有多少列

unsigned int mysql_num_fields(MYSQL_RES *res);

mysql_fetch_fields()

获取列结构体,这个结构体里面有列名这个成员

MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);

返回值MYSQL_FIELD是一个结构体数组指针。这个结构体有一个成员叫name,放的就是列名

如果要把列名全部打印出来,就要mysql_num_fields函数来获取有多少列。

int fields = mysql_num_fields(res);
MYSQL_FIELD *field = mysql_fetch_fields(res);
int i = 0;
for(; i < fields; i++){cout<<field[i].name<<" ";
}
cout<<endl;

mysql_fetch_row()

获取一行 行结构体(从名字也看得出来了),因此要把整个表打印出来,要循环行数次。

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

打印每一行是怎么打印的呢?
MYSQL_ROW是一个char* str[],每一个元素都是一个字符串。直接打印列数次即可。

i = 0;
MYSQL_ROW line;
for(; i < nums; i++){line = mysql_fetch_row(res);int j = 0;for(; j < fields; j++){cout<<line[j]<<" ";}cout<<endl;
}

mysql_close

用来断开客户端和mysql服务器的链接。

void mysql_close(MYSQL *sock);

ps:整体测试代码

#include <stdio.h>
#include <mysql.h>int main()
{printf("version: %s\n", mysql_get_client_info());MYSQL* my = mysql_init(NULL);if(!mysql_real_connect(my, "127.0.0.1", "mhq", "1353601324Eric@", "test", 3306, NULL, 0)){printf("connect error !\n");mysql_close(my);}const char* sql = "update account set name = \"zhaoliu\" where id = 5;";const char* sql1 = "select * from account;";int res = mysql_query(my, sql1);//printf("%d", res);MYSQL_RES* a = mysql_store_result(my);int rows = mysql_num_rows(a);int cols = mysql_num_fields(a);//printf("rows: %d, cols: %d", rows, cols);MYSQL_FIELD *field = mysql_fetch_fields(a);for(int i = 0; i < cols; i++){printf("%-10s\t", field[i].name);}puts("");MYSQL_ROW line;for(int i = 0; i < rows; i++){line =  mysql_fetch_row(a);for(int j = 0; j < cols; j++){printf("%-10s\t", line[j]);}puts("");}mysql_close(my);return 0;
}

mysql C语言连接相关推荐

  1. c语言 连接 mysql,C语言连接mysql -select

    C语言实现查询mysql数据库的行数,列的属性,以及每条记录. /* select.c */ #include #include #include #include "/usr/includ ...

  2. linux下c语言调用mysql,Linux下C语言连接MySQL

    首先保证安装: 1:安装MySQL:sudo apt-get install mysql-server mysql-client 2:安装MySQL开发包:sudo apt-get install l ...

  3. c语言接受mysql中文,C语言连接MySQL中文问题

    C语言连接MySQL中文问题 在学习<Linux程序设计>第8章MySQL数据库8.3节: 使用C语言访问MySQL访问数据库时尝试把SQL数据换成了中文,但是在运行示例程序时终端输出却乱 ...

  4. c语言 mysql 连接字符串,C语言连接MySQL数据库

    今天在网上查询了一些关于C语言连接MySQL的一些资料,现在做一下总结.首先,自己的电脑要安装MySQL,具体的做法是打开终端(Ct 今天在网上查询了一些关于C语言连接MySQL的一些资料,现在做一下 ...

  5. mysql用c语言连接驱动程序,C语言连接MySql数据库

    操作系统:Windows7(32位) 编译软件:Code::Blocks 10.05 数 据 库:mysql-5.1.62-win32 数据库内的数据: 测试代码: #include #include ...

  6. php连接数据库语言,PHP语言连接MYSQL数据库实例代码

    本文主要向大家介绍了PHP语言连接MYSQL数据库实例代码,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 现在做的项目需要php连接mysql数据库,虽然之前学过,但是现在基本上都给忘 ...

  7. C#语言连接Mysql数据库实现增删改查

    C#语言连接Mysql数据库实现增删改查 实现效果如图 在此之前先下载一个mysql.dll 库 如下 链接:https://pan.baidu.com/s/17Nv_1W3KbXfWgdOvWf_S ...

  8. c语言连接mysql(入门)_MySQL入门之C语言操作MySQL

    基本概念 C APIs包含在mysqlclient库文件当中,与MySQL的源代码一块发行,用于连接到数据库和执行数据库查询.#include #include #include #include # ...

  9. c语言连接mysql_聊聊数据库MySQL、SqlServer、Oracle的区别,哪个更适合你?

    一.MySQL 优点: 体积小.速度快.总体拥有成本低,开源: 支持多种操作系统: 是开源数据库,提供的接口支持多种语言连接操作 : MySQL的核心程序采用完全的多线程编程.线程是轻量级的进程,它可 ...

最新文章

  1. React入门看这篇就够了
  2. 在不同浏览器中,input里面的输入光标大小表现形式却大不相同
  3. WordPress.com 开源,弃 PHP 改用 JavaScript
  4. MacBook的mission control的功能
  5. ABB机器人之LOADDATA
  6. 依赖包报错Invalid options object. Less Loader has been initialized using an options object that does not
  7. [html] 如何优化大数据列表(10万+)的性能?说说你的方案
  8. edge 浏览器中数字显示为链接
  9. sqlmap安装总结
  10. 如何自动申请京东试用商品、签到获取京豆
  11. [文摘20080131]89个管理定律及点评
  12. fiyme android底层,魅族首批Android 10底层Flyme于今日正式推送
  13. js网页点击播放背景音乐,再次点击暂停播放背景音乐
  14. 【每日一趣】老王的烦恼
  15. 资料搜集-JAVA系统的梳理知识
  16. 商城系统官方网站PHP源码
  17. 迪米特法则——面向对象设计原则
  18. 阿里云产品经理刘宇:Serverless 的前世今生
  19. Android原生编解码接口MediaCodec详解
  20. python中的if not

热门文章

  1. Vue使用Print插件实现页面打印功能/打印列表
  2. 【数组】- 如何求C++数组的中位数?
  3. linux C语言mkfifo()函数 mkfifoat()函数(制作一个 FIFO 特殊文件(命名管道))
  4. divmod( )函数
  5. 数学知识整理:仿射函数(affine function)
  6. 基于密码的数据安全防护体系研究
  7. 计算机化系统验证管理 360,关于计算机化系统验证管理的十点建议
  8. Cutterman 切图神器,虽然还没用过,先 mark 一下好了
  9. java笔记(一) 基础输出 炫技
  10. 小程序订单如何自动拆分给多台打印机打印