在 Windows 和 Linux 下使用 C/C++ 连接 MySQL 的详细指南

前言

MySQL 是一种流行的关系型数据库管理系统,广泛应用于各种应用程序中。C/C++ 作为高性能编程语言,常被用于需要与数据库交互的开发中。下面详细讲解如何在 Windows 和 Linux 平台下使用 C/C++ 连接 MySQL 数据库,帮助你快速上手。


准备工作

在开始之前,请确保以下条件已满足:

  1. MySQL 数据库:已安装并运行 MySQL 服务器。

  2. C/C++ 开发环境:Windows 上推荐使用 Visual Studio 或 MinGW,Linux 上推荐使用 gcc/g++。

  3. MySQL C API:这是 MySQL 提供的 C 语言接口,用于连接和操作数据库。

接下来,我们将分平台介绍具体步骤。


Windows 平台

1. 安装 MySQL C API 库

  • 从 MySQL 官方网站 下载 MySQL Connector/C++

  • 安装后,你会得到以下关键文件:

    • libmysql.lib(静态链接库)

    • libmysql.dll(动态链接库)

    • 头文件(如 mysql.h),通常位于安装目录的 include 文件夹中。

2. 配置开发环境

  • 头文件:将 MySQL 的 include 目录添加到项目的包含路径中。

  • 链接库:在项目设置中链接 libmysql.lib。

  • 动态库:将 libmysql.dll 复制到你的可执行文件目录,或添加到系统 PATH 环境变量中。

3. 编写代码

以下是一个简单的 C++ 示例代码,用于连接 MySQL 数据库:

#include <mysql.h>
#include <iostream>int main() {MYSQL* conn = mysql_init(NULL); // 初始化 MySQL 连接对象if (!conn) {std::cerr << "Initialization failed" << std::endl;return 1;}// 连接到 MySQL 数据库if (!mysql_real_connect(conn, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0)) {std::cerr << "Connection error: " << mysql_error(conn) << std::endl;mysql_close(conn);return 1;}std::cout << "Successfully connected to MySQL!" << std::endl;mysql_close(conn); // 关闭连接return 0;
}

4. 编译和运行

  • 如果使用 Visual Studio,在项目属性中配置好包含目录和库目录后,直接构建即可。

  • 如果使用 MinGW,可以用以下命令编译:

g++ -o mysql_test mysql_test.cpp -L"path_to_lib" -lmysql

Linux 平台

1. 安装 MySQL C API 库

  • 在 Linux 上,使用包管理器安装 MySQL 开发包。例如,在 Ubuntu 上运行:

sudo apt-get update
sudo apt-get install libmysqlclient-dev

  • 安装完成后,头文件(mysql.h)通常位于 /usr/include/mysql,库文件位于 /usr/lib。

2. 编写代码

Linux 下的代码与 Windows 类似,以下是一个 C 示例:

#include <mysql/mysql.h>
#include <stdio.h>int main() {MYSQL* conn = mysql_init(NULL); // 初始化 MySQL 连接对象if (!conn) {fprintf(stderr, "Initialization failed\n");return 1;}// 连接到 MySQL 数据库if (!mysql_real_connect(conn, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0)) {fprintf(stderr, "Connection error: %s\n", mysql_error(conn));mysql_close(conn);return 1;}printf("Successfully connected to MySQL!\n");mysql_close(conn); // 关闭连接return 0;
}

3. 编译代码

使用 g++ 或 gcc 编译,并链接 MySQL 库:

g++ -o mysql_test mysql_test.c -lmysqlclient

 运行程序:

./mysql_test

 

注意事项

  • MySQL 服务器状态:确保 MySQL 服务正在运行,可以通过 mysql -u your_username -p 测试连接。

  • 用户名和密码:替换代码中的 your_username、your_password 和 your_database 为实际值。

  • Windows 特定:如果遇到“找不到 DLL”错误,检查 libmysql.dll 是否在可执行文件目录或 PATH 中。

  • Linux 特定:若编译报错“找不到 -lmysqlclient”,确认是否已安装 libmysqlclient-dev。


进阶操作

连接成功后,你可以执行以下操作:

  • 执行 SQL 查询:使用 mysql_query() 或 mysql_real_query()。

  • 获取结果集:使用 mysql_store_result() 和 mysql_fetch_row()。

  • 错误处理:始终检查函数返回值并使用 mysql_error() 获取错误信息。

示例(查询表数据):

if (mysql_query(conn, "SELECT * FROM your_table") == 0) {MYSQL_RES* result = mysql_store_result(conn);MYSQL_ROW row;while ((row = mysql_fetch_row(result))) {printf("%s\n", row[0]); // 输出第一列数据}mysql_free_result(result);
}

通过以上步骤,你可以在 Windows 和 Linux 上使用 C/C++ 成功连接 MySQL 数据库。这只是入门,后续你可以深入学习 SQL 操作、事务处理等高级功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85806.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【人工智能基础】初识神经网络

初识神经网络 本章通过战胜人类围棋世界冠军的AlphaGo案例,介绍神经网络的基本概念,并阐明其与人工智能、机器学习的关系。 1. AlphaGo与围棋:神经网络的实力展示 传统围棋程序:基于固定规则 早期的计算机程序依赖人类专家预先设定的策略(“如果A情况发生,则执行B步骤”…

ffmpeg webm 透明通道视频转成rgba图片

import subprocess def webm_to_bgrapng(webm_video_path,bgra_dir):command [ffmpeg,-vcodec, libvpx-vp9, # 指定输入视频编码为 VP9-i, webm_video_path, # 输入视频路径-pix_fmt, "rgba", # 输出 RGBA 格式&#xff08;保留 Alpha 通道&#xff09;bgra_dir …

SQLite 数据库操作完整指南

SQLite 数据库操作完整指南 全面的 SQLite 数据库操作手册&#xff0c;涵盖从基础操作到高级优化的所有内容 目录 ** SQLite 简介与特点 创建和连接数据库 创建表 数据类型和约束 插入数据 查询数据 更新数据 删除数据 多表查询 视图 索引优化 触发器 事务处理 全文搜索 JSO…

Python Luigi 【工作流管理库】简介

想全面了解DeepSeek的看过来 【包邮】DeepSeek全攻略 人人需要的AI通识课 零基础掌握DeepSeek的实用操作手册指南【限量作者亲笔签名版售完即止】 玩转DeepSeek这本就够了 【自营包邮】DeepSeek实战指南 deepseek从入门到精通实用操作指南现代科技科普读物AI普及知识读物人工智…

微服务中分布式事务:Saga模式、TCC模式与消息队列

Saga模式 Saga模式是一种基于补偿的事务管理机制&#xff0c;它将一个长事务分解为多个本地事务&#xff0c;每个本地事务都有一个对应的补偿事务。当某个本地事务执行失败时&#xff0c;Saga模式会依次调用前面已成功执行的本地事务的补偿事务&#xff0c;以实现事务的回滚。…

唯美复古风景人像摄影Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 “唯美复古风景人像摄影 Lr 调色”&#xff0c;是将人物置于如画的风景之中进行拍摄&#xff0c;再运用 Lightroom&#xff08;Lr&#xff09;软件&#xff0c;通过专业的调色操作&#xff0c;为照片赋予复古的艺术气息&#xff0c;让画面兼具唯美的视觉享受与怀旧的情…

华为云Flexus+DeepSeek征文|体验华为云ModelArts快速搭建Dify-LLM应用开发平台并创建b站视频总结大模型

华为云FlexusDeepSeek征文&#xff5c;体验华为云ModelArts快速搭建Dify-LLM应用开发平台并创建b站视频总结大模型 什么是华为云ModelArts 华为云ModelArts ModelArts是华为云提供的全流程AI开发平台&#xff0c;覆盖从数据准备到模型部署的全生命周期管理&#xff0c;帮助企…

线程池异步处理

List<CompletableFuture<Void>> futures new ArrayList<>();// 提交10个异步任务 for (int i 0; i < 10; i) {CompletableFuture<Void> future CompletableFuture.runAsync(() -> {insertData(batchData); // 每个任务插入一批数据}, pool).t…

STM32HAL库 -- 8.串口UART通信并开启printf功能

目录 1.简介 2.串口和UART 2.1串口的简介 2.2UART的简介 2.3UART通信协议 2.3.1波特率 2.3.2空闲位 2.3.3起始位 2.3.4数据位 2.3.5校验位 2.3.6停止位 3.STM32的UART 4.HAL库中常用的操作UART的函数 4.1UART初始化函数 -- HAL_UART_Init 4.2硬件初始化回调函数…

【PyTorch项目实战】CycleGAN:无需成对训练样本,支持跨领域图像风格迁移

文章目录 一、风格迁移模型&#x1f3a8;1、发展时间线2、分类与优缺点3、选择建议4、HuggingFace Demo&#xff08;instruct-pix2pix&#xff09; —— 在线测试 二、论文简读&#xff08;1&#xff09;FastStyleTransfer&#xff08;快速风格迁移&#xff0c;Johnson et al.,…

C#Halcon从零开发_Day14_AOI缺陷检测策略1_Bolb分析+特征分析_饼干破损检测

一、引言 *缺陷检测策略1&#xff1a;Blob分析特征分析 *Blob分析&#xff1a;阈值分割、开闭运算 (1) 图像预处理 目的&#xff1a;增强目标与背景的对比度&#xff0c;抑制噪声。 常用算子&#xff1a; threshold()&#xff1a;通过阈值分割将图像转换为二值图像。 mean_…

18年磨一剑!开利科技启动数字化增量投资新时代

当传统营销陷入流量困局&#xff0c;当数字化转型变成"面子工程"&#xff0c;广州开利网络用18年技术积淀给出新答案——"蚓链数字化生态营销系统"&#xff0c;让企业不再为数字化而数字化&#xff0c;而是通过数字化实现利润增长&#xff01; 核心亮点&am…

65-Oracle Undo机制

前一期看了Oracle在redo上保持事务前滚的一致性&#xff0c;同样Oracle在Undo的管理机制也是现代事务型数据库的工程典范。核心在于通过多版本并发控制&#xff08;MVCC&#xff09;技术&#xff0c;在保障数据一致性与提升系统性能之间实现精妙平衡。Undo机制构建了原子事务的…

【ESP32摄像头开发实例】-实现遥控视频小车

ESP32-CAM实现遥控视频小车 文章目录 ESP32-CAM实现遥控视频小车1、硬件准备2、代码实现3、代码解析4、程序下载到开发板在本文中,将详细介绍如何使用ESP32-CAM制作一辆Wi-Fi远程控制的小车。 1、硬件准备 在开始这个项目之前,我们将强调用于构建机器人的最重要的特性和组件…

图片加载优化(缩略图)

缩略图 系统目前的问题&#xff1a;首页直接加载原图&#xff0c;原图文件通常比缩略图大数倍甚至数十倍&#xff0c;不仅导致加载时间长&#xff0c;还会造成大量流量浪费。 解决方案&#xff1a;上传图片时&#xff0c;同时生成一份较小尺寸的缩略图。用户浏览图片列表时加…

GO语言---数组

文章目录 数组的基本特性数组的声明和初始化数组元素的访问和操作数组遍历多维数组数组的长度和容量数组作为函数参数数组与切片的区别注意 数组是Go语言中最基本的数据结构之一&#xff0c;它是一组相同类型元素的固定长度序列。 数组的基本特性 1、固定长度&#xff1a;数组…

7.5.3_1处理冲突的方法-拉链法

知识总览&#xff1a; 拉链法&#xff1a; 开始散列表中没有存储任何数据元素即散列地址上的元素是空的&#xff0c;散列地址可以视为链表的头指针&#xff0c;即没有插入任何元素前链表的头指针是空的。一个散列地址对应一个链表&#xff0c;散列地址上实际没有存数据元素&am…

鸿蒙运动项目开发:项目运行环境切换器

##鸿蒙核心技术##运动开发# 在开发鸿蒙运动项目时&#xff0c;管理不同运行环境&#xff08;如开发环境、测试环境、生产环境&#xff09;是一个常见的需求。通过合理地切换运行环境&#xff0c;开发者可以方便地进行调试、测试和部署。本文将介绍如何实现一个项目运行环境切换…

Linux内核中安全创建套接字:为何inet_create未导出及正确替代方案

引言 在Linux内核开发中,当驱动程序需要创建网络套接字时,开发者常会遇到一个关键问题:核心函数inet_create(负责初始化IPv4套接字)并未导出到内核符号表。本文深入剖析这一设计决策背后的逻辑,并提供驱动程序安全创建套接字的实践方案。 一、inet_create未导出的深层原…

63、不同路径II

题目 解答&#xff1a; 初始化和特殊情况比较麻烦的dp obstacleGrid(0,0)1的&#xff0c;直接return 0即可。入口都被堵住了还怎么走。 mn1情况&#xff0c;直接判断 第一行初始化&#xff1a;dp[1][0]->dp[i][0] 碰到有障碍物的&#xff0c;从当前格子开始到末尾全部置…