MySQL——连接
一.引入库
我们已经分享了很多通过命令行方式去操作数据库,那么数据库该怎么通过语言去访问呢?
这里分享怎么通过C/C++来连接数据库。
首先需要到MySQL官网,下载专门用于C/C++连接数据库的库,但是一般不需要再去官网下载。
因为在初始MySQL安装时,除了安装MySQL服务之外,其对应的库都会被一并安装。
我们可以在 "/usr/include/mysql" 路径下查看已经引入的MySQL各种头文件,至于库的位置,不同的Linux系统版本可能库的位置会不同,因此建议通过find指令去全局查询库的位置:
find / -name libmysqlclient.so;
可以通过一个简易代码来查看库是否引入成功。
#include <iostream>
#include <mysql/mysql.h>int main()
{std::cout << "version: " << mysql_get_client_info() << std::endl;return 0;
}
该代码的作用是显示当前MySQL的版本,在编译时需要通过路径来连接对应的库:
g++ -o test test.cc -L路径 -lmysqlclient;
二.MySQL接口
初始化MySQL
MYSQL *mysql_init(MYSQL *mysql);
用于创建一个MySQL对象,以供后续连接使用,创建失败对象为nullptr。
连接MySQL
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对象、连接的主机、用户名、密码、数据库、端口号、套接字和标志位。
通过该函数,建立起MySQL与语言的连接,连接失败返回nullptr。
设置字符集
mysql_set_character_set(myfd, "utf8");
MySQL与语言建立后,默认字符集是latin1,不能识别中文,因此需要设置字符集为utf8。
下发MySQL命令
int mysql_query(MYSQL *mysql, const char *q);
通过该函数,向MySQL发送命令,命令语句通过q参数传递。
指令执行成功,返回0,执行失败返回-1。
然而,当我们通过语言方式执行MySQL的查询指令 select 时,得到的数据并不能直接显示,但是如果查询语句执行成功,我们就可以通过如下函数获取到查询结果:
MYSQL_RES *mysql_store_result(MYSQL *mysql);
该函数会返回 MYSQL_RES 类型的变量,可以理解为一个类型为存放字符串的二维数组,如果获取失败则返回nullptr变量,该类型变量会通过malloc开辟空间,因此使用之后必须进行空间释放:
void mysql_free_result(MYSQL_RES* result);
获取结果的行数
my_ulonglong mysql_num_rows(MYSQL_RES *res);
获取结果的列数
unsigned int mysql_num_fields(MYSQL_RES *res);
获取列的各种属性
MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);
在 MYSQL_FIELD 结构体类型中包含列的各种属性,可通过该结构体得到列的名称。
获取结果内容
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
该函数可以获取到结果集中单行的数据,并且调用之后会自动指向下一行。
通过上述函数,就可以使用循环方法来打印出 select 的结果。
关闭MySQL
void mysql_close(MYSQL *sock);
相关文章:
MySQL——连接
一.引入库 我们已经分享了很多通过命令行方式去操作数据库,那么数据库该怎么通过语言去访问呢? 这里分享怎么通过C/C来连接数据库。 首先需要到MySQL官网,下载专门用于C/C连接数据库的库,但是一般不需要再去官网下载。 因为在…...
前端微服务实战:大型应用的拆分与治理
"这个系统已经无法维护了..."周五的架构评审会上,我盯着屏幕上那张错综复杂的依赖关系图发愁。作为一个运行了三年的企业级中后台系统,代码量已经超过 50 万行,构建时间长达 40 分钟,任何修改都可能引发连锁反应。 更让人头疼的是,随着业务的快速发展,不同业务线之间…...
Linux shell的七大功能 --- history
1.直接输入“history” 这个命令可以显示出曾经使用过的命令(最近时间的500条) history 2.“history”命令也可以搭配其他命令一起使用。 例:history | grep "vim",找出所有包含“vim”的记录; 也可以搭配…...
C++ webrtc开发(非原生开发,linux上使用libdatachannel库)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、libdatachannel库的下载和build二、开始使用 1.2.引入库3.开始使用 总结 前言 使用c开发webrtc在互联网上留下的资料甚少,经过我一段时间的探…...
C语言刷题
1. 题目描述 根据给出的三角形3条边a:b.c(a.b,c<100.000),计算三角形的周长和面积。 输入描述: 一行,三角形3条边(能构成三角形),中间用一个空格隔开. 输出描述: 一行,三角形周长和面积保留两位小数,中问用一个空…...
LabVIEW实现RFID通信
目录 1、RFID通信原理 2、硬件环境部署 3、程序架构 4、前面板设计 5、程序框图设计 6、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联网系…...
Linux 网络流量控制 - 实现概述
摘要 Linux 提供了一整套丰富的流量控制(traffic control)功能。本文档概述了相应的内核代码设计,描述了其结构,并通过描述一种新的排队策略来说明新元素的添加。 1 引言 最近的Linux内核提供了多种流量控制功能。Alexey Kuznetsov(kuznet…...
分布式 令牌桶算法 总结
前言 相关系列 《分布式 & 目录》《分布式 & 令牌桶算法 & 总结》《分布式 & 令牌桶算法 & 问题》 参考文献 《【算法】令牌桶算法》 概述 简介 TBA Token Bucket Algorithm 令牌桶算法是一种流行于网络通信领域的流量控制/频率限制算法。令牌…...
FFMPEG视频转图片
用FFMPEG视频转图片,并且for循环 import os import subprocess# 输入文件夹和输出文件夹路径 input_folder r"I:\xxx" output_base_folder r"D:\xxx\YOLO\data\video" output_subfolder_name "20240609"# 创建输出子文件夹 output…...
docker入门实践---虚拟机环境配置
文章目录 1.检查内核版本2.确定centos7可以上网3.关闭防火墙4.关闭防火墙5.更换阿里云6.安装gcc7.设置镜像仓库(阿里云)8更新软件包9.安装docket-ce10.启动docker11.普通用户权限设置 1.检查内核版本 2.确定centos7可以上网 3.关闭防火墙 下面的这个表示…...
java要防止重复序列化的问题JSON.toJSONString转义问题
要防止重复序列化的问题JSON.toJSONString(entity) 20241213 10:29 背景: 我在设计业务实现echart图标渲染,业务接口实时性查询耗时很长,为了提高系统可用性和用户体验,采用中间表的方案——即在中间表中存储大JSON。 但是在自测…...
TS的类型守卫、类型约束实践
类型守卫 // 基础类型判断 const arr [30, 50] console.log(typeof arr) // object const set new Set(arr) console.log(typeof set) // object const map new Map() console.log(typeof map) // objectclass Customer {constructor() {}buy(method:string) {console.log(…...
文件转曲,限制PDF文件编辑的最佳方案!
随着数字化进程的推进,PDF文件凭借其多样化的功能和优越的兼容性已经被广泛使用,成为了现代文档交流和存储的重要工具,满足了不同用户和行业的需求。 虽然PDF格式文件的功能很多,常见的比如阅读、编辑、加密、转换、还可用于印刷…...
MySQL系列之数据授权(安全)
导览 前言Q:如何对MySQL数据库进行授权管理一、MySQL的“特权”1. 权限级别2. 权限清单 二、授权操作1. 查看权限2. 分配权限3. 回收权限 结语精彩回放 前言 看过博主上一篇的盆友,可以Get到一个知识点:数据授权(eg:g…...
用 Python 实现经典的 2048 游戏:一步步带你打造属于你的小游戏!
用 Python 实现经典的 2048 游戏:一步步带你打造属于你的小游戏!(结尾附完整代码) 简介 2048 是一个简单而又令人上瘾的数字拼图游戏。玩家通过滑动方块使相同数字的方块合并,目标是创造出数字 2048!在这篇…...
Vue vs. React:两大前端框架的深度对比与分析(一)
前言 在当今快速发展的前端领域中,Vue和React作为两个备受瞩目的前端框架,已经成为许多开发者的首选。这两个框架凭借其出色的设计和强大的功能,在构建现代化、高效性能的Web应用方面扮演着重要角色。 Vue和React都以其独特的特点吸引了众多开…...
React 进阶深入理解核心概念与高阶实践
在上一节中,我们学习了 React 的基础知识,包括组件、状态管理和基本操作。接下来,我们将进一步探索 React 的高级功能和实战技巧,例如 组件间通信、高阶组件、Context API、React Router 等。这些内容将帮助你构建更复杂、功能更丰…...
Linux shell的七大功能 ---自动补齐、管道机制、别名
1、自动补齐---TAB 输入命令的前几个字符,按下tab键,会自动补齐完整的字符,若有多个命令、文件或目录的前几个字符相同,按下tab将会全部列举出来 2、管道机制---| 例如:ls -- help |more 将有关ls的帮助内容传递给“|…...
XML 在线格式化 - 加菲工具
XML 在线格式化 打开网站 加菲工具 选择“XML 在线格式化” 输入XML,点击左上角的“格式化”按钮 得到格式化后的结果...
java_多态的应用
多态数组 应用实例:现有一个继承结构如下:要求创建 1 个 Person 对象、2 个 Student 对象和 2 个 Teacher 对象, 统一放在数组中,并调用每个对象 代码 Person类 package com.hspedu.poly_.polyarr_;import javax.swing.*;/*** author:寰愬悏瓒…...
WanAndroid收藏系统设计:从UI交互到数据持久化的完整方案
WanAndroid收藏系统设计:从UI交互到数据持久化的完整方案 【免费下载链接】WanAndroid 🔥项目采用 Kotlin 语言,基于 MVP RxJava Retrofit Glide EventBus 等架构设计,努力打造一款优秀的 [玩Android] 客户端 项目地址: htt…...
Gev入门指南:5分钟快速搭建高性能TCP服务器
Gev入门指南:5分钟快速搭建高性能TCP服务器 【免费下载链接】gev 🚀Gev is a lightweight, fast non-blocking TCP network library / websocket server based on Reactor mode. Support custom protocols to quickly and easily build high-performance…...
如何用嘎嘎降AI处理汉语言文学论文:文学类毕业论文降AI免费完整操作教程
如何用嘎嘎降AI处理汉语言文学论文:文学类毕业论文降AI免费完整操作教程 帮同学处理过汉语言文学论文降AI教程,流程基本是固定的,记录下来供参考。 主推工具:嘎嘎降AI(www.aigcleaner.com),4.…...
OpenSpec+Qoder 规范AI编程助手
OpenSpec 是 Fission AI 团队开源、面向 AI 编程助手的「规范驱动开发」轻量级框架与 CLI 工具,核心是 Spec First, Code Later(先定规范、再写代码),解决 AI 编程需求跑偏、上下文丢失、结果不可控的问题。 现根据下面的官网安装…...
长期使用Taotoken Token Plan套餐对项目研发成本的控制效果
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用Taotoken Token Plan套餐对项目研发成本的控制效果 在项目研发中,大模型API调用成本是预算管理的重要一环。对…...
Google I/O 2026 发布会大招不断,免费用户能体验哪些新功能?
Google I/O 2026 发布会大招频出,免费用户能体验哪些新功能?每年五月,硅谷山景城都会热闹一次。Google I/O 是谷歌一年一度的开发者大会,但这些年它早就不只是给开发者看的了,普通用户、科技媒体、竞争对手,…...
AI原生组织:从「加AI功能」到「长AI基因」,大企业实践与中小团队轻量思路揭秘
AI原生组织:从「加AI功能」到「长AI基因」的本质跃迁与落地路径AI原生组织并非给传统企业贴AI膏药,而是围绕人机协同重新设计业务逻辑、组织架构和激励机制。下面从认知误区切入,结合阿里、华为、传神等企业案例,拆解AI原生组织的…...
区块链前端技术栈介绍
这是一份完整区块链前端的学习路径,基于当前市场需求和技术趋势。 🗺️ 技术路线总览 阶段 1:基础入门 (1-2个月) 阶段 2:核心 Web3 技能 (2-3个月) 阶段 3:高级应用开发 (3-4个月) 阶段 4:架构与优化 (2-…...
智读致用|《谷歌亚马逊如何做产品》6|赢在数据驱动:抓住核心指标,就能让产品“开口说话”
核心问题:产品发布后,怎么判断它到底成没成功?团队争论需求优先级时,凭什么说“这个比那个重要”? 上一篇文章解决了“产品能不能用”,现在要回答更根本的问题:它值不值得继续投入? …...
PPTist:零基础打造专业级在线演示文稿的完整指南
PPTist:零基础打造专业级在线演示文稿的完整指南 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing for the…...
