基于C语言访问的MySQL数据库

2016-12-26 15:58张丽
电子技术与软件工程 2016年22期
关键词:C语言数据库

摘 要

本文重点介绍了MySQL数据库的数据操作,并研究了在C语言中操作MySQL数据库的基本API,包括MySQL库中表的基本定义和常见的数据库操作如增删改查、联合查询等。

【关键词】C语言 数据库 MySQL

1 引言

1.1 C语言

C语言产生于50年前,是一种常采用的高级程序语言。基于C语言的设计采用相对简单的编译器,提供低级访问内存与语言结构,能有效地将程序语言映射到机器指令,并提供各种运行支持。C语言常用于操作系统、编译器、数据库为代表的汇编语言编写的应用程序设计等。C语言基于其灵活、跨平台、高效等特点,从微控制器嵌入到超级计算机开发等均被广泛采用。

C程序的开发通常需要预编译、编译、链接、运行等阶段。预编译采用宏替换源码;编译过程将源码翻译成二进制机器码;链接过程将程序采用的静态、动态库进行连接,生成二进制可执行程序,并在运行阶段直接运行。

1.2 MySQL数据库

现代常用的数据库分为关系型数据库、分布式数据库以及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 –h10.0.0.1 -uroot –ppsd

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

猜你喜欢
C语言数据库
基于Visual Studio Code的C语言程序设计实践教学探索
基于C语言的计算机软件编程
高职高专院校C语言程序设计教学改革探索
论子函数在C语言数据格式输出中的应用