利用C语言访问mysql

  • 一、相关头文件以及函数:
    • 1、连接数据库使用的头文件和库文件
    • 2、初始化连接句柄
    • 3、连接数据库
    • 4、关闭连接
    • 5、提取结果
    • 6、获取结果集的行数
    • 7、取出结果集中的一行记录
    • 8、查看记录行的列数
    • 9、释放结果集占用的内存
    • 10、获取错误信息
  • 二、程序示例
    • 1、对数据库的表进行增删改操作,并不需要程序返回相应的结果:
    • 2、执行select查询语句的时候,需要程序将数据表中查询的语句返回

一、相关头文件以及函数:

1、连接数据库使用的头文件和库文件

#inlcude <mysql/mysql.h>

程序中使用访问mysql的有关函数接口,需要在连接时指定库名:
例如编译链接的时候指令如下:
gcc -o main mian.c -lmysqlclient

2、初始化连接句柄

该方法用来初始化一个连接句柄。
①如果参数为空,则返回一个指向新分配的连接句柄的指针。示例如下:

MYSQL * mysql=mysql_init(NULL);

②如果传递一个已有的结构,它将被重新初始化。

MYSQL * mysql_init(MYSQL * mysql);

出错时返回NULL

3、连接数据库

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

参数介绍:
mysql:上一步mysql_init()初始化返回的指针。
host:主机名(连接的服务器的IP地址)本地可以使用"localhost"或"127.0.0.1"或NULL。
user:用户名。
password:用户密码。
db:数据库的名字。
port:数据库的端口3306,也可以填写0,意味着使用mysql的默认端口3306。
unix_socket:一般为NULL,表示不适用unix套接字或者管道。
clientflag:标志位,一般给0。

4、关闭连接

void mysql_close(MYSQL* mysql);

5、提取结果

MYSQL_RES *mysql_store_result(MYSQL* mysql);//一次性提取所有数据
MYSQL_RES *mysql_use_result(MYSQL* mysql);//依次提取一行数据

该方法可以保存客户端中接收到的所有数据

6、获取结果集的行数

uint6_t mysql_num_rows(MYSQL_RES* res);

该方法获取结果集中的行数

7、取出结果集中的一行记录

MYSQL_ROW mysql_fetch_row(MYSQL_RES* res);

从结果集中取出一行,并把它存放到一个行结构中。当数据用完或者出错时,返回为NULL。所以通常情况下该方法需要循环调用。

8、查看记录行的列数

unsigned in mysql_field_count(MYSQL * mysql);

9、释放结果集占用的内存

void mysql_free_result(MYSQL_RES* res);

执行完sql语句,得到返回的结果集,处理完数据后,需要调用该方法释放结果集的内存空间

10、获取错误信息

unsigned int mysql_error(MYSQL *mysql);//返回错误码
const char* mysql_error(MYSQL* mysql);//返回错误信息描述

二、程序示例

1、对数据库的表进行增删改操作,并不需要程序返回相应的结果:

①数据库的前期准备:

②代码:

//没有结果的查询
#include <stdio.h>
#include <unistd.h>
#include <mysql/mysql.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
int main()
{MYSQL* mysql=mysql_init(NULL);if(mysql==NULL){printf("mysql init err\n");exit(0);}//root有两个用户,一个是本地登陆的,一个是远程登录的用户mysql=mysql_real_connect(mysql,"127.0.0.1","root","111111","c215",3306,NULL,0);if(mysql==NULL){printf("mysql connect err\n");exit(0);}//执行sql语句//1、char* sql="insert into stu values('小名',21)";//这个插入语句最后可以加分号也可以不加分号//2、char * sql="delete stu from stu where name='小王'";//3、char* sql="update stu set age=18 where name='小名'";int res=mysql_query(mysql,sql);if(res!=0){printf("mysql query er:%sr\n",mysql_error(mysql));}mysql_close(mysql);
}

③执行sql1语句在mysql中看到的结果:

④执行sql2语句在mysql中看到的结果:

⑤执行sql3语句在mysql中看到的结果:

2、执行select查询语句的时候,需要程序将数据表中查询的语句返回

①前期准备;
将之前c215中stu表的数据删完,然后进行下面操作:

②代码:

//没有结果的查询
#include <stdio.h>
#include <unistd.h>
#include <mysql/mysql.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
int main()
{MYSQL* mysql=mysql_init(NULL);if(mysql==NULL){printf("mysql init err\n");exit(0);}//root有两个用户,一个是本地登陆的,一个是远程登录的用户mysql=mysql_real_connect(mysql,"127.0.0.1","root","111111","c215",3306,NULL,0);if(mysql==NULL){printf("mysql connect err\n");exit(0);}char* sql="select * from stu";int res=mysql_query(mysql,sql);if(res!=0){printf("mysql query er:%sr\n",mysql_error(mysql));}//准备拿到结果集,进行空间的分配//不能通过结果的成功与否判断是否有数据//而应该通过返回的几条决定是否有数据MYSQL_RES* mysql_res=mysql_store_result(mysql);//这里只能看获取结果是否成功if(mysql_res==NULL){printf("提取数据失败:%s\n",mysql_error(mysql));exit(0);}//提取当前有多少条记录,这里可能会有条件限制,我需要那种数据int num=mysql_num_rows(mysql_res);if(num==0)//认为没有记录{printf("没有记录\n");}else//有数据{//取出结果集中的数据printf("当前记录条数:%d\n",num);//计算列数int m=mysql_field_count(mysql);printf("一行记录有%d列\n",m);//循环打印for(int i=0;i<num;i++){//获取一行记录,通常是需要循环的,但是当前数据表中只有一条记录,所以没有进行循环MYSQL_ROW mysql_row=mysql_fetch_row(mysql_res);//printf("name=%s,age=%s\n",mysql_row[0],mysql_row[1]);//循环打印各个列for(int j=0;j<m;j++){printf("row[%d]=%s ",j,mysql_row[j]);}printf("\n");}}//释放结果集mysql_free_result(mysql_res);mysql_close(mysql);
}

③程序运行结果:

利用C语言访问mysql相关推荐

  1. python语言数据库规模_Python语言访问MySQL数据库

    4.使用python语言访问MySQL 1)pymysql库:Python语言访问MySQL接口 -安装: 在线:pip install pymysql 离线: 第一步:下载安装包,下载地址: htt ...

  2. Mysql —— linux下使用c语言访问mySql数据库

    示例1: #include<stdio.h> #include<mysql.h> int main() { MYSQL mysql; mysql_init(&mysql ...

  3. MySQL笔记12:C语言访问MYSQL数据库的完整的代码例子

    C语言访问MYSQL数据库的完整的代码例子 1.手写安装带mysql sdk 的mysql 2.新建控制台项目,项目属性中把 C:\Program Files\MySQL\MySQL Server 5 ...

  4. mysql c测试程序_Linux平台下从零开始写一个C语言访问MySQL的测试程序

    Linux 平台下从零开始写一个 C 语言访问 MySQL 的测试程序 2010-8-20 Hu Dennis Chengdu 前置条件: (1) Linux 已经安装好 mysql 数据库: (2) ...

  5. c语言访问mysql,C语言访问mysql数据库

    mysql中新建的数据库为hyx,hyx中的表为my_schema,表中的数据为下图: 编写代码,访问表中的数据,测试代码如下: #include "stdafx.h" #incl ...

  6. 使用C语言访问MySQL数据库基础

    使用C语言访问MySQL数据库基础 一.MySQL管理 包含在MySQL发行版中的一些有用的工具程序使管理工作变得相当容易. 除mysqlshow命令以外,所有的MySQL命令都接受所示的3个标准参数 ...

  7. Linux下使用C语言访问MySQL函数

    //mysqlVersion.c /************************************************************* FileName : mysqlVers ...

  8. c 连接mysql错误信息_使用C语言访问MySQL数据 —— 连接和错误处理

    2011-05-09 wcdj 可以通过许多不同的编程语言来访问MySQL,例如,C,C++,Java,Perl,Python,Tcl,PHP等.本文主要总结使用C语言接口如何访问MySQL数据. ( ...

  9. 【Linux】Ubuntu下C语言访问MySQL数据库入门

    使用的系统是Ubuntu 11.10.数据库是MySQL. MySQL数据库环境配置 首先需要安装MySQL客户端和服务器,命令行安装方式为: sudo apt-get install mysql-s ...

最新文章

  1. 使用jQuery制作手风琴效果.(转)
  2. oracle 实现map,PLSQL实现的map功能,以及一些疑惑
  3. Leetcode 23 合并k个升序链表 (每日一题 20210722)
  4. solr7.4 centos7安装
  5. windows版本的clion软件除了使用wsl配置Ubuntu子系统外,还可以使用MinGW-w64来配置gcc和g++
  6. VRRP在生产环境中的应用
  7. 7-153 找鞍点 (20 分)
  8. 十大注意事项 防止系统重装时遭遇病毒
  9. 使用 Arduino 烧录全新的 ATmega328P
  10. 博弈论笔记:动态博弈
  11. 安装win10专业版步骤
  12. dalek-cryptography 与adjoint-io bulletpoofs性能对比
  13. cycJava基础以及集合总结
  14. 如何学习Photoshop
  15. JGG论坛:赵方庆研究员解析肠道菌群与人体健康(11月10日10:00)
  16. 我是怎么薅的双十一羊毛
  17. java商品管理系统
  18. 软件测试的背景和前期准备
  19. 领导的艺术:工作里怎么样做,才是包容
  20. OAuth2学习(一)——初识OAuth2

热门文章

  1. 无法枚举容器中的对象,访问被拒绝的解决方法
  2. php 检测 拍照方向,拍摄照片或视频时如何检查iPhone相机的方向
  3. 使用 fastboot oem unlock来对nexus 9解锁 .
  4. 颜色管理出问题:windows照片查看器无法显示此图片 因为内存不足。
  5. iOS 视频播放 - AVPlayer
  6. fastapi python 并发_如何评价最近爆红的FastAPI?
  7. 基于空间大数据的社会感知
  8. 解决Python3.5版本下安装librosa报错问题
  9. 常耀俊老师经典《360人际沟通技巧》课程
  10. 2022年9月计划(ue4热更新视频教程+抄写rhi部分源码)