主要使用的是mysql开发包中的api接口

操作流程

1.初始化mysql操作句柄

MYSQL *mysql_init(MYSQL *mysql);

对传人的句柄进行初始化

若传入的句柄为NULL,则内部会动态申请空间,进行初始化,并返回句柄首地址

返回值:若失败则返回NULL

2.链接mysql服务器

MYSQL *mysql real connect(MYSQL *mysql, char *host, char *user, char *pass, char *dbname,
        int port, char *unix _socket, int client_flag)
        mysql:初始化完成的mysql句柄;

host:用户名;

port:端口,默认0为3306端口,是mysql服务的端口;

pass: 密码;

dbname:要操作的库名称

unix socket:套接字或管道文件名-通常置NULL

client flag: 客户端的操作标志,通常置0;

返回值:成功则返回句柄首地址,失败返回NULL

3.设置客户端字符集(通常是与服务器保持一致,使用utf3)
         int mysql_set character_set(MY sQL *mysal, char *name)
         mysql:操作句柄;

name:宇符集名称,通常是"utf8”

返回值:成功返回0;失败返回非0;

4.选择要操作的数据库(切换操作的库)
          int mysql_select_db(MYsQL *mysq. char *dbname):

5.将sql语句发送给服务器,并执行sql语句
          int mysql_query(MY SQL *mysql, char *sql);
          mysql:操作句柄;

sql:对数据库中的数据进行操作的sql语句

返回值:成功返回0:失败返回非0

语句有没有执行成功,决定了当前的操作是否完成了

6.增改删操作,只要语句执行成功,就OK,但是如果是查询语向,因为查询的话语向执行成功了,还需要获取查询结果

将查询结果保存到本地
         MYSQL RES *mysql store result(MYSQL *mysal);                                                                            mysq:操作句柄;

返回值:成功返回结果集的结构首地址,失败返回NULL
        将结果集保存到本地与执行语句这一步操作,若使用的是同一个操作句柄则存任线程安全              问题

获取结果集中的结果行数和列数
        int mysal num rows(MYSQL RES *res);

获取结果有多少行int mysql num fields(MYSQL RES *res);获取一行中有多少列

遍历结果集,逐条取出数据
        MYSQL_ ROW mysql fetch row(MY SQL_ RES *res);
                注意:这个函数或者说res 内部记录了当前的读写位置,只需要不断的调用,就可以逐条取出数据
                这个返回值是个字符指针数组char *arr0,将一行中的多列进行扁平化存储,每一个元素都是一列数据

释放结果集
        int mysql_ free_ result(MYSQL_ RES *res);

7. 关闭容户端连接,释放句柄资源

int mysql close(MYSQL *mysql);

代码展示

#include<mysql/mysql.h>
#include<unistd.h>
#include<string.h>

int main()
{
  //初始化mysql句柄
  MYSQL *mysql = mysql_init(NULL);
  if(mysql == NULL)
  {
    printf("mysql init error !");
    return -1;
  }
  //选择mysql服务器进行链接
  if(mysql_real_connect(mysql,"0.0.0.0","root","","test",0,NULL,0) == NULL)
  {
    printf("connect failed :%s \n",mysql_error(mysql));
    mysql_close(mysql);
  }
  //设置字符集
  int ret;
  ret = mysql_set_character_set(mysql,"utf8");
  if(ret != 0)
  {
    printf("set character failed :%s \n",mysql_error(mysql));
  }
  //选择操作的数据库
  mysql_select_db(mysql,"test");
  //执行语句
  const char* select_sql = "select * from student;";
  ret = mysql_query(mysql,select_sql);
  if(ret != 0)
  {
    printf("query failed :%s \n",mysql_error(mysql));
    mysql_close(mysql);
    return -1;
  }
  //查询语句执行结果
  MYSQL_RES* res = mysql_store_result(mysql);
  if(res == NULL)
  {
    printf("store result  failed :%s \n",mysql_error(mysql));
    mysql_close(mysql);
    return -1;
  }
  int num_row = mysql_num_rows(res);
  int num_col = mysql_num_fields(res);
  for(int i = 0 ; i < num_row;i++)
  {
    MYSQL_ROW row = mysql_fetch_row(res);
    for(int j = 0 ;j < num_col;j++){
      printf("%-15s",row[j]);
    }
    printf("\n");
  }
  mysql_free_result(res);
  mysql_close(mysql);
}

#include<mysql/mysql.h>
#include<unistd.h>
#include<string.h>int main()
{//初始化mysql句柄MYSQL *mysql = mysql_init(NULL);if(mysql == NULL){printf("mysql init error !");return -1;}//选择mysql服务器进行链接if(mysql_real_connect(mysql,"0.0.0.0","root","","test",0,NULL,0) == NULL){printf("connect failed :%s \n",mysql_error(mysql));mysql_close(mysql);}//设置字符集int ret;ret = mysql_set_character_set(mysql,"utf8");if(ret != 0){printf("set character failed :%s \n",mysql_error(mysql));}//选择操作的数据库mysql_select_db(mysql,"test");//执行语句const char* select_sql = "select * from student;";ret = mysql_query(mysql,select_sql);if(ret != 0){printf("query failed :%s \n",mysql_error(mysql));mysql_close(mysql);return -1;}//查询语句执行结果MYSQL_RES* res = mysql_store_result(mysql);if(res == NULL){printf("store result  failed :%s \n",mysql_error(mysql));mysql_close(mysql);return -1;}int num_row = mysql_num_rows(res);int num_col = mysql_num_fields(res);for(int i = 0 ; i < num_row;i++){MYSQL_ROW row = mysql_fetch_row(res);for(int j = 0 ;j < num_col;j++){printf("%-15s",row[j]);}printf("\n");}mysql_free_result(res);mysql_close(mysql);
}

mysql 客户端简单搭建相关推荐

  1. 云时代,最好用的MySQL客户端工具推荐

    数据库图形客户端(GUI)工具,可以大大帮助开发者提升SQL编写与开发的效率.在云时代,企业越来越多的开始采用RDS,同时也还有部分本地IDC自建数据库,而在云端也会选择/尝试多个不同云厂商.&quo ...

  2. Discuz论坛简单搭建

    Discuz论坛简单搭建 基础网络环境配置 Selinux权限 配置对应yum源配置本地源 安装 http mariadb* php php-mysql Mariadb的使用 php设置默认识别的we ...

  3. MYSQL 客户端与服务器关系

    数据库概念   如果想要知道mysql数据库客户端与服务器之间的关系.首先要明白什么是"数据库". 从字面意思理解,所谓"数据库",就是存放数据的库.现实中,大 ...

  4. 线程简介和MySQL调试环境搭建

    导读: 本文节选自八怪专栏<深入理解MySQL主从原理32讲>第29节 想内容请点击订阅专栏 注意:如果正文有图片不清晰可以将图片保存到本地查看(本文建议横屏观看效果更佳) 最后我想简单说 ...

  5. 2012 iis php mysql_Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建wordpress博客教程

    Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建教程 一.环境说明: 操作系统:Windows Server2012 R2 PHP版本:php 5.5.8 MySQ ...

  6. Eclipse 3.5 Classic+Tomcat 6.0+MySql 5.5搭建java web开发环境

    Eclipse 3.5 Classic+Tomcat 6.0+MySql 5.5搭建java web开发环境 对于初学者来说,如果没有接触过java web开发的话,搭建开发环境将是一个门槛.以前一直 ...

  7. 如何基于MySQL及Redis搭建统一的kv存储服务 | 秦波

    一.MySQL+Redis常用部署方式 1.1  拓扑 1.2  特点 业务层通过双写同时写MySQL及Redis.读通常在Redis,若读取不到,则从MySQL读取,然后将数据同步到Redis,Re ...

  8. 现在好用的mysql客户端_还在用 Navicat 的,可以试试这几款免费且好用的 MySQL 客户端...

    没别的意思,今天就是为了给你推荐几款 MySQL 客户端,这几款客户端有一个共通点,那就是好用而且免费. "害,我看也就是平平无奇嘛!" 然后,转身赶紧下载体验一下. 哪个做开发的 ...

  9. navicat保存查询语句_还在用 Navicat 的,可以试试这几款免费且好用的 MySQL 客户端...

    没别的意思,今天就是为了给你推荐几款 MySQL 客户端,这几款客户端有一个共通点,那就是好用而且免费. "害,我看也就是平平无奇嘛!" 然后,转身赶紧下载体验一下. 哪个做开发的 ...

最新文章

  1. 关于鸿蒙 2.0,那些开发者不知道的一切
  2. 如何巧用方位角和倾斜角增大光伏电站的发电量?
  3. 公平锁的lock()方法走读
  4. HBase原理-要弄懂的sequenceId
  5. 【转】伪静态URLRewrite学习笔记
  6. 初学者必看的文章:在VM12中安装 RedHat RHEL7.2  系统的详细步骤:看我如何操纵RHEL系统...
  7. 集成springboot案例_SpringBoot开发者都在用的五款优质扩展,每个都很能打!
  8. 《设计模式——基于C#的工程化实现及扩展》
  9. 以前的某个程序安装已在安装计算机上创建挂起的文件操作
  10. 大数据分析如何保证数据质量
  11. 【人脸识别】基于matlab GUI PCA算法人脸识别门禁系统【含Matlab源码 1777期】
  12. 20_星仔带你学Java之Java常用类
  13. iOS App Store Connect 内购详解
  14. 在龙芯3A3000上安装Debian 10
  15. 湖大计算机考研跟南航比,省三也可以逆袭进入985大学?这49所自主招生高校都收省三!...
  16. 【光模块专题】最常见的几种光模块光纤接口类型
  17. 聆秘2013手游渠道之争:四大战役谁主沉浮?
  18. 在我的计算机看不到移动硬盘,移动硬盘在我的电脑中显示容量但不能显示内容 – 手机爱问...
  19. android业余手机开发,赚钱心得
  20. win10系统nfs服务器搭建

热门文章

  1. python 通达信板块_python 适用通达信
  2. Java Reactor Stream
  3. 机器学习入门例子--预测浏览量
  4. 查看Windows凭据和普通凭据的密码(查看Windows中存储的密码)——mimikatz
  5. AIWIN 心电图智能诊断Baseline【线上0.719】
  6. android五大布局的作用,Android五大布局与实际应用详解
  7. Python中NaN、nan和NAN的区别及使用方法
  8. Linux服务器集群部署
  9. patch的用法【转】
  10. 第十届蓝桥杯JavaC组省赛真题