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","",& ...
随机推荐
- C++ 中字符串查找、字符串截取、字符串替换
参照:C++基础-string截取.替换.查找子串函数 1.字符串查找 s.find(s1) //查找s中第一次出现s1的位置,并返回(包括0) s.rfind(s1) //查找s中最后次出现s1的位 ...
- csrf跨站点请求伪造
什么是csrf(跨站请求伪造) 伪造请求的定义有很多种,我将不是用户本意发出的请求统称为伪造请求(在用户不知情的情况下执行某些操作)xss的通过用户对浏览器的信任造成的,csrf是通过服务器对浏览器的 ...
- elasticSearch 起步(CentOS7 success)
安装和启动 这里使用docker进行安装的 docker pull elasticsearch 然后使用 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx2 ...
- e.printStackTrace()打印在哪里以及如何e.printStackTrace()的内容打印在日志中
1.e.printStackTrace()打印在哪里 在catch中的e.printStackTrace()将打印到控制台 2.e.printStackTrace()打印的内容是什么 如下代码: im ...
- Scale9Sprite 的 setCapInsets中需要注意的地方
在设置 setCapInsets()方法的y参数的时候,不直接取cocosStudio中的y,而是取Scale9Sprite.height - cocosStudio中的y.
- php设计模式之多态实例代码
<?php header("Content-type:text/html;charset=utf-8"); /** * 虎 */ abstract class Tiger { ...
- 题解【Codeforces438D】The Child and Sequence
题目描述 At the children's day, the child came to Picks's house, and messed his house up. Picks was angr ...
- 使用python实现冒泡、选择、插入基础排序
冒泡排序 依次比较相邻两元素,若前一元素大于后一元素则交换之,直至最后一个元素即为最大: 然后重新从首元素开始重复同样的操作,直至倒数第二个元素即为次大元素: 依次类推.如同水中的气泡,依次将最大或最 ...
- C++的四种转换(const_cast、static_cast、dynamic_cast、reinterpreter_cast)
static_cast 相当于C语言中的强制转换:(类型)表达式或类型(表达式),用于各种隐式转换 非const转const.void*转指针.int和char相互转换 用于基类和子类之间的指针和引用 ...
- C#堆和栈的入门理解
声明:以下内容从网络整理,非原创,适当待入个人理解. 解释1.栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义:堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定 ...