`
dato0123
  • 浏览: 906582 次
文章分类
社区版块
存档分类
最新评论

使用C语言连接MySQL数据库_初级

 
阅读更多

/*

* 1. 编译环境

* 操作系统 Ubuntu10.04
* GCC 4.4.3
* 首先请确保你的系统安装了下列软件包:
* 1. mysql-client,libmysqlclient-dev和libmysqlclient15off
* sudo apt-get install mysql-client libmysqlclient-dev libmysqlclient15off
*    ps:若提示找不到libmysqlclient15off,请在软件源中添加
*    deb http://security.ubuntu.com/ubuntu hardy-security main
* 2. mysql-server
* sudo apt-get install mysql-server
*

* 2. 使用前,先在mysql中建立数据库batman: create database batman;

* 在batman中建立两张表:TCPpackets, UDPpackets
* create table UDPpackets(MB double,KbperSec double,seconds double,percents double);
* create table TCPpackets(MB double,KbperSec double);
*

* 3. 编译选项:

* gcc -o c_mysql ./c_mysql.c -I /usr/include/mysql -L /usr/lib/mysql -l mysqlclient -std=c99
*

* 4. 使用方法:

* ./c_mysql <filename> -tcp|-udp

*/

源文件c_mysql.c的内容如下:


上述代码的主要作用是把测试batman协议的结果数据保存到MySQL中,结果包括对TCP测试的结果和对UDP测试的结果。这两种数据的格式如下:
TCP:


UDP:


这不是重点,重点是对MySQL的操作。可是废话已经一萝筐了...

1. 首先是第一个要用到的结构:

MYSQL

该结构代表1个数据库连接的句柄。几乎所有的MySQL函数均使用它。不应尝试拷贝MYSQL

结构。不保证这类拷贝结果会有用。在后续的数据库操作中都要把它作为参数的。

2. 在声明一个MYSQL类型的变量mysql后,就要首先调用 mysql_init(&mysql);

该函数的原型是:MYSQL *mysql_init(MYSQL *mysql)

描述

分配或初始化与mysql_real_connect()相适应的MYSQL对象。如果mysql是NULL指针,该

函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。如果

mysql_init()分配了新的对象,当调用mysql_close()来关闭连接时,将释放该对象。


返回值
初始化的MYSQL*句柄。如果无足够内存以分配新的对象,返回NULL。

错误
在内存不足的情况下,返回NULL。

3. 调用mysql_real_connect来获得一个连接实例。

该函数的原型是:MYSQL *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 client_flag)

描述

mysql_real_connect()尝试与运行在主机上的MySQL数据库引擎建立连接。在你能够执行

需要有效MySQL连接句柄结构的任何其他API函数之前,mysql_real_connect()必须成功

完成。


参数的指定方式如下:
# 第1个参数应是已有MYSQL结构的地址。调用mysql_real_connect()之前,必须调用

mysql_init()来初始化MYSQL结构。

# “host”的值必须是主机名或IP地址。如果“host”是NULL或字符串"localhost",连接将被

视为与本地主机的连接。如果操作系统支持套接字(Unix)或命名管道(Windows),

将使用它们而不是TCP/IP连接到服务器。

# “user”参数包含用户的MySQL登录ID。如果“user”是NULL或空字符串"",用户将被视为

当前用户。在UNIX环境下,它是当前的登录名。在Windows ODBC下,必须明确指定

当前用户名。

# “passwd”参数包含用户的密码。如果“passwd”是NULL,仅会对该用户的(拥有1个空密

码字段的)用户表中的条目进行匹配检查。这样,数据库管理员就能按特定的方式设置

MySQL权限系统,根据用户是否拥有指定的密码,用户将获得不同的权限。


4. 执行增删改查操作mysql_query:

该函数的原型是:int mysql_query(MYSQL *mysql, const char *query)
描述

# 执行由“Null终结的字符串”查询指向的SQL查询。正常情况下,字符串必须包含1条SQL语

句,而且不应为语句添加终结分号(‘;’)或“\g”。如果允许多语句执行,字符串可包含多条

由分号隔开的语句。

# mysql_query()不能用于包含二进制数据的查询,应使用mysql_real_query()取而代之

(二进制数据可能包含字符‘\0’,mysql_query()会将该字符解释为查询字符串结束)。

# 如果希望了解查询是否应返回结果集,可使用mysql_field_count()进行检查。

返回值
如果查询成功,返回0。如果出现错误,返回非0值。

总结:以上只是介绍了本程序要用到的MySQL数据结构和函数,这些介绍都是来自MySQL手册,

详细信息可以参MySQL C API

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics