>

用C语言操作MySQL数据库,连MySQL中的一些小知识点

- 编辑:www.bifa688.com -

用C语言操作MySQL数据库,连MySQL中的一些小知识点

此文章首要介绍的是VC 连MySQL中的一些小知识点,旧事中MySQL数据库的质量很好,所以前几日备选对其测试一下,假使效果的确很好的话就把数据库换来MySQL.但没悟出那一弄就折腾了八个小时.

先看结构体

一、MySQL For Windows安装:

唉!然而辛亏以往都消除了,恩,将来把前几个小时里学到的东西记在此处,以备有的时候之需哈~

----------------------------------------------

1. 下载:

MySQL是开源的,网络很轻便就下的到MySQL Dowload.作者下的是WINDOWS版的,安装相当的粗略,这里就相当的少说了,可是别忘了还得下个管理工科具.MySQL不像MSSQL那样带有图形分界面的管理工科具,图形分界面程序它只带了重新配置MySQL的MySQLInstanceConfig.exe,

 以下代码块是用来连接数据库的通信进度,要接二连三MYSQL,必须树立MYSQL实例,通过mysql_init初阶化方能起首开始展览连接.

上官方网站下载就能够:

剩余的正是一批命令行程序了.聊起重新配置MySQL,小编得提示下,MySQLInstanceConfig.exe若是停在了最终一步Start Service这里报错的话,就从新安装MySQL吧,无论怎么安插都过不了那步.但是具体应该可以手工资制度改优异的,然而本身没搞懂哈,直接重装就好了.MySQL管理工科具有众多,还会有PHP版的,笔者用的是MySQL GUI Tools 5.0,算是官方版的吧,非常好用的

typedef struct st_mysql {

 NET           net;            /* Communication parameters */

 gptr          connector_fd;   /* ConnectorFd for SSL */

 char          *host,*user,*passwd,*unix_socket,

                *server_version,*host_info,*info,*db;

 unsigned int port,client_flag,server_capabilities;

 unsigned int protocol_version;

 unsigned int field_count;

 unsigned int server_status;

 unsigned long thread_id;      /* Id for connection in server */

 my_ulonglong affected_rows;

 my_ulonglong insert_id;       /* id if insert on table with NEXTNR */

 my_ulonglong extra_info;              /* Used by mysqlshow */

 unsigned long packet_length;

 enum mysql_status status;

 MYSQL_FIELD   *fields;

 MEM_ROOT      field_alloc;

 my_bool       free_me;        /* If free in mysql_close */

 my_bool       reconnect;      /* set to 1 if automatic reconnect */

 struct st_mysql_options options;

 char          scramble_buff[9];

 struct charset_info_st *charset;

 unsigned int server_language;

} MYSQL;

http://www.mysql.com/downloads/

MySQL有提供C的API接口,当然笔者就径直用的它了,因为故事它比用ADO要快一些.在MySQL的安装目录下您会找到include和lib文件夹(完全安装方式下),里面分别是C接口的头文件和库文件,库文件只用libmysql.lib就好了,头文件的话代码里只需引用mysql.h,

其一结构意味珍视返行的3个查询的(SELECT, SHOW, DESCRIBE, EXPLAIN)的结果。重回的数量称为“数据集”,用过数据库的情侣应该对数据库中询问后获取的结果集不会目生,在C的API里对应的正是MYSQL_RES了,从数据库读取数据,最终便是从MYSQL_RES中读取数据。

2. 安装:

自然编写翻译的时候mysql.h还援引了同目录下的其他文件,所以自身就把include文件夹里的具有文件都拷贝到VC 的include文件夹里的,只把libmysql.lib拷贝到了VC 的lib文件夹里.

typedef struct st_mysql_res {

 my_ulonglong row_count;

 unsigned int field_count, current_field;

 MYSQL_FIELD   *fields;

 MYSQL_DATA    *data;

 MYSQL_ROWS    *data_cursor;

 MEM_ROOT      field_alloc;

 MYSQL_ROW     row;            /* If unbuffered read */

 MYSQL_ROW     current_row;    /* buffer to current row */

 unsigned long *lengths;       /* column lengths of current row */

 MYSQL         *handle;        /* for unbuffered reads */

 my_bool       eof;            /* Used my mysql_fetch_row */

} MYSQL_RES;

从未有过什么好说的,傻瓜式,也不曾什么样要留心的。

自个儿新建的是个MFC程序,因为MySQL须求互连网援救,所以在MFC程序创设向导里要选上"Windows 套接字",不然编写翻译的时候会报SOCKET相关的荒谬(在那边自个儿折腾了半个钟头大约-.-|||).mysql.h必须在windows.h和sockets头文件之后被引用,MFC里自个儿就把它内置stdafx.h的末段1行了.最后别忘了在连接器参数里拉长libmysql.lib的三番五次,否则会报错:XXX函数未注明.

 

3. 配置:

VC 连MySQL中要用到的MySQL函数:

----------------------------------------------

加多系统变量MYSQL_HOME和修改PATH,目标正是让系统暗许同以找到MySQL指令。(安装目录的/bin下边)

MYSQL* mysql_init(NULL) //初步化贰个MYSQL对象,前边的操作要用到

再看函数:

PS:

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) //建设构造连接,db是要访问的数据库,unix_socket和client_flag经常为NULL就足以了.连接成功再次回到第贰个参数,不然失利

 

补给一下,有的朋友或者下载的是免安装版本,拷贝到一个地点就可以了,那个时候,配置也许需求的,不过配置完毕以往,必要手动安装MySQL服务。因为我们是想既要搭建MySQL服务器端,又要搭建MySQL客户端,服务器端是内需打开服务的,所以要求手动安装并运营mysql服务。还应该有正是要注意,英特网的片段WAMP集成安装包,只包蕴了SQL web有关的工具,是不全的,要求设置200多M的可怜版本。

nt mysql_query(MYSQL *mysql, const char *stmt_str) //实行一个查询,成功时再次来到0

C语言操作mysql数据 常用函数

连带的多少个指令如下:

MYSQL_RES *mysql_store_result(MYSQL *mysql) //获取查询重临的结果集,失利时再次回到0

所需头文件: #include <mysql/mysql.h>
职能:  得到或早先化一个MYSQL结构
函数原型: MYSQL *mysql_init(MYSQL *mysql)
函数重临值: 八个被始化的MYSQL*句柄
备注:  在内部存款和储蓄器不足的状态下,重返NULL

mysqld -install //安装mysql服务

unsigned int mysql_num_fields(MYSQL_RES *result) //获取重返结果集的字段数量

所需头文件: #include <mysql/mysql.h>
函数成效: 关闭多少个服务器连接,并释放与连接相关的内部存款和储蓄器
函数原型: void mysql_close(MYSQL *mysql);
函数字传送入值: MYSQL:类型的指针
函数再次回到值: 无

mysqld -remove  //卸载mysql服务

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result) //获取一行记录,并将移动到下个记录,重回NULL时则遍历完了具备行或出错.MYSQL_ROW类型是个字符串数组,下标为[0,columnLength-1]

所需头文件: #include <mysql/mysql.h>
函数功能: 连接一个MySQL服务器
函数原型: MYSQL * mysql_connect(MYSQL *mysql,const char *host,const char *user,const char *passwd);
函数字传送入值: mysql表示二个留存mysql结构的地址
  host表示MYSQL服务器的主机名或IP
  user代表登入的用户名
  passwd代表登入的密码
函数再次回到值: 假若延续成功,1个MYSQL *老是句柄:假诺连接失利,NULL
备考:  该函数不推荐,使用mysql_real_connect()代替

net start mysql  //启动mysql服务

void mysql_free_result(MYSQL_RES *result) //释放结果集

所需文件: #include <mysql/mysql.h>
函数效用: 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 int client_flag);
函数传入值: mysql表示多个留存mysql结构的地址
  host表示MYSQL服务器的主机名或IP
  user表示登6的用户名
  passwd表示登入的密码
  db表示要连接的数据库
  port表示MySQL服务器的TCP/IP端口
  unix_socket表示连接类型
  client_flag表示MySQL运营ODBC数据库的标识
函数再次回到值: 假设总是成功,1个MYSQL*老是句柄:假使几次三番退步,NULL

net stop mysql  //停止mysql服务

void mysql_close(MYSQL *mysql) //关闭连接

所需头文件: #include <mysql/mysql.h>
函数成效: 再次来到最新的UPDATE,DELETE或INSERT查询影响的行数
函数字传送入值: MYSQL:类型指针
函数再次回到值: 大于零的3个卡尺头表示受到震慑或搜求出来的行数。零意味着未有区配查序中WHERE子句的笔录或目前还未曾询问被试行;-一表示查询重返2个荒谬,或对于3个SELECT查询

mysqladmin -version //查看mysql服务是还是不是安装成功

那边是实际代码(写的异常粗哈~测试嘛~)

所需头文件: #include <mysql/mysql.h>
函数功效: 对钦定的连日推行查询
函数原型: int mysql_query(MYSQL *mysql,const char *query);
函数字传送入值: query表示实施的SQL语句
函数重临值: 假设查询成功,为零,出错为非零。
有关函数: mysql_real_query

也得以因此Windows的服务工具来铺排MySQL。

MYSQL mysql;  mysql_init(&mysql);  ASSERT(mysql_real_connect(&mysql, "127.0.0.1", "alacky", "password", "Test", 3306, 0, 0));  ASSERT(mysql_query(&mysql, "SELECT * FROM maxTest") == 0);   MYSQL_RES *result;  result = mysql_store_result(&mysql);  MYSQL_ROW row;  ULONG colLen = mysql_num_fields(result);  CString datas = "";   while(row = mysql_fetch_row(result))  

所需头文件: #include <mysql/mysql.h>
函数功用: 为无缓冲的结果集获得结果标记符
函数原形: MYSQL_RES *mysql_use_result(MYSQL *mysql);
函数传入值: MYSQL:类型的指针
函数再次回到值: 1个MYSQL_RES结果结构,固然产生八个谬误发NULL

二、MySQL基础:

遍历每行记录

#incluee <mysql/mysql.h>
搜寻一个结果集合的下1行
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
MYSQL_RES:结构的指针
下一行的二个MYSQL_ROW结构。若是未有越来越多的行可搜索或只要现身3个荒唐,NULL

1. 连接MySQL:

{  for(ULONG i=0; i<colLen; i  )   {  datas  = row[i] ? row[i] : "NULL";  datas  = "t";  }  datas  = "nn";  }  mysql_free_result(result);  mysql_close(&mysql); 

#include <mysql/mysql.h>
回到钦点结果聚焦列的数目
unsigned int mysql_num_fields(MYSQL_RES *res);
MYSQL_RES 结构的指针
结果会集中字段数量的二个无符号整数

先是再鲜明三个定义,未来大家是在就学怎么使用MySQL,大家的MySQL服务器端是安装在本机上,MySQL客户端也是安装在本机上的。大家登录MySQL正是因而CMD命令行工具,用客户端命令mysql登六到本机MySQL服务器端,本机开启的服务是MySQL,进度是mysql.exe。

上述的连带内容就是对VC 连MySQL小记的牵线,望你能具备收获。

#include <mysql/mysql.h>
开创1个数据库
int mysql_create_db(MYSQL *mysql,const char *db);
MYSQL:类型的指针
db:要开创的多寡库名
设若数据库成功地被创建,再次来到零,如若爆发错误,为非零。

设置到位现在,暗中同意的Host和User是:

...

#include <mysql/mysql.h>
选择三个数据库
int mysql_select_db(MYSQL *mysql,const char *db);
MYSQL:类型的指针
db:要开创的数额库名
若果数据库成功地被创建,重返零,借使发生错误,为非零。

中间密码都为空。

 

大家有二种方法连接mysql服务器,不钦点Host/User/Password默许正是依据localhost佚名用户的措施连接。

----------------------------------------------

脱离的mysql服务器使用命令exit也许quit。

再看例子:

mysql //localhost 无名形式登录

      很两人用到MySQL来支付一些档案的次序,一时为了质量,大家会间接用C语言来支付相关的模块,特别在大家的web应用中,就算PHP、JSP等脚本均 提供了MySQL的接口,不过鲜明直接运用C语言具备更加好的安全性和总体性,迈克尔以前用PHP开垦的三个门类中就动用了C语言编写的那类接口,然 后再编写翻译到php里面,供php脚本直接使用,那上头的话题就异常少说了,下边首要说一下在Linux下何以用C语言连接MySQL数据库,并且读取里面包车型大巴数据再次回到,同期如何进展编写翻译。

mysql -u root -p //localhost root password形式登六

  这里的繁多代码参照他事他说加以考察了MySQL发行李包裹里面包车型客车.c源文件,大家也足以去里面找找相关的代码,上边这段代码实现了连接到地面MySQL服务器上玖tmd_bbs_utf八数据库,从数量表tbb_user中依照输入的userid获得该用户的用户名并打字与印刷输出到巅峰。

exit //退出mysql服务器

#if defined(_WIN32) || defined(_WIN6四) //为了帮助Windows平台上的编写翻译
#include <windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"  //笔者的机器上该文件在/usr/local/include/mysql下
 
//定义数据库操作的宏,也得以不定义留着前边一贯写进代码
#define SELECT_QUERY "select username from tbb_user where userid = %d"
 
int main(int argc, char **argv) //char **argv 相当于 char *argv[]
{
    MYSQL mysql,*sock;    //定义数据库连接的句柄,它被用来大概全体的MySQL函数
    MYSQL_RES *res;       //查询结果集,结构类型
    MYSQL_FIELD *fd ;     //蕴涵字段音讯的布局
    MYSQL_ROW row ;       //存放一行询问结果的字符串数组
    char qbuf[160];      //存放查询sql语句字符串
    
    if (argc != 贰) { //检查输入参数
        fprintf(stderr,"usage : mysql_select <userid>nn");
        exit(1);
    }
    
    mysql_init(&mysql);
    if (!(sock = mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",0,NULL,0))) {
        fprintf(stderr,"Couldn't connect to engine!n%snn",mysql_error(&mysql));
        perror("");
        exit(1);
    }
    
    sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));
    if(mysql_query(sock,qbuf)) {
        fprintf(stderr,"Query failed (%s)n",mysql_error(sock));
        exit(1);
    }
    
    if (!(res=mysql_store_result(sock))) {
        fprintf(stderr,"Couldn't get result from %sn", mysql_error(sock));
        exit(1);
    }
    
    printf("number of fields returned: %dn",mysql_num_fields(res));
        
    while (row = mysql_fetch_row(res)) {
        printf("Ther userid #%d 's username is: %sn", atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0]))) ? "NULL" : row[0])) ;
        puts( "query ok !n" ) ;
    }
    
    mysql_free_result(res);
    mysql_close(sock);
    exit(0);
    return 0;   //. 为了协作大多数的编写翻译器参加此行
}

2. 改造mysql服务器用户密码:

编写翻译的时候,使用下边包车型客车授命

mysqladmin -u root -p password //中间提示输入当前密码三回,新密码几遍

gcc -o mysql_select ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 后边四个选择可选,依据你的意况气象

三. MySQL基础语法:

运行的时候,试行上边的指令

1.成立数据库,名称叫RUNOOB

./mysql_select 1

mysqladmin -u root -p create RUNOOB

将再次回到如下结果:

二.刨除数据库,名叫RUNOOB

number of fields returned: 1
Ther userid #1 's username is: Michael
query ok !

mysqladmin -u root -p drop RUNOOB

上面包车型大巴代码小编想超过3/陆都能看驾驭,不晓得的能够参见一下MySQL提供的关于C语言API部分文档,各样函数都有详尽表达,不经常光小编整理1份常用的API表达出来。

3.展现数据库:

 

mysql> show databases; //注意后边要加;号,表示一条mysql语句甘休


4.增选数据库:

mysql> use RUNOOB;

伍.数据类型:

陆.出示当前数据库下的数据表:

mysql> show tables;

七.创设数据表:

mysql>CREATE TABLE runoob_tbl(->runoob_id INTNOTNULLAUTO_INCREMENT,->runoob_title VARCHAR(100)NOTNULL,->runoob_author VARCHAR(40)NOTNULL,->submission_dateDATE,->PRIMARY KEY ( runoob_id )->);

1

2

3

4

5

6

7

1

2

3

4

5

6

7

八.去除数据表:

mysql> DROP TABLE runoob_tbl

9.插入数据:

mysql> INSERT INTO runoob_tbl    ->(runoob_title, runoob_author, submission_date)->VALUES->("Learn PHP","John Poul",NOW());

1

2

3

4

1

2

3

4

十.询问数据表中的数据:

SELECT * from runoob_tbl

1①.Show有关的语法:

SHOWDATABASES;//列出 MySQL Server上的数据库SHOWTABLES [FROMdb_name];//列出数据库中的表SHOWTABLESTATUS [FROMdb_name];//列出数据库的表音信,相比较详细SHOWCOLUMNSFROMtbl_name [FROMdb_name];//列出表的列新闻,同SHOWFIELDSFROMtbl_name [FROMdb_name],DESCRIBEtbl_name [col_name]SHOWFULLCOLUMNSFROMtbl_name [FROMdb_name];//列出表的列消息,相比详细,同SHOWFULLFIELDSFROMtbl_name [FROMdb_name]SHOWINDEXFROMtbl_name [FROMdb_name];//列出表的目录新闻SHOWSTATUS;//列出 Server 的情况音信SHOWVA牧马人IABLES;//列出 MySQL 系参数值SHOWPROCESSLIST;//查看当前mysql查询进度SHOWGRANTSFORuser;//列出用户的授权命令

1

2

3

4

5

6

7

8

9

10

1

2

3

4

5

6

7

8

9

10

12.where子句:

mysql> SELECT * from runoob_tbl WHERE runoob_author='Sanjay'; //查询某3个符合条件的表项

13.update查询:

//查询并修改表中的一项,最后更新表格mysql>UPDATE runoob_tbl->SETrunoob_title='Learning JAVA'->WHERErunoob_id=3;

1

2

3

4

1

2

3

4

14.delete语句:

mysql> DELETE FROM runoob_tbl WHERE runoob_id=三; //删除表中的某一项

15.ALTER命令:

mysql> ALTERTABLEtestalter_tbl  DROP i;//删除上述表的 i 字段mysql> ALTERTABLEtestalter_tbl ADD i INT;//在表 testalter_tbl 中增多 i 字段,并定义数据类型mysql> ALTERTABLEtestalter_tbl MODIFY c CHATucson(10);//把字段 c 的花色从 CHATiguan(一) 改为 CHA牧马人(十)mysql> ALTERTABLEtestalter_tbl    -> MODIFY j BIGINT NOT NULL DEFAULT100;//内定字段 j 为 NOT NULL 且默许值为十0mysql> ALTERTABLEtestalter_tbl ALTE帕杰罗 iSETDEFAULT壹仟;//使用 ALTE汉兰达来修改字段的暗许值mysql> ALTERTABLEtestalter_tbl ALTE奥德赛 i DROP DEFAULT;//使用 ALTEBMWX伍 命令及 DROP子句来删除字段的暗中认可值mysql> ALTERTABLEtestalter_tbl RENAMETOalter_tbl;//修改表名

1

2

3

4

5

6

7

8

1

2

3

4

5

6

7

8

16.正则表达式:

正则表明式是通用的,和C、Linuxshell一样的。

mysql>SELECTnameFROMperson_tblWHEREname REGEXP'^st';//查找name字段中以'st'为开头的持有数据mysql>SELECTnameFROMperson_tblWHEREname REGEXP'ok$';//查找name字段中以'ok'为终极的兼具数据mysql>SELECTnameFROMperson_tblWHEREname REGEXP'mar';//查找name字段中含有'mar'字符串的全体数据mysql>SELECTnameFROMperson_tblWHEREname REGEXP'^[aeiou]|ok$';//查找name字段中以元音字符早先且以'ok'字符串结尾的持有数据

1

2

3

4

1

2

3

4

肆. MySQL键和目录的概念:

http://www.runoob.com/mysql/mysql-index.html

http://blog.csdn.net/duck_arrow/article/details/8264686

http://www.jb51.net/article/34037.htm

三、MySQL C API编程:

实质就是C语言调用libmysql.lib库,使用其提供的的函数来连接,访问,修改MySQL数据库中的内容。

1. MYSQL结构体:

以此结构首要用于连接,保存一些延续的消息。

typedefstructst_mysql { NET          net;/* Communication parameters */gptr          connector_fd;/* ConnectorFd for SSL */char*host,*user,*passwd,*unix_socket,                *server_version,*host_info,*info,*db;unsignedintport,client_flag,server_capabilities;unsignedintprotocol_version;unsignedintfield_count;unsignedintserver_status;unsignedlongthread_id;/* Id for connection in server */my_ulonglong affected_rows; my_ulonglong insert_id;/* id if insert on table with NEXTNR */my_ulonglong extra_info;/* Used by mysqlshow */unsignedlongpacket_length;enummysql_status status; MYSQL_FIELD  *fields; MEM_ROOT      field_alloc; my_bool      free_me;/* If free in mysql_close */my_bool      reconnect;/* set to 1 if automatic reconnect */structst_mysql_options options;charscramble_buff[9];structcharset_info_st *charset;unsignedintserver_language;} MYSQL;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

2. MYSQL_RES结构体:

以此组织首借使回去一些操作数据库(SELECT, SHOW, DESC本田CR-VIBE, EXPLAIN等)的结果,即“数据集”。

typedefstructst_mysql_res { my_ulonglong row_count;unsignedintfield_count, current_field; MYSQL_FIELD  *fields; MYSQL_DATA    *data; MYSQL_ROWS    *data_cursor; MEM_ROOT      field_alloc; MYSQL_ROW    row;/* If unbuffered read */MYSQL_ROW    current_row;/* buffer to current row */unsignedlong*lengths;/* column lengths of current row */MYSQL        *handle;/* for unbuffered reads */my_bool      eof;/* Used my mysql_fetch_row */} MYSQL_RES;

1

2

3

4

5

6

7

8

9

10

11

12

13

1

2

3

4

5

6

7

8

9

10

11

12

13

叁. MySQL C API编制程序步骤:

切实有什么函数,能够到英特网查找一下有关介绍,这里讲一下编制程序步骤:

(壹)、首先大家要含有mysql的头文件,并链接mysql动态库。即增多以下语句:

#include       // 实行网络编制程序须求winsock二.h

#include

#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_use_result开始化检索,以便于后边1行壹行的读取结果集,而它本身并未从服务器读取任何数据,这种办法相比第1种速度越来越快且所需内部存款和储蓄器更加少,但它会绑定服务器,阻止别的线程更新任何表,而且必须重新实行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);

(九)、不再查询Mysql数据库时,调用mysql_close函数关闭数据库连接。mysql_close函数的原型为:

void STDCALL mysql_close(MYSQL *sock);

肆. MySQL C API编制程序例子:

#if defined(_WIN32) || defined(_WIN6四)//为了帮忙windows平台上的编写翻译#include #endif#include #include #include "mysql.h"//作者的机器上该文件在/usr/local/include/mysql下//定义数据库操作的宏,也足以不定义留着后面平昔写进代码#define SELECT_QUERY "select username from tbb_user where userid = %d"intmain(intargc,char**argv)//char **argv 相当于 char *argv[]{    MYSQL mysql,*sock;//定义数据库连接的句柄,它被用来大概全部的MySQL函数MYSQL_RES *res;//查询结果集,结构类型MYSQL_FIELD *fd ;//蕴含字段消息的结构MYSQL_ROW row ;//存放壹行询问结果的字符串数组charqbuf[160];//存放查询sql语句字符串if(argc !=贰) {//检查输入参数fprintf(stderr,"usage : mysql_select nn");exit(1);    }    mysql_init(&mysql);if(!(sock = mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",0,NULL,0))) {fprintf(stderr,"Couldn't connect to engine!n%snn",mysql_error(&mysql));        perror("");exit(1);    }sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));if(mysql_query(sock,qbuf)) {fprintf(stderr,"Query failed (%s)n",mysql_error(sock));exit(1);    }if(!(res=mysql_store_result(sock))) {fprintf(stderr,"Couldn't get result from %sn", mysql_error(sock));exit(1);    }printf("number of fields returned: %dn",mysql_num_fields(res));while(row = mysql_fetch_row(res)) {printf("Ther userid #%d 's username is: %sn", atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0]))) ?"NULL": row[0])) ;puts("query ok !n") ;    }    mysql_free_result(res);    mysql_close(sock);exit(0);return0;//. 为了合作大多数的编写翻译器参预此行}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

末尾看2个例证,另叁个网络朋友VS20一5 C连接MySQL的实现:

VS2015连接mySQL数据库

本文由88bifa必发唯一官网发布,转载请注明来源:用C语言操作MySQL数据库,连MySQL中的一些小知识点