【MySQL】使用C++连接数据库
目录
- 前置工作
- 代码
- 常用函数接口
- 整体示例:
前置工作
- 创建数据库并选中
mysql> create database conn;
Query OK, 1 row affected (0.01 sec)mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| conn |
+--------------------+
2 rows in set (0.00 sec)mysql> use conn
Database changed
- 创建表并描述表结构
mysql> create table user( id int primary key auto_increment, name varchar(32) not null, age int not null, telphone varchar(32) unique);
Query OK, 0 rows affected (0.06 sec)mysql> show tables;
+----------------+
| Tables_in_conn |
+----------------+
| user |
+----------------+
1 row in set (0.00 sec)mysql> desc user;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(32) | NO | | NULL | |
| age | int(11) | NO | | NULL | |
| telphone | varchar(32) | YES | UNI | NULL | |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
代码
#include <iostream>
#include <string>
#include <mysql/mysql.h>const std::string host = "127.0.0.1";
const std::string user = "connector";
const std::string password = "123456";
const std::string db = "conn";
const unsigned int port = 3306;int main()
{// std::cout<<"mysql client version: "<<mysql_get_client_info()<<std::endl;MYSQL *my = mysql_init(nullptr);if (nullptr == my){std::cerr << " init MYSQL error" << std::endl;return 1;}if (mysql_real_connect(my, host.c_str(), user.c_str(), password.c_str(), db.c_str(), port, nullptr, 0) == nullptr){std::cerr << " connect MYSQL error" << std::endl;return 2;}mysql_set_character_set(my, "utf8");// std::cout<<"connect success "<<std::endl;// std::string sql="insert into user(name,age,telphone) values('jim',18,'123488899');";std::string sql="update user set name='李四' where id =2;";// std::string sql = "delete from user where id =3; ";//std::string sql = "select * from user";int n = mysql_query(my, sql.c_str());if (n == 0)std::cout << sql << " success " << std::endl;else{std::cerr << "filed :" << sql << std::endl;return 3;}mysql_close(my);return 0;
}
- 增加删除修改均可正常执行,查询较为复杂,整体代码中有案例
- 如果查询则需要把查询数据保存到结果集,通过mysql所提供的函数 得到行和列,遍历得到结果。
常用函数接口
- 初始化mysql并返回句柄(默认传入nullptr即可)
MYSQL *mysql_init(MYSQL *mysql);
如: MYSQL *mfp = mysql_init(nullptr)
- 链接数据库
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned long clientflag);
所需参数分别是 mysql句柄 ,主机ip,sql用户名,sql密码,数据库,端口号,剩余两个填nullptr和0即可
如:
if(mysql_real_connect(my,host.c_str(),user.c_str(),password.c_str(), db.c_str(), port, nullptr, 0) == nullptr)
{std::cerr << " connect MYSQL error" << std::endl;return 2;
}
- 设置字符集编码
mysql_set_character_set(myfd, "utf8");
- 执行sql语句
int mysql_query(MYSQL *mysql, const char *q);
- 获取查询结果并保存到结果集
MYSQL_RES *mysql_store_result(MYSQL *mysql);
如:
//把结果存到结果集中MYSQL_RES *res = mysql_store_result(my);if (nullptr == res){std::cerr << " mysql_store_result error" << std::endl;return 4;}
- 获取结果行数mysql_num_rows
my_ulonglong mysql_num_rows(MYSQL_RES *res);
- 获取结果列数mysql_num_fields
unsigned int mysql_num_fields(MYSQL_RES *res);
- 获取列名mysql_fetch_fields
MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);
如:
my_ulonglong row = mysql_num_rows(res);my_ulonglong col = mysql_num_fields(res);std::cout << "行: " << row << std::endl;std::cout << "列: " << col << std::endl;std::cout<<std::endl;//属性MYSQL_FIELD* fields=mysql_fetch_fields(res);for(int i=0;i<col;++i){std::cout<< fields[i].name<<"\t";}std::cout<<std::endl;
- 获取结果内容mysql_fetch_row
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
如:
//内容for (int i = 0; i < row; ++i){MYSQL_ROW row = mysql_fetch_row(res);for (int j = 0; j < col; ++j){std::cout << row[j] << "\t";}std::cout << "\n";}std::cout<<fields[0].db<<std::endl;std::cout<<fields[0].table<<std::endl;
- 释放结果集
void mysql_free_result(MYSQL_RES *result)
- 关闭mysql连接
void mysql_close(MYSQL *sock);
整体示例:
#include <iostream>
#include <string>
#include <mysql/mysql.h>const std::string host = "127.0.0.1";
const std::string user = "connector";
const std::string password = "123456";
const std::string db = "conn";
const unsigned int port = 3306;int main()
{// std::cout<<"mysql client version: "<<mysql_get_client_info()<<std::endl;MYSQL *my = mysql_init(nullptr);if (nullptr == my){std::cerr << " init MYSQL error" << std::endl;return 1;}if (mysql_real_connect(my, host.c_str(), user.c_str(), password.c_str(), db.c_str(), port, nullptr, 0) == nullptr){std::cerr << " connect MYSQL error" << std::endl;return 2;}mysql_set_character_set(my, "utf8");// std::cout<<"connect success "<<std::endl;// std::string sql="insert into user(name,age,telphone) values('jim',18,'123488899');";// std::string sql="update user set name='李四' where id =2;";// std::string sql = "delete from user where id =3; ";std::string sql = "select * from user";int n = mysql_query(my, sql.c_str());if (n == 0)std::cout << sql << " success " << std::endl;else{std::cerr << "filed :" << sql << std::endl;return 3;}//把结果存到结果集中MYSQL_RES *res = mysql_store_result(my);if (nullptr == res){std::cerr << " mysql_store_result error" << std::endl;return 4;}my_ulonglong row = mysql_num_rows(res);my_ulonglong col = mysql_num_fields(res);std::cout << "行: " << row << std::endl;std::cout << "列: " << col << std::endl;std::cout<<std::endl;//属性MYSQL_FIELD* fields=mysql_fetch_fields(res);for(int i=0;i<col;++i){std::cout<< fields[i].name<<"\t";}std::cout<<std::endl;//内容for (int i = 0; i < row; ++i){MYSQL_ROW row = mysql_fetch_row(res);for (int j = 0; j < col; ++j){std::cout << row[j] << "\t";}std::cout << "\n";}std::cout<<fields[0].db<<std::endl;std::cout<<fields[0].table<<std::endl;mysql_free_result(res);mysql_close(my);return 0;
}
相关文章:
【MySQL】使用C++连接数据库
目录 前置工作代码常用函数接口整体示例: 前置工作 创建数据库并选中 mysql> create database conn; Query OK, 1 row affected (0.01 sec)mysql> show databases; -------------------- | Database | -------------------- | information_schema…...
php代码审计,php漏洞详解
文章目录 1、输入验证和输出显示2、命令注入(Command Injection)3、eval 注入(Eval Injection)4、跨网站脚本攻击(Cross Site Scripting, XSS)5、SQL 注入攻击(SQL injection)6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)7、Session 会话劫持(Session Hijacking…...
uniapp 将标题背景更换背景图片 完美解决(附加源码+实现效果图)
问题描述 今天拿到小程序的设计效果图后,标题部分背景需要加背景图片,以往我做的都是标题背景更换颜色等,加背景图片还是第一次遇到,大家可以先看下我的效果图是否与你遇到的问题一致! 首页标题的背景是个背景图片。 …...
必备工具:Postman Newman 详解
目录 Postman Newman 是什么? Postman Newman 的作用 如何使用 Postman Newman? 第一步:安装 Node.js 第二步:全局安装 Newman 第三步:导出集合或环境变量为 JSON 格式 第四步:使用 Newman 运行测试…...
OpenCV基本操作——算数操作
目录 图像的加法图像的混合 图像的加法 两个图像应该具有相同的大小和类型,或者第二个图像可以是标量值 注意:OpenCV加法和Numpy加法之间存在差异。OpenCV的加法是饱和操作,而Numpy添加的是模运算 import numpy as np import cv2 as cv imp…...
css实现文字首行缩进的效果
<div class"content"><p>站在徐汇滨江西岸智塔45楼,波光粼粼的黄浦江一览无余。近处,是由龙华机场储油罐改造而来的油罐艺术中心和阿里巴巴上海总部办公处。远处,历史悠久的龙华塔挺拔秀丽,总投资逾600亿元…...
Eclipse-配置彩色输出打印
文章目录 前言配置下载查看是否安装 前言 这是一篇古老的文章,那个时候还在用Eclipse ,现在已经换 IDEA 了… 这是一篇 2018 年的文章,我只是将文章从个人比较挪到了CSDN 中 配置 配置完然后下载下面插件即可生成彩色代码。 下载 ANSI …...
easyx图形库基础:1.基本概念的介绍+图形的绘制。
基本概念的介绍图形的绘制 一.基本概念的介绍。1.为什么要使用easyx图形库2.安装easyx图形库。3.语法相关 二.图形绘制1.窗体创建和坐标的概念。1.基本窗体的创建。2.坐标概念3.改变逻辑坐标。 2.设置图形颜色1.设置描边颜色和描边样式。2.设置图形填充颜色和填充样式3.绘制图形…...
zerotier requesting configuration
Q:zerotir无法获取physical ip A:路由器管理页面开启ipv6...
接口mock常用工具
在进行测试时,我们经常需要模拟接口数据,尤其是在前后端分离项目的开发中,在后端未完成开发时,前端拿不到后端的数据,就需要对后端返回的数据进行模拟。 如下一些工具,可以完成接口的mock。 Yapi 首先添…...
13-把矩阵看作是对系统的描述
探索矩阵乘法:更深刻的理解与应用视角 🧩🔍 引言 📖 在我们进一步探讨矩阵乘法之前,让我们从不同的角度来理解什么是矩阵,以及如何将矩阵视为一个系统。我们之前已经介绍了矩阵的基本概念和运算ÿ…...
Linux系统下安装Git软件
环境说明 Linux系统:CentOS 7.9 安装GCC等 JDK版本:jdk-8u202-linux-x64.tar.gz Maven版本:apache-maven-3.8.8-bin.tar.gz 在以上环境下安装Git(git-2.41.0.tar.gz)软件。 查看是否安装Git软件 查看Git版本&#…...
SpringBoot框架
一、SpringBoot概述 1. 简介 springboot是spring家族中的一个全新框架,用来简化spring程序的创建和开发过程。在以往我们通过SpringMVCSpringMybatis框架进行开发的时候,我们需要配置web.xml,spring配置,mybatis配置,…...
Chrome有些网站打不开,但是火狐可以打开
Chrome有些网站打不开,但是火狐可以打开 问题描述火狐成功界面谷歌报错界面局域网设置使用代理服务器访问成功 解决方案参考 问题描述 开了一个tizi,Chrome不能使用,火狐可以。之前装过插件Ghelper白嫖科学上网,那次之后好像浏览…...
Linux网络基础(中)
目录: 再谈“协议” HTTP协议 认识URL: urlnecode和urldecode HTTP协议格式: HTTP的方法: 简易HTTP服务器: 传输层 再谈端口号: 端口号范围划分: netstat: pidof&…...
【C++起飞之路】初级—— auto、范围for循环、宏函数和内联函数
auto、范围for、内联函数、宏函数和nullptr 一、auto — 类型推导的魔法(C 11)1、auto 是什么?2、工作原理3、优势4、限制和注意事项 二、范围for (C11)1、基本语法2、优势3、工作原理4、注意事项5、C11: 范围 for 循环的扩展: 三…...
开发工具Eclipse的使用之导入项目(import)
🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Eclipse使用的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.导读 二.详细操作步骤 1.右击项…...
decimal类型在MySQL中的正确使用 (长度和小数点)
1. MySQL(decimal) 对应 Java(BigDecimal) 2. decimal(16,2) MySQL中类型的设置, 长度16, 保留2位小数 3. 如果长度小于14, 则会出现没小数位的情况...
Mongodb 安装
一、win10安装 服务端下载地址:Download MongoDB Community Server | MongoDB shell 工具下载地址:MongoDB Shell Download | MongoDB 服务端安装时选择custom,否则安装文件没有bin目录。 将安装后的文件中的bin目录加到环境变量。 设置…...
Java技术整理(5)—— Spring篇
Spring是一个全面的全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 1、Spring的核心组件 (1)数据层: JDBC、ORM、OXM、JMS、Transations (2&#x…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
