admin管理员组文章数量:1794759
C++中使用MySQL数据库
文章目录
- 1. 安装MySQL
- 2. 拷贝include和lib文件夹到C++工程中
- 3. 正式使用数据库
- 3.1 范例
- 3.2 类介绍
- 3.2.1 MYSQL句柄类
- 3.2.2 MYSQL_RES查询结果集
- 3.2.3 MYSQL_ROW获取单行内容
- 3.3 重要接口函数介绍
- 3.3.1 连接数据库
- 3.3.2 查询
- 3.3.3 获取查询结果集
- 3.3.4 读取结果集数据
- 4. 结果演示
- 参考链接
这一步就不多说了,网上教程很多,自行查阅即可。
2. 拷贝include和lib文件夹到C++工程中打开MySQL的安装目录,拷贝include和lib目录至C++工程,然后在项目中添加包含路径和使用到的附加依赖项。
3. 正式使用数据库 3.1 范例话不多说,直接上源码:
#include <iostream> #include "mysql.h" using namespace std; int main(int argc, char *argv[]) { ///< 创建数据库句柄 MYSQL mysql; //MYSQL *mysql = mysql_init(nullptr); ///< 初始化句柄 mysql_init(&mysql); ///< 连接的数据库(句柄、主机名、用户名、密码、数据库名、端口号、socket指针、标记) if (!mysql_real_connect(&mysql, "localhost", "root", "root", "test_mysql", 3306, nullptr, 0)) { cout << "数据库连接失败" << mysql_errno(&mysql) << endl; return -1; } cout << "数据库连接成功" << endl << endl; ///< 创建数据库回应结构体 MYSQL_RES *res = nullptr; ///< 创建存放结果的结构体 MYSQL_ROW row; char sql[1024]{ 0 }; sprintf_s(sql, 1024, "select * from user_info"); ///< 调用查询接口 if (mysql_real_query(&mysql, sql, (unsigned int)strlen(sql))) { cout << "查询失败" << ": " << mysql_errno(&mysql) << endl; } else { cout << "查询成功" << endl << endl; ///< 装载结果集 res = mysql_store_result(&mysql); if (nullptr == res) { cout << "装载数据失败" << ": " << mysql_errno(&mysql) << endl; } else { ///< 取出结果集中内容 while (row = mysql_fetch_row(res)) { cout << row[0] << " " << row[1] << endl; } } } ///< 释放结果集 mysql_free_result(res); ///< 关闭数据库连接 mysql_close(&mysql); system("pause"); return 0; }因为使用到的函数接口不多,整体过程比较简单,下面介绍使用到的结构体和函数。
3.2 类介绍 3.2.1 MYSQL句柄类 MYSQL mysql;MYSQL是数据库句柄类,所有数据库相关的操作都会使用到这个句柄。
3.2.2 MYSQL_RES查询结果集 MYSQL_RES *res = nullptr;MYSQL_RES是数据库的查询结果集类,用于存放调用查询函数之后的结果集。
3.2.3 MYSQL_ROW获取单行内容 MYSQL_ROW row;实际来说,MYSQL_ROW不是一个类,它本质上是一个指向字符串数组的指针,也就是一个二级指针char**,不过为了方便起见,我就把MYSQL_ROW也放在“类介绍”的范畴之下了。 这个东西的作用是从MYSQL_RES结果集中获得某一行的数据。
3.3 重要接口函数介绍 3.3.1 连接数据库 MYSQL * STDCALL mysql_real_connect( MYSQL *mysql, ///< 数据库句柄 const char *host, ///< 主机名 const char *user, ///< 用户名 const char *passwd,///< 密码 const char *db, ///< 数据库名 unsigned int port, ///< 端口号(MySQL为3306) const char *unix_socket,///< unix_socket–unix连接方式,为NULL时表示不使用socket或管道机制 unsigned long clientflag ///< clientflag–Mysql运行为ODBC数据库的标记,一般取0 );连接 失败返回0。
3.3.2 查询 int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);这里的查询实际上是广义上的查询操作,名义上是query,实际上可以执行增删改查所有的操作,取决于传入的sql语句的内容。 如:sql = “insert into user_info values(‘user4’, ‘888888’)”;代表的就是执行插入数据的操作。
执行成功返回0。
3.3.3 获取查询结果集 MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql); MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);获取的方式有两种。 第一种,调用mysql_store_result函数将从Mysql服务器查询的所有数据都存储到客户端,然后读取; 第二种,调用mysql_use_result初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据,这种方式较之第一种速度更快且所需内存更少,但它会绑定服务器,阻止其他线程更新任何表,而且必须重复执行mysql_fetch_row读取数据,直至返回NULL,否则未读取的行会在下一次查询时作为结果的一部分返回。 故经常我们使用mysql_store_result。
3.3.4 读取结果集数据 MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);其中参数为MYSQL_RES类型的结果集。
4. 结果演示 参考链接参考链接1 参考链接2 MySQL错误码
版权声明:本文标题:C++中使用MySQL数据库 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686767819a100166.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论