C/C++操作mysql数据库详解

一.准备

  1. 头文件:#include "winsock.h"

           #include "mysql.h"

  1. 库文件:libmysql.dll 和libmysql.lib
  2. 调用库:#pragma comment(lib,"ws2_32")

           #pragma comment (lib, "libmysql.lib")

  1. MYSQL m_mysql;    //MySQL对象

    MYSQL_RES *pRes;//结果集    

   MYSQL_ROW row;  //行数据, return data as array of strings

二.常用函数

  1. int STDCALL mysql_server_init(int argc, char **argv, char **groups);

   描述

   初始化libmysqld 库。

返回值

   成功返回0,失败返回非0

int a = mysql_server_init (0, NULL, NULL);

  1. MYSQL * mysql_init(MYSQL *mysql);

描述

分配或初始化与mysql_real_connect()相适应的MYSQL对象。如果mysql是NULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。如果mysql_init()分配了新的对象,当调用mysql_close()来关闭连接时。将释放该对象。

返回值

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

if (mysql_init(&m_mysql) == NULL)

  1. int  mysql_options(MYSQL *mysql,enum mysql_option option,const char *arg);

描述

设置额外的连接选项,并影响连接的行为。可多次调用该函数来设置数个选项。

返回值

该函数成功时返回0。如果使用了未知选项,返回非0值。

mysql_options(&m_mysql, MYSQL_OPT_CONNECT_TIMEOUT, szBuf); //VC6.0

mysql_options(&m_mysql, MYSQL_SET_CHARSET_NAME, "utf8");   //VS2005

  1. 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 clientflag);

描述

尝试与运行在主机上的MySQL数据库引擎建立连接。

返回值

如果连接成功,返回MYSQL*连接句柄。如果连接失败,返回NULL。对于成功的连接,返回值与第1个参数的值相同。

if(mysql_real_connect(&mysql, "192.168.1.175", "root", "232528", "fjh_sql", 3306, NULL, 0))

  1.  int  mysql_set_character_set(MYSQL *mysql, const char *csname);

描述

该函数用于为当前连接设置默认的字符集。该函数的工作方式与SET NAMES语句类似

返回值

该函数0表示成功,非0值表示出现错误。

if (0 != mysql_set_character_set(&mysql, "utf8"))

  1. int  mysql_query(MYSQL *mysql, const char *q);

描述

向与指定的连接标识符关联的服务器中的当前活动数据库发送一条查询。查询“q”语句,然后执行该语句。

返回值

仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。对于其它类型的 SQL 语句,mysql_query() 在执行成功时返回 TRUE,出错时返回 FALSE。

ASSERT(mysql_query(&mysql, "SET NAMES GBK") == 0);  //设置输出字符的编码

  1. const char * mysql_error(MYSQL *mysql);

描述

返回上一个 MySQL 操作产生的文本错误信息

返回值

本函数返回上一个 MySQL 函数的错误文本,如果没有出错则返回 空字符串

strText.Format("Error: %s", mysql_error(&m_mysql));

  1. MYSQL_RES * mysql_store_result(MYSQL *mysql);

描述

将查询的全部结果读取到客户端,分配1个MYSQL_RES结构,并将结果置于该结构中。

返回值

如果查询未返回结果集,将返回Null指针(例如,如果查询是INSERT语句)。如果读取结果集失败,还会返回Null指针

MYSQL_RES  *pRes = mysql_store_result(&m_mysql);     

  1. void mysql_free_result(MYSQL_RES *result);

描述

释放结果内存。

返回值

mysql_free_result(pRes);               

  1. unsigned int mysql_num_fields(MYSQL_RES *res);

描述

返回结果集中字段的数。

返回值

成功返回结果集中字段的数。如果失败,则返回 false。

int nCol = mysql_num_fields(pRes);            

  1. MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

描述

在mysql_store_result()之后使用时,检索一个结果集合的下一行。

返回值

如果没有更多的行可检索时,mysql_fetch_row()返回NULL。

while (MYSQL_ROW row = mysql_fetch_row(pRes))    

  1. unsigned long  * mysql_fetch_lengths(MYSQL_RES *result);

描述

取得一行中每个字段的内容的长度。

返回值

若成功,则该函数返回一个数字数组,若出错或没有其他的行,则返回 false。

UINT *pRowLen = (UINT*)mysql_fetch_lengths(pRes);

  1. void mysql_close(MYSQL *sock);

描述

关闭 MySQL 连接

返回值

mysql_close(&m_mysql);

  1. SELECT LAST_INSERT_ID()

描述

替代mysql_insert_id()函数,在查询语句内部使用。自动返回最后一个INSERT查询中AUTO_INCREMENT列设置的第一个表发生的结果集。

返回值

将最后返回的结果集保存到MySQL对象。

mysql_query(&m_mysql, "SELECT LAST_INSERT_ID()")

三.连接

  1. 调用mysql_server_init()初始化libmysqld 库;
  2. 调用mysql_init()初始化MYSQL对象;
  3. 调用mysql_options()设置字符集;
  4. 调用mysql_real_connect()连接数据库。

四.插入

  1. 调用mysql_query()执行拼凑好的插入语句;
  2. 调用mysql_query(&m_mysql, "SELECT LAST_INSERT_ID()") != 0)自动返回最后一个INSERT查询中 AUTO_INCREMENT列设置的第一个表发生的值。

五.修改

  1. 调用mysql_query()执行拼凑好的修改语句

六.查询

  1. 调用mysql_real_query()执行拼凑好的查询语句;
  2. 调用mysql_store_result()将查询到的数据返回到结果集pRes中;
  3. 调用mysql_num_fields()返回字段总数;
  4. 调用(UINT)pRes->row_count返回总行数   ;
  5. 调用mysql_fetch_row(pRes)返回行数据row;使用while循环,直到结果集为空(没有数据),结果集自动增加
  6. 调用mysql_fetch_lengths()返回列名长度;
  7. 通过row[nCol]查询列数据;nCol为需要查询的列数
  8. 调用mysql_free_result()释放结果集。

七.删除

  1. 调用mysql_query()执行拼凑好的删除语句。

八.关闭

  1. 调用mysql_close关闭关闭 MySQL 连接。

如果有帮到您烦请点个赞~\(≧▽≦)/~

 

 

猜你喜欢

转载自blog.csdn.net/sumaliqinghua/article/details/83240144
今日推荐