mysql C语言连接
文章目录
- 库安装
- 接口介绍
- 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。一个是所有头文件,一个是库文件,包括静态库和动态库。
由于这是第三方库,自然是要链接文件的了。
若是动态链接:
export LD_LIBRARY_PATH=动态库名字
g++ -o $@ $^ -I include -L lib -l mysqlclient(库文件名字)静态链接:
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语言连接相关推荐
- c语言 连接 mysql,C语言连接mysql -select
C语言实现查询mysql数据库的行数,列的属性,以及每条记录. /* select.c */ #include #include #include #include "/usr/includ ...
- linux下c语言调用mysql,Linux下C语言连接MySQL
首先保证安装: 1:安装MySQL:sudo apt-get install mysql-server mysql-client 2:安装MySQL开发包:sudo apt-get install l ...
- c语言接受mysql中文,C语言连接MySQL中文问题
C语言连接MySQL中文问题 在学习<Linux程序设计>第8章MySQL数据库8.3节: 使用C语言访问MySQL访问数据库时尝试把SQL数据换成了中文,但是在运行示例程序时终端输出却乱 ...
- c语言 mysql 连接字符串,C语言连接MySQL数据库
今天在网上查询了一些关于C语言连接MySQL的一些资料,现在做一下总结.首先,自己的电脑要安装MySQL,具体的做法是打开终端(Ct 今天在网上查询了一些关于C语言连接MySQL的一些资料,现在做一下 ...
- mysql用c语言连接驱动程序,C语言连接MySql数据库
操作系统:Windows7(32位) 编译软件:Code::Blocks 10.05 数 据 库:mysql-5.1.62-win32 数据库内的数据: 测试代码: #include #include ...
- php连接数据库语言,PHP语言连接MYSQL数据库实例代码
本文主要向大家介绍了PHP语言连接MYSQL数据库实例代码,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 现在做的项目需要php连接mysql数据库,虽然之前学过,但是现在基本上都给忘 ...
- C#语言连接Mysql数据库实现增删改查
C#语言连接Mysql数据库实现增删改查 实现效果如图 在此之前先下载一个mysql.dll 库 如下 链接:https://pan.baidu.com/s/17Nv_1W3KbXfWgdOvWf_S ...
- c语言连接mysql(入门)_MySQL入门之C语言操作MySQL
基本概念 C APIs包含在mysqlclient库文件当中,与MySQL的源代码一块发行,用于连接到数据库和执行数据库查询.#include #include #include #include # ...
- c语言连接mysql_聊聊数据库MySQL、SqlServer、Oracle的区别,哪个更适合你?
一.MySQL 优点: 体积小.速度快.总体拥有成本低,开源: 支持多种操作系统: 是开源数据库,提供的接口支持多种语言连接操作 : MySQL的核心程序采用完全的多线程编程.线程是轻量级的进程,它可 ...
最新文章
- React入门看这篇就够了
- 在不同浏览器中,input里面的输入光标大小表现形式却大不相同
- WordPress.com 开源,弃 PHP 改用 JavaScript
- MacBook的mission control的功能
- ABB机器人之LOADDATA
- 依赖包报错Invalid options object. Less Loader has been initialized using an options object that does not
- [html] 如何优化大数据列表(10万+)的性能?说说你的方案
- edge 浏览器中数字显示为链接
- sqlmap安装总结
- 如何自动申请京东试用商品、签到获取京豆
- [文摘20080131]89个管理定律及点评
- fiyme android底层,魅族首批Android 10底层Flyme于今日正式推送
- js网页点击播放背景音乐,再次点击暂停播放背景音乐
- 【每日一趣】老王的烦恼
- 资料搜集-JAVA系统的梳理知识
- 商城系统官方网站PHP源码
- 迪米特法则——面向对象设计原则
- 阿里云产品经理刘宇:Serverless 的前世今生
- Android原生编解码接口MediaCodec详解
- python中的if not
热门文章
- Vue使用Print插件实现页面打印功能/打印列表
- 【数组】- 如何求C++数组的中位数?
- linux C语言mkfifo()函数 mkfifoat()函数(制作一个 FIFO 特殊文件(命名管道))
- divmod( )函数
- 数学知识整理:仿射函数(affine function)
- 基于密码的数据安全防护体系研究
- 计算机化系统验证管理 360,关于计算机化系统验证管理的十点建议
- Cutterman 切图神器,虽然还没用过,先 mark 一下好了
- java笔记(一) 基础输出 炫技
- 小程序订单如何自动拆分给多台打印机打印