C++实现对MySQL数据库的连接,以及增删改查
安装好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 ;
}
C++实现对MySQL数据库的连接,以及增删改查的更多相关文章
- mysql数据库的连接以及增删改查Java代码实现(转载)
每天叫醒自己的不是闹钟,而是梦想 数据库: create table t1(id int primary key not null auto_increment,name varchar(32),pa ...
- 使用JDBC分别利用Statement和PreparedStatement来对MySQL数据库进行简单的增删改查以及SQL注入的原理
一.MySQL数据库的下载及安装 https://www.mysql.com/ 点击DOWNLOADS,拉到页面底部,找到MySQL Community(GPL)Downloads,点击 选择下图中的 ...
- MySQL数据库之表的增删改查
目录 MySQL数据库之表的增删改查 1 引言 2 创建表 3 删除表 4 修改表 5 查看表 6 复制表 MySQL数据库之表的增删改查 1 引言 1.MySQL数据库中,数据库database就是 ...
- 在python中连接mysql数据库,并进行增删改查
数据库在开发过程中是最常见的,基本上在服务端的编程过程中都会使用到,mysql是较常见的一种数据库,这里介绍python如果连接到数据库中,并对数据库进行增删改查. 安装mysql的python扩展 ...
- python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删改查操作
1.通过 pip 安装 pymysql 进入 cmd 输入 pip install pymysql 回车等待安装完成: 安装完成后出现如图相关信息,表示安装成功. 2.测试连接 import ...
- Java连接MySQL数据库,并进行增删改查
1.具体的代码实现 import java.sql.*; public class DatabaseService { /** * Create Connection * * @param dbtyp ...
- Mysql数据库和表的增删改查以及数据备份&恢复
数据库 查看所有数据库 show databases; 使用数据库 use 数据库名; 查看当前使用的数据库 select database(); 创建数据库 create database 数据库名 ...
- Python操作MySQL数据库完成简易的增删改查功能
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶效果展示 三丶数据准备 四丶代码实现 五丶完整代码 一丶项目介绍 1.叙述 博主闲暇之余花了10个小时写的 ...
- MySQL数据库 | 数据表的增删改查
MySQL数据的增删改查(crud) 本文结构 一.增加 create 二.修改 update 三.查询 retrieve(简单查询,下篇详细展开) 四.删除 delete 首先,创建简单的class ...
- 关于利用PHP访问MySql数据库的逻辑操作以及增删改查实例操作
PHP访问MySql数据库 <?php //造连接对象$db = new MySQLi("localhost","root","",& ...
随机推荐
- 三、统一威胁管理(UTM)
简介 统一威胁管理(Unified Threat Management),简称UTM. 2004年9月,IDC首度提出“统一威胁管理”的概念,即将防病毒.入侵检测和防火墙安全设备划归统一威胁管理(Un ...
- WPF:MVVM模式下ViewModel调用View
两种基本方法: 消息通知和参数传递 一.消息通知 利用View里的IsEnable属性 原理是这样的: 1.UI中的IsEnabled绑定VM中的属性 2.UI的后台代码中,注册IsEnableCha ...
- 使用 NuGet 包管理器在 Visual Studio 中安装和管理包
https://docs.microsoft.com/zh-cn/nuget/consume-packages/install-use-packages-visual-studio 通过 Window ...
- 如何查看当前工程,已经安装的nuget包?
本文链接:https://blog.csdn.net/Microsoft_Mao/article/details/101161872如果想知道,当前解决方案(solution)里都安装了什么包,这里可 ...
- 开发笔记—钉钉服务商应用isv开发,从应用配置,到获取客户企业通讯录
以第三方企业微应用为例 在第三方企业微应用应用时,比较底层的需求,就是应用需要获取客户企业的通讯录,即部门/员工的数据.本人整理以下几个关键数据,供大家开发参考. 新建第三方微应用时,能拿到这些初始数 ...
- angular 读写电脑本地文件
angular 读写本地电脑文件 angular将数据写进到电脑文件 在前端写一个按钮,然后点击按钮的时候在本地电脑保存一个text文件. 这时候我们需要用到一个angular的插件,叫做" ...
- (转)java内存分配分析/栈内存、堆内存
转自(http://blog.csdn.net/qh_java/article/details/9084091) java内存分配分析/栈内存.堆内存 java内存分配分析 本文将由浅入深详细介绍Ja ...
- 杭电oj初体验之 Code
PLA算法: https://blog.csdn.net/red_stone1/article/details/70866527 The problem: Analysis: 题目链接可见:https ...
- Win10 系统运行VsCode出现白屏的问题(亲测有效)
Win10 系统运行VsCode出现白屏的问题(亲测有效) 新买的本本,昨天VScode运行还正常,今天打开一直白屏,什么都没有,只有几个小格格,也不是卡死的那种,可以轻松关闭, 刚开始以为版本问题, ...
- SSI注入漏洞
简介 SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思.从技术角度上说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针.SSI具有强大的功能,只 ...