IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mysql C语言连接 -> 正文阅读

[大数据]mysql C语言连接

库安装

C语言连接首先要安装connector,去mysql官网找找即可。
不想找的话,这是链接
在这里插入图片描述
这里下载C API
这里为了用纯C,就下载难用的那个库了。
在这里插入图片描述
根据OS的glibc版本来下载对应版本,如果版本不对是使用不了的。
可以用命令ldd --version来查看自己系统的glibc是什么版本的。
由于我的系统是2.17版本的,因此我就下载最下面那个版本了
在这里插入图片描述
我下的是这个,第三个压缩的太厉害,建议下第一个。
在这里插入图片描述
安装之后解压(tar -xvf + 文件名)。选项x是解压的意思
在这里插入图片描述
解压之后进入目录:重点看两个文件夹,一个是include,一个是lib。一个是所有头文件,一个是库文件,包括静态库和动态库。
在这里插入图片描述

然后就可以写makefile了。这是指定了头文件路径,库文件路径和文件名的做法,这是自己手动指定路径的makfile。

还有一种可以让系统自己帮你找库文件的路径的设置方法,尝试后发现失败了,不知道为什么。大致方法就是把lib放到/usr/lib里面。
在这里插入图片描述

接口介绍

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;
}
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:43:14  更:2022-04-22 18:46:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:03:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码