安装好MySQL,建好数据表的前提下。

如果只是想简单实现添加数据或者其他一个操作数据,可以参考另一篇博客。
https://www.cnblogs.com/ming-4/p/11544514.html

先定义一个数据库管理的cpp文件和头文件。

MySQLManager.h 文件:

/*MySQLManager.h 文件:
文件名: MySQLManager.h
内 容: MySQL连接数据库管理类
创建日期: 2016年10月18日
创建人: AceTan
*/ #pragma once // 网络通信头文件
#include <WinSock.h> // 引入mysql头文件(比较好的做法是把文件夹拷到工程目录,也可以在vc目录里面设置)
#include "include/mysql.h" #include <Windows.h> // 包含附加依赖项,也可以在工程--属性里面设置
#pragma comment(lib, "wsock32.lib")
#pragma comment(lib, "libmysql.lib") // 连接数据库的一些必要信息
struct ConnectionInfo
{
const char* host; // 主机地址
const char* user; // 用户名
const char* password; // 密码
const char* database; // 数据库名
unsigned int port; // 端口号
const char* unix_socket; // unix连接标识
unsigned long clientflag; // 客户端连接标志 // 构造函数,设置一些默认值
ConnectionInfo() :
host("127.0.0.1"),
port(),
unix_socket(NULL),
clientflag()
{ }
}; class MySQLManager
{
public: // 连接数据库
bool Init(ConnectionInfo& info); // 释放连接
bool FreeConnect(); // 增加数据
// bool InsertData(const char* sql); // 删除数据
// bool DeleteData(const char* sql); // 更新数据
// bool UpdateData(const char* sql); // 执行sql语句, 包括增加、删除、更新数据
bool ExecuteSql(const char* sql); // 查询数据
MYSQL_RES* QueryData(const char* sql); // 打印结果集
void PrintQueryRes(); private:
MYSQL m_mysql; // mysql连接
MYSQL_RES* m_res; // 查询结果集 };

MySQLManager.cpp 文件:

#include <iostream>
#include <stdio.h>
using namespace std; // 连接数据库
bool MySQLManager::Init(ConnectionInfo& info)
{
// 初始化mysql,连接mysql,数据库
mysql_init(&m_mysql); // 连接失败
if (!(mysql_real_connect(&m_mysql, info.host, info.user, info.password, info.database, info.port, info.unix_socket, info.clientflag)))
{
return false;
} return true;
} // 释放连接
bool MySQLManager::FreeConnect()
{
//释放资源
mysql_free_result(m_res);
mysql_close(&m_mysql); return false;
} // 执行sql语句, 包括增加、删除、更新数据
bool MySQLManager::ExecuteSql(const char * sql)
{
if (mysql_query(&m_mysql, sql))
{
// 打错误log,这里直接显示到控制台
cerr << "执行sql语句失败,错误信息为: " << mysql_error(&m_mysql) << endl;
return false;
}
else
{
cout << "执行sql语句成功!" << endl;
} return true;
} // 查询数据
MYSQL_RES* MySQLManager::QueryData(const char* sql)
{
if (mysql_query(&m_mysql, sql))
{
// 打错误log,这里直接显示到控制台
cerr << "查询语句执行失败,错误信息为: " << mysql_error(&m_mysql) << endl;
return nullptr;
}
else
{
cout << "查询语句执行成功!" << endl;
} // 存储查询结果
m_res = mysql_store_result(&m_mysql); return m_res;
} // 遍历结果集
void MySQLManager::PrintQueryRes()
{
if (nullptr == m_res || NULL == m_res)
{
return;
} // 获取行数
// unsigned int rows = mysql_affected_rows(m_mysql); // 字段列数组
MYSQL_FIELD* field = nullptr;
//存字段名二维数组
char fieldName[][]; // 获取字段名
for (int i = ; field = mysql_fetch_field(m_res); ++i)
{
strcpy_s(fieldName[i], field->name);
} // 获取列数
int columns = mysql_num_fields(m_res);
for (int i = ; i < columns; ++i)
{
// 使用C语言的printf格式化更方便一点
printf("%10s\t", fieldName[i]);
}
cout << endl; MYSQL_ROW row;
while (row = mysql_fetch_row(m_res))
{
for (int i = ; i < columns; ++i)
{
printf("%10s\t", row[i]);
} cout << endl;
} }

main函数:

#include <iostream>
#include "MySQLManager.h" using namespace std; int main()
{
MySQLManager mysql;
ConnectionInfo info;
// 填充ConnectionInfo这个结构体,项目中一般从配置文件这读取
info.user = "root";
info.password = "your_password";
info.host = "localhost";
info.port = ;
info.database = "test";
info.unix_socket = NULL;
info.clientflag = ; // mysql连接
if (!mysql.Init(info))
{
return -;
} // 增加数据测试
const char* sql1 = "insert into user values (NULL, 'Ada', 'password')";
mysql.ExecuteSql(sql1); // 删除数据测试
const char* sql2 = "delete from user where name = 'AceTan'";
mysql.ExecuteSql(sql2); // 修改数据测试
const char* sql3 = "update user set password='update_password' where name = 'Ada'";
mysql.ExecuteSql(sql3); // 查询数据测试
const char* sql4 = "select * from user";
mysql.QueryData(sql4);
mysql.PrintQueryRes(); // 释放mysql资源
mysql.FreeConnect(); return ;
}

最新文章

  1. SharePoint 2010/2013/2016内容数据库与网站集的关系
  2. char varchar nchar nvarcharar到底有多大区别
  3. mysql 的max_connections和max_user_connections 的区别
  4. Oracle 使用SqlPlus管理
  5. Android 增量更新(BSDiff / bspatch)
  6. Javac 手动编译时,出现乱码或编码格式问题
  7. SU Demos-06Selecting Traces
  8. Appium Java Windows环境搭建篇
  9. ECMAScript 6教程 (二) 对象和函数
  10. 灵魂有香气的女子IOS版本APP,近期将考虑开放源代码
  11. (转)微软开放了.NET 4.5.1的源代码
  12. MinGW中的头文件路径级环境变量设置
  13. JAVA实例变量的初始化过程
  14. grid表格选择模式
  15. 7个提升Python程序性能的好习惯
  16. js中将字符串作为函数名来调用的方法
  17. IDEA高效运用技巧
  18. js生成指定范围的随机数
  19. C# WebService创建、发布、调用的简单例子
  20. 五步让你玩转CocoaPods

热门文章

  1. WPF学习笔记五之MVVM
  2. ubuntu安装搜狗输入
  3. c数据结构 绪论
  4. 看端口是否被占用的python脚本
  5. Linux - 查看静态硬件信息
  6. testng的注解
  7. night of 2019.8.14
  8. 每天进步一点点------Xilinx FPGA开发工具 EDK SDK术语
  9. CSS之浮动布局及相关问题
  10. linux服务器上部署springboot项目,并让他持续运行到后台