C++怎么连接mysql数据库并读取数据
本文小编为大家详细介绍“C++怎么连接mysql数据库并读取数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++怎么连接mysql数据库并读取数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
1、需要包含mysql API的头文件
如果需要连接都本地的mysql数据库,前提是本地要已经安装了mysql数据库。这里要用到一些mysql的API,比如连接数据库、执行查询语句等操作,这些接口都包含在下面的头文件中:
#include<mysql/mysql.h>
2、连接mysql具体步骤
这里大致可以分为四个主要步骤:
1、连接mysql数据库
1、连接mysql数据库
显然,如果要获取mysql数据中数据,首先要连接数据库,获得一个可以操作数据库的句柄。
2、执行查询语句,即选择我们需要的数据
就是执行查询语句,查询我们需要的数据。查询到的数据会保存在一个叫做结果集的地方。
3、从结果集中获取需要的数据
利用相关的接口函数,从结果集中获取每一行各地字段的数据。
4、从结果集中提取每行各个字段的信息
5、释放资源,包括结果集合mysql句柄
下面具体讲解一下几个必须用到的关键接口函数。
2.1 mysql_real_connect
该函数用于连接运行在主机上的数据库引擎,如果连接成功,将获得可以操作数据库的句柄,否则返回NULL指针。
MYSQL*mysql_real_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd,constchar*db,unsignedintport,constchar*unix_socket,unsignedlongclient_flag)
该函数参数众多,各个参数含义如下:
mysql:是已有MYSQL结构的地址。调用mysql_real_connect()之前,必须调用mysql_init()来初始化MYSQL结构。
host:是主机名或IP地址。如果“host”是NULL或字符串"localhost",连接将被视为与本地主机的连接。
user:用户的MySQL登录ID。如果“user”是NULL或空字符串"",用户将被视为当前用户。
passwd:用户的密码。如果“passwd”是NULL,仅会对该用户的(拥有1个空密码字段的)用户表中的条目进行匹配检查。
db:是数据库名称。如果db为NULL,连接会将默认的数据库设为该值。
port:如果“port”不是0,其值将用作TCP/IP连接的端口号。注意,“host”参数决定了连接的类型。
unix_socket:如果unix_socket不是NULL,该字符串描述了应使用的套接字或命名管道。注意,“host”参数决定了连接的类型。
client_flag:值通常为0
2.2 mysql_query 或 mysql_real_query
该函数用于向数据库发送一条查询命令,并让数据库执行。返回0表示查询成功,否则失败。
intmysql_query(MYSQL*mysql,constchar*stmt_str)
或者:
intmysql_real_query(MYSQL*mysql,constchar*stmt_str,unsignedlonglength)
mysql:为通过获取到的mysql操作句柄。
stmt_str:表示需要执行的查询语句。
length:为查询语句的长度。
上面两个函数的区别在于:
mysql_query() 不能用于执行带二进制的语句,也就是参数stmt_str中不能有二进制数据,会被解析成字符。
mysql_query查速度稍慢一些,因为需要计算查询语句的长度
2.3 获取结果集mysql_store_result
该函数返回查询成功的结果集,如果失败则返回NULL
MYSQL_RES*mysql_store_result(MYSQL*mysql)
2.4 显示结果集中每行数据
该函数的入参为步骤(3)中返回的结果集。每次调用时,返回结果集中的下一行数据,并将指针向后移动一行,如果没有下一行数据,返回NULL。
可以用mysql_num_fields(result)计算结果集中行的数量,mysql_num_fields(result)可以计算列的数量。假如row为某一行的信息,那么row[0]、row[1]。。。依次该行的各个字段信息。
MYSQL_ROWmysql_fetch_row(MYSQL_RES*result)
3、一个编程示例
这里的环境为linux系统。用到本地数据库名称为:CrashCourse,查询的表名称为products,下面的编程实例中,演示了查询products表中价钱大于30的所有项目。products表格完整内容如下:
#include<stdio.h>#include<mysql/mysql.h>#include<iostream>usingnamespacestd;MYSQLmysql;//mysql连接MYSQL_RES*res;//结果集结构体MYSQL_ROWrow;//char**二维数组,存放记录intmain(){//步骤1:初始化并连接数据库,获得操作数据库的句柄mysql_init(&mysql);//初始化if(!(mysql_real_connect(&mysql,"localhost","root","root","CrashCourse",0,NULL,0))){cout<<"Couldn'tconnecttoDatabase!\n:"<<mysql_error(&mysql);exit(1);}else{printf("Databaseconnectionsucceeded.Connected...\n\n");}//步骤2:执行查询语句,查询需要的数据(设置编码格式也相当于执行特殊的查询语句)mysql_query(&mysql,"setnamesgbk");//设置编码格式mysql_query(&mysql,"SELECT*fromproductswhereprod_price>30");//步骤3:获取结果集res=mysql_store_result(&mysql);//步骤4:显示结果集中每行数据intcols=mysql_num_fields(res);//计算结果集中,列的个数while(row=mysql_fetch_row(res)){for(inti=0;i<cols;++i){cout<<row[i]<<"\t";}cout<<endl;}//步骤5:释放结果集合mysql句柄mysql_free_result(res);mysql_close(&mysql);return0;}
查询结果如下:
读到这里,这篇“C++怎么连接mysql数据库并读取数据”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注主机评测网行业资讯频道。
上一篇:windows?DockerDeskTop最新款4.18.0怎么安装
下一篇:C#中怎么使用CAS实现无锁算法