Mysql C语言API编程入门讲解

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 原文:Mysql C语言API编程入门讲解软件开发中我们经常要访问数据库,存取数据,之前已经有网友提出让鸡啄米讲讲数据库编程的知识,本文就详细讲解如何使用Mysql的C语言API进行数据库编程。??API,全称Application Programming Interfaces,即应用程序编程接口,我们可以调用这些接口,执行API函数提供的功能。

2000元阿里云代金券免费领取,2核4G云服务器仅664元/3年,新老用户都有优惠,立即抢购>>>


阿里云采购季(云主机223元/3年)活动入口:请点击进入>>>,


阿里云学生服务器(9.5元/月)购买入口:请点击进入>>>,

原文: Mysql C语言API编程入门讲解

软件开发中我们经常要访问数据库,存取数据,之前已经有网友提出让鸡啄米讲讲数据库编程的知识,本文就详细讲解如何使用Mysql的C语言API进行数据库编程。
 
 API,全称Application Programming Interfaces,即应用程序编程接口,我们可以调用这些接口,执行API函数提供的功能。
 
 Mysql C语言API就是用C语言编写的Mysql编程接口,使用这些接口函数可以实现对Mysql数据库的查询等操作。
 
 Mysql的安装
 
 要进行Mysql编程首先要在充当Mysql服务器的电脑和本机上都安装Mysql,服务器上的Mysql用来连接查询,本机上的Mysql作为开发之用,当然本机也可以兼顾服务器和开发之用。下载Mysql可以到http://www.mysql.com/downloads/mysql/。鸡啄米安装的是“Windows (x86, 64-bit), MSI Installer”版本。
 
 在Mysql安装过程中,安装选项一定要选上Development Components下的Client C API library(shared),这样才会将Mysql API的头文件和动态库安装到电脑中。
 
 安装完成后,我们编程要用的就是include目录下的头文件和lib目录下的库文件。
 
 Mysql API数据结构
 
 Mysql API中用到了很多结构体等数据类型,下面就简单说说常用的几个数据结构的含义,至于它们的定义鸡啄米就不贴了,大家可以到Mysql提供的mysql.h头文件中查看。
 
 MYSQL
 
 连接数据库前,必须先创建MYSQL变量,此变量在很多Mysql API函数会用到。它包含了一些连接信息等数据。
 
 MYSQL_RES
 
 MYSQL_RES结构体中包含了查询结果集,也就是从数据库中查询到的数据。可以使用mysql_store_result或mysql_use_result函数获得。
 
 MYSQL_ROW
 
 MYSQL ROW的定义如下:
 
 typedef char **MYSQL_ROW;
 
 可见,它实际上是char **类型,指向一个字符串数组。可以通过mysql_fetch_row函数获得。
 
 MYSQL_FIELD
 
 MYSQL_FIELD中包含了字段名、字段类型和大小等信息。可以重复调用mysql_fetch_field函数获得所有字段的信息。
 
 Mysql C API编程步骤
 
 1、首先我们要包含mysql的头文件,并链接mysql动态库。即添加以下语句:
 
 #include <WinSock2.h> // 进行网络编程需要winsock2.h
 
 #include <mysql.h>
 
 #pragma comment(lib, “libmysql.lib”)
 
 2、创建MYSQL变量。如:
 
 MYSQL mysql;
 
 3、初始化MYSQL变量。
 
 mysql_init(&mysql);
 
 4、调用mysql_real_connect函数连接Mysql数据库。mysql_real_connect函数的原型如下:
 
 MYSQL * STDCALL 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);
 
 参数说明:mysql--前面定义的MYSQL变量;host--MYSQL服务器的地址;user--登录用户名;passwd--登录密码;db--要连接的数据库;port--MYSQL服务器的TCP服务端口;unix_socket--unix连接方式,为NULL时表示不使用socket或管道机制;clientflag--Mysql运行为ODBC数据库的标记,一般取0。连接失败时该函数返回0托福答案
 
 5、调用mysql_real_query函数进行数据库查询。mysql_real_query函数的原型如下:
 
 int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);
 
 参数说明:mysql--前面定义的MYSQL变量;q--SQL查询语句;length--查询语句的长度。
 
 查询成功则该函数返回0。
 
 6、通过调用mysql_store_result或mysql_use_result函数返回的MYSQL_RES变量获取查询结果数据。
 
 两个函数的原型分别为:
 
 MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);
 
 MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);
 
 这两个函数分别代表了获取查询结果的两种方式。第一种,调用mysql_store_result函数将从Mysql服务器查询的所有数据都存储到客户端,然后读取;第二种,调用mysql_use_result初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据,这种方式较之第一种速度更快且所需内存更少,但它会绑定服务器,阻止其他线程更新任何表,而且必须重复执行mysql_fetch_row读取数据,直至返回NULL,否则未读取的行会在下一次查询时作为结果的一部分返回,故经常我们使用mysql_store_result雅思答案
 
 7、调用mysql_fetch_row函数读取结果集数据。
 
 上述两种方式最后都是重复调用mysql_fetch_row函数读取数据。mysql_fetch_row函数的原型如下:
 
 MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
 
 参数result就是mysql_store_result或mysql_use_result的返回值。
 
 该函数返回MYSQL_ROW型的变量,即字符串数组,假设为row,则row[i]为第i个字段的值。当到结果集尾部时,此函数返回NULL。
 
 8、结果集用完后,调用mysql_free_result函数释放结果集,以防内存泄露。mysql_free_result函数的原型如下:
 
 void STDCALL mysql_free_result(MYSQL_RES *result);
 
 9、不再查询Mysql数据库时,调用mysql_close函数关闭数据库连接。mysql_close函数的原型为:
 
 void STDCALL mysql_close(MYSQL *sock);
 
 Mysql C API编程实例
 
 这里给大家一个简单的Mysql API编程实例。使用VS2010编写。访问的数据库为安装Mysql后默认创建的名称为“mysql”的数据库,查询其“user”表的数据,步骤如下:
 
 1、创建一个Win32 Console Application(Win32控制台程序)的空工程(创建空工程需要在向导的Application Settings一步中,勾选Empty project),名称就取为mysql。
 
 2、在Solution Explorer窗口的工程名“mysql”上点右键,选择“Properties”,弹出工程的属性页,然后在左侧子窗口中,选择Configuration Properties->VC++ Directories,右侧子窗口中会显示一些设置项列表,然后在Include Directories项中添加Mysql的Include目录,在Library Directories项中添加Mysql的lib目录。
 
 
 
 3、新建一个cpp文件,取名mysql.cpp。
 
 4、在mysql.cpp文件中包含mysql头文件并链接mysql动态库。
 
 #include <WinSock2.h>
 
 #include <mysql.h>
 
 #pragma comment(lib, “libmysql.lib”)
 
 这里要注意,因为mysql用到了网络连接的接口函数,所以需要在前面包含WinSock2.h文件。
 
 同时本例中使用了输出流cout,所以还要包含输入输出流头文件:
 
 #include <iostream>
 
 using namespace std;
 
 5、创建main函数,并修改函数体如下:
 
 int main()
 
 {
 
 MYSQL mysql;
 
 MYSQL_RES *res;
 
 MYSQL_ROW row;
 
 // 初始化MYSQL变量
 
 mysql_init(&mysql);
 
 // 连接Mysql服务器,本例使用本机作为服务器。访问的数据库名称为“msyql”,参数中的user为你的登录用户名,***为登录密码,需要根据你的实际用户进行设置
 
 if (!mysql_real_connect(&mysql, “127.0.0.1”, “user”, “123”, “mysql”, 3306, 0, 0))
 
 {
 
 cout << “mysql_real_connect failure!” << endl;
 
 return 0;
 
 }
 
 // 查询mysql数据库中的user表
 
 if (mysql_real_query(&mysql, “select * from user”, (unsigned long)strlen(“select * from user”)))
 
 {
 
 cout << “mysql_real_query failure!” << endl;
 
 return 0;
 
 }
 
 // 存储结果集
 
 res = mysql_store_result(&mysql);
 
 if (NULL == res)
 
 {
 
 cout << “mysql_store_result failure!” << endl;
 
 return 0;
 
 }
 
 // 重复读取行,并输出第一个字段的值,直到row为NULL
 
 while (row = mysql_fetch_row(res))
 
 {
 
 cout << row[0] << endl;
 
 }
 
 // 释放结果集
 
 mysql_free_result(res);
 
 // 关闭Mysql连接
 
 mysql_close(&mysql);
 
 return 0;
 
 }
 
 6、将mysql安装目录中的libmysql.dll动态库文件拷贝到工程的当前目录,运行程序。
 
 如果你跟鸡啄米一样使用的是mysql的64位版本,此时程序会报错,有很多不能解析的符号,这是因为我们的工程是32位的,应该改为64位,方法是,上面的工程属性页的右上角有个Configuration Manager按钮,点击它弹出Configuration Manager对话框,下面的列表中可以看到有我们的工程,Platform列显示为“Win32”:
 
 
 
 这里需要点击右侧的箭头下拉,选择New弹出New Project Platform对话框,New platform选择x64创建新Platform:
 
 
 
 上述的Platform列选择x64就可以了。再次运行程序,你会发现它果然不报错了。
 
 本文就到这里了,到此大家应该对Mysql C API编程有了基本的了解了,在实际开发中可以不断深入研究。
 

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1天前
|
存储 C语言
C语言中的switch语句编程
C语言中的switch语句编程
6 0
|
1天前
|
存储 C语言
C语言中的if语句编程
C语言中的if语句编程
16 0
|
3天前
|
安全 Java API
Java 8中的Stream API:简介与实用指南深入理解Java并发编程:线程安全与锁优化
【5月更文挑战第29天】本文旨在介绍Java 8中引入的Stream API,这是一种用于处理集合的新方法。我们将探讨Stream API的基本概念,以及如何使用它来简化集合操作,提高代码的可读性和效率。 【5月更文挑战第29天】 在Java并发编程中,线程安全和性能优化是两个核心议题。本文将深入探讨如何通过不同的锁机制和同步策略来保证多线程环境下的数据一致性,同时避免常见的并发问题如死锁和竞态条件。文章还将介绍现代Java虚拟机(JVM)针对锁的优化技术,包括锁粗化、锁消除以及轻量级锁等概念,并指导开发者如何合理选择和使用这些技术以提升应用的性能。
|
5天前
|
IDE Java 开发工具
C语言入门(前期准备工作)——超级详细的建议和教学,带你顺利跨越编程门槛
C语言入门(前期准备工作)——超级详细的建议和教学,带你顺利跨越编程门槛
|
8天前
|
Unix 编译器 Linux
C语言:探索编程世界的基石
本文介绍了C语言的历史、特性及应用场景。C语言由丹尼斯·里奇发明,起初用于改善UNIX操作系统的开发,因其高效、灵活和可移植性而广受欢迎。C语言的特点包括:高效性,它能直接编译成机器码;灵活性,支持指针操作和底层编程;以及强可移植性,可在不同平台运行。常见应用包括操作系统、嵌入式系统、游戏和图形界面开发。文中还提供了一个简单的C语言代码示例,展示如何计算并打印两个整数的和。
|
8天前
|
搜索推荐 算法 网络协议
C语言:编程之基,智慧之源
C语言是编程领域的基石,以其高效、灵活和强可移植性受到程序员喜爱。作为编译型语言,它的代码执行速度快,适合系统编程、嵌入式系统和游戏开发。C语言特点包括结构化设计、直接硬件访问和跨平台能力。应用领域广泛,如操作系统、嵌入式系统、游戏和网络编程。文中通过“Hello, World!”、斐波那契数列计算及冒泡排序算法展示了C语言的实用功能。
|
8天前
|
Java Unix 编译器
C语言:编程世界的基石与魅力之源
C语言是编程的基础,由丹尼斯·里奇在70年代创造,主要用于系统编程和嵌入式系统开发,以其简洁语法、高效执行和硬件访问能力著称。它影响了众多现代编程语言,并在游戏开发等领域有重要应用。通过实例展示了C语言计算两个整数和的功能,强调其在编程教育和计算机科学中的持续价值。
|
8天前
|
存储 Unix 程序员
C语言:编程世界的基础与魅力
C语言是编程领域的明星,以其高效、灵活和强可移植性受到程序员喜爱。本文深入探讨C语言基础语法,如数据类型、运算符和控制结构,并介绍其特性:高效性、灵活性(指针操作)和可移植性。C语言广泛应用在操作系统、游戏开发和嵌入式系统中,是学习计算机科学和提升编程技能的关键。
|
8天前
|
C语言
【C语言入门小游戏】扫雷
【C语言入门小游戏】扫雷
15 1
|
8天前
|
编译器 C语言
【C语言入门小游戏】三子棋
【C语言入门小游戏】三子棋
14 0
【C语言入门小游戏】三子棋
http://www.vxiaotou.com