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

el/2024/7/17 3:53:01

一.准备

  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 连接。

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

 

 


http://www.ngui.cc/el/4890814.html

相关文章

SQL 常用基本语句总结大全—增删改查语句

SQL 语句的添加、删除、修改 添加、删除、修改使用 db.Execute(Sql)命令执行操作 (一) Select 语句 普通查询 查询全部的行和列 select * from users 查询部分的行并用 as 命名列(as 可用空格代替) select UserName as 用户名,NickName 密码,sex from …

一文搞懂候选码、主码、全码、外码、主属性、主键、主关键字、非主属性清晰总结

一、讲解 首先说明 键字码字,所以 主键主码主关键字,候选键候选码候选关键字... 所谓关系键,指的是一个表中的一个(或一组)属性,用来标识该表的每一行或与另一个表产生联系。 话不多说,上图&a…

【通俗易懂】关系模式范式分解教程 3NF与BCNF口诀!小白也能看懂

本来是为了复习数据库期末考试,结果找了一圈都没有发现比较好的解释,通过查阅资料和总结,为大家提供通俗易懂的解法,一听就会!并且配有速记口诀!介是你没有玩过的船新版本包含最小依赖集求法候选码求法 在…

Ubuntu添加新硬盘无损重新分区,扩充/home/,可还原

本博客适用的场景: 1.新买了一块硬盘想用它来扩充/home/或其他目录 2.之前分区有误,将根目录/home/全放在了移动硬盘上,想迁移到机械硬盘上去 3.想扩充硬盘分区,但担心数据受损 正文: 以扩充/home/为例&#xff1…

Ubuntu用户无法登陆ssh出现permission denied,please try again

适用情形: 1.使用ssh远程连接,remote等出现permission denied,please try again。 2.使用final shell等软件登陆时,密码已经正确却一直让重输密码。 3.一个账号可以登陆,另外一个账号不可登陆(多为新账号&#xff0…

【有效】2016/2013/2010 软件的安装解决方法

使用常规的kms软件进行解决 支持2016/2013/2010版本 链接:https://pan.baidu.com/s/1Dr74LmJyLdWQtx00_i3jWg 提取码:o4tw ​​​​​​​ ​​​​​​​ 链接有效麻烦点个赞~

vue无缝滚动插件

&#xff08;记录学习的过程&#xff09; 1.安装npm install --save vue-seamless-scroll 2.main.js中引入 import scroll from vue-seamless-scroll Vue.use(scroll);3.h5部分 <vue-seamless-scroll :data"listData" class"seamless-warp"><u…

vue引echarts地图

安装jquery npm install jquery --save 需要显示地图的页面添加 import $ from jquery; vue.config.js中添加 const webpack require("webpack") <div id"main" style"width: 800px;height:400px;"></div> //容器 mounted(){ …

vue使用swiper实现轮播图

(记录学习的过程) 1.安装插件 npm install vue-awesome-swiper3.1.3 --savenpm install swiper6.3.5 --save 2.main.js中引入 import VueAwesomeSwiper from vue-awesome-swiper import swiper/swiper-bundle.css Vue.use(VueAwesomeSwiper) 3. <swiper :options&qu…

echarts柱状图获取接口数据

&#xff08;记录学习的过程&#xff09; var echarts require(echarts); //固定var myChartone echarts.init(this.$refs.chartone);//定义两个上下箭头的矢量路径var up path://M286.031,265l-16.025,3L300,223l29.994,45-16.041-3-13.961,69Z;var down path://M755.2 64…