开篇:润墨网以专业的文秘视角,为您筛选了一篇基于C语言访问的MySQL数据库范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
摘 要
本文重点介绍了MySQL数据库的数据操作,并研究了在C语言中操作MySQL数据库的基本API,包括MySQL库中表的基本定义和常见的数据库操作如增删改查、联合查询等。
【关键词】C语言 数据库 MySQL
1 引言
1.1 C语言
C语言产生于50年前,是一种常采用的高级程序语言。基于C语言的设计采用相对简单的编译器,提供低级访问内存与语言结构,能有效地将程序语言映射到机器指令,并提供各种运行支持。C语言常用于操作系统、编译器、数据库为代表的汇编语言编写的应用程序设计等。C语言基于其灵活、跨平台、高效等特点,从微控制器嵌入到超级计算机开发等均被广泛采用。
C程序的开发通常需要预编译、编译、链接、运行等阶段。预编译采用宏替换源码;编译过程将源码翻译成二进制机器码;链接过程将程序采用的静态、动态库进行连接,生成二进制可执行程序,并在运行阶段直接运行。
现代常用的数据库分为关系型数据库、分布式数据库以及NOSQL等几种类型。目前的OLTP(On-Line Transaction Processing,即联机数据处理过程)中多采用以MySQL为代表的关系型数据库。
MySQL是一个由瑞典MySQLAB公司开发的开源的关系数据库管理系统(RDBMS),采用通用的结构化查询语言(Structured Query Language),使用C与C++语言编写,使用yacc SQL解析器。MySQL源代码采用GNU通用公共许可证的条款(即开源条款),更受各国开发者的青睐。MySQL的数据操作执行快速稳定、开发接口丰富、开发文档完善等,被广泛应用于以Web应用为代表的程序开发与应用。
2 数据库相关操作
2.1 连接 MySQL
数据库连接的命令为“ mysql -h 服务器Ip地址 -u 用户名-p 密码 ”。假设远程主机的IP 为:10.0.0.1,用户名为root,密码为psd。则需要输入以下命令行:
mysql Ch10.0.0.1 -uroot Cppsd
2.2 创建数据库
数据库的创建命令为(此处DBTest为数据库名):
Create database DBTest;
显示数据库列表命令为(此处DBTest为数据库名):
show databases DBTest;
使用数据库命令为(此处DBTest为数据库名):
use DBTest;
2.3 建立数据表
在当前使用的数据库建立数据表(此处teacher为表名):
create table teacher
( id varchar(10) not null primary key, //属性名―ID、长度10的可变字符串型、不可为空、主键name varchar(10) not null, //属性名―name、长度10的可变字符串 不可为空year date ); //属性名-year 日期
3 C程序访问MySQL数据库
3.1 相关数据结构定义
定义查询命令的结构体类型:
typedef struct st_mysql {
…
} MYSQL;
定义返回数据的结构体类型:
typedef struct st_mysql_res {
…
} MYSQL_RES;
3.2 相关函数
C语言访问MYSQL数据库的相关函数如表1所示。
MYSQL *mysql_init(MYSQL *mysql) 初始化MYSQL实例
Void mysql_close(MYSQL *mysql) 关闭MYSQL实例,释放内存
Int mysql_query(MYSQL *mysql,const char *query) 对指定连接进行查询。成功返回0,出错返回非0值
MYSQL_RES *musql_store_result(MYSQL *handle) 返回查询的结果
MYSQL_ROW mysql_fetch_row(MYSQL_RES *res) 返回第一行查询的结果
3.3 C语言访问 MySQL 的程序实例
#include
#include
#include
//定义数据库查询宏(此处根据参数userid查询teacher表的name year属性)
#define SELECT_QUERY "select name,year from teacher where userid = %d"
//main函数,C语言执行的入口
int main(int argc, char **argv) {
//定义使用的变量
//调用mysql_init方法,初始化连接实例
mysql_init(&mysql);
//向数据库插入数据(insert操作),如遇异常则返回
res = mysql_query (&my_connection, "INSERT INTO teacher(name,year) VALUES('Ana', 1989)");
if (res)
fprintf (stderr, "Insert error %d: %s\n", mysql_errno (&my_connection), mysql_error(&my_connection));
}
//修改数据(update操作),如遇异常则返回
res = mysql_query (&my_connection, "update teacher set year= 1999 where name ='Peter'");
if (res)
fprintf (stderr, "Update error %d: %s\n", mysql_errno (&my_connection), mysql_error(&my_connection));
}
sprintf(buf,SELECT_QUERY,atoi(argv[1]));
//查询数据行(select操作)
if(mysql_query(handle,buf)) {
fprintf(stderr,"Query failed (%s)\n",mysql_error(handle)); exit(1);
}
//缓存结果
If (! (result=mysql_store_result(handle))) {
fprintf(stderr,"Get result from %s failed\n", mysql_error (handle));
exit(1);
}
printf("number of fields returned: %d\n",mysql_num_fields (result));
query ok !
4 结语
用C语言访问 MySQL 在实际 Web 应用中并不多见,但是有时候为了获取更高访问性能,会直接用C语言来开发相关的数据库访问模块,这样可以更好地利用服务器的资源,并且使用C语言具有更好的安全性,所以用C语言访问MySQL数据库相比其他语言虽然在程序开发上成本高一些,但是具备更好的性能和安全性。
参考文献
[1]吴垠,余瑾,郭磊等.MySQL数据库在嵌入式Linux平台上的移植和应用[J].电子技术,2011,38(07):12-13.
[2]赵洪明.MySQL中访问数据库的程序设计[J].黄石高等专科学校学报,2012,18(01):10-12.
[3]李达.基于知识库的高分辨率遥感影像分割系统的设计与实现[D].太原:山西大学,2014.
作者简介
张丽(1981-)女,汉族,山西省襄汾县人。硕士学位。现为山西管理职业学院讲师。主要研究方向为计算机语言。
作者单位
山西管理职业学院 山西省临汾市 041000