【MySQL】C语言连接数据库

一、安装MySQL库

我们之前学习数据库都是在 Linux 的 mysql 客户端下以纯命令行的方式操作的,但其实,我们也可以使用 C/C++/Java/Python 等语言来连接数据库,向 mysqld 下达 sql 语句并获取执行结果。不过,在这之前,我们需要先安装 MySQL 对应的库,这里我们以 C 语言连接数据库为例。

关于 MySQL 的 C语言库,我们可以直接到 MySQL 官网中去下载,然后使用 rz指令 上传到 Linux 中解压。当然我们也可以通过 yum 来直接安装 mysql client 以及 mysql devel。
我们可以使用如下指令安装mysql client 和mysql devel

sudo yum install -y mysql-community-server
sudo yum install -y mysql-community-devel

我们可以使用如下指令进行查看:

ll /etc/yum.repos.d/

在这里插入图片描述

安装完毕后我们就可以在 /usr/include/mysql 目录下找到 mysql 相关的头文件了:

在这里插入图片描述

同时,我们也可以在 /lib64/mysql/ 以及 /usr/lib64/mysql 目录下找到 mysql 对应的动态库以及静态库了:

在这里插入图片描述

验证引入是否成功

现在,我们就可以使用 mysql 目录下头文件中提供的相关函数来连接数据库了。

不过,在正式连接数据库之前,我们可以先通过 mysql_get_client_info() 函数来验证一下 mysql 相关头文件以及动态库是否被成功引入:

函数原型:const char *mysql_get_client_info(void);
返回值: A character string that represents the MySQL client library version.
#include <iostream>
#include <mysql/mysql.h>

int main()
{
   
    std::cout << "mysql version :" << mysql_get_client_info() << std::endl;
    return 0;
}

在这里插入图片描述

这里有几个需要注意的地方:

  1. 由于我们要使用 mysql C库中的函数,所以在 mysql.cc 中我们需要包含 mysql 相关头文件。
  2. 在程序编译时,我们需要使用 -l 选项来指定我们要链接的 mysql 动态库,并且动态库的库名称是去掉前缀 lib 以及后缀 .so 后的剩余部分。(libmysqlclient.so -> mysqlclient)
  3. 由于动态库在 /usr/lib64/mysql/ 目录下,而系统的默认库路径是 /usr/lib64/,所以我们还需要使用 -L 选项来指定动态库的路径。
  4. mysql C语言相关头文件在 /usr/include/mysql/ 目录下,而系统默认的头文件搜索路径是 /usr/include/,所以按道理来说,我们也是需要使用 -I 选项指明头文件路径的;但这里由于我们在编写源程序,包含头文件时使用的是 mysql/mysql.h,而不仅仅是 mysql.h,所以不需要指定。

二、MySQL C API 相关接口

1.C API官方文档

关于C语言连接数据所涉及到的各种数据结构的介绍以及相关函数的使用其实在 MySQL C API 官方文档中已经给出了,我们可以通过它来快速了解并上手 MySQL C API。
在这里插入图片描述

2.初始化 MYSQL句柄

要使用 MySQL C语言库,需要先使用 mysql_init 函数完成对 MYSQL 结构体指针的初始化工作。

// Mysql操作句柄初始化
// 参数说明:
// mysql为空则动态申请句柄空间进⾏初始化
// 返回值: 成功返回句柄指针, 失败返回NULL
MYSQL *mysql_init(MYSQL *mysql)

注意:mysql_init 函数的参数以及返回值都是 MYSQL 指针类型,对于 MYSQL,大家把它类比到C语言中的文件指针来理解即可。MYSQL 和C语言文件 FILE 一样,本质上都是一个结构体。

在这里插入图片描述

在这里插入图片描述

3.连接MySQL

// 连接mysql服务器
// 参数说明:
// mysql--初始化完成的句柄
// host---连接的mysql服务器的地址
// user---连接的服务器的⽤户名
// passwd-连接的服务器的密码
// db ----默认选择的数据库名称
// port---连接的服务器的端⼝: 默认是3306端⼝
// unix_socket---通信管道⽂件或者socket⽂件,通常置NULL
// client_flag---客户端标志位,通常置0
// 返回值:成功返回句柄指针,失败返回NULL
MYSQL 
<think>好的,用户遇到了VMware Workstation不支持虚拟机硬件版本以及模块‘Upgrade’启动失败的问题。我需要根据提供的引用资料来整理解决方案。 首先,根据引用[4],这个问题通常是因为虚拟机是在更高版本的VMware上创建的,而当前使用的版本较低,导致不兼容。解决方法可能包括升级VMware或者修改虚拟机硬件版本。用户可能需要确认自己的VMware版本,并考虑升级到最新版,比如17.x,这样能支持更高的硬件版本。如果用户不想升级,可能需要手动修改.vmx文件中的virtualHW.version,但需要确保目标版本受支持,否则可能无法启动。 然后看引用[1]和[4],提到的解决方案都是升级VMware到最新版本,或者调整虚拟机硬件版本。不过修改硬件版本可能有一定风险,需要备份虚拟机文件。另外,引用[2]和[3]提到在Ubuntu 22.04下安装时遇到的模块编译问题,可能需要安装内核头文件和编译工具,但当前用户的问题可能与模块无关,更多是版本兼容性问题。 因此,解决方案应该分步骤:首先建议升级VMware,其次修改硬件版本,同时提醒备份。如果用户的环境是Linux,可能需要额外步骤,比如安装依赖,但根据问题描述,用户可能是在Windows下,所以可能不需要涉及内核模块编译的部分。不过为了全面,可以补充说明不同系统下的注意事项。 另外,需要检查引用中的链接是否正确对应,比如引用[1]和[4]都提到硬件版本不支持的问题,可能解决方案类似。需要确保步骤清晰,避免用户操作错误导致数据丢失。同时,生成相关问题时要涵盖常见可能性,比如如何检查硬件版本,降级是否可行,以及升级后的模块问题等。</think>### 解决方案 当遇到“VMware Workstation 不支持的硬件版本”或“模块‘Upgrade’启动失败”错误时,通常是因为虚拟机文件的硬件版本高于当前VMware Workstation支持的版本。以下是逐步解决方法: #### 方法1:升级VMware Workstation 1. **检查当前版本**:打开VMware Workstation,点击菜单栏“帮助”->“关于VMware Workstation”,确认当前版本。 2. **下载最新版本**:访问[VMware官网](https://www.vmware.com),下载并安装最新版(如17.x),新版支持更高硬件版本[^1][^4]。 3. **重新打开虚拟机**:升级后,直接启动原虚拟机文件,系统会自动适配硬件版本。 #### 方法2:手动修改虚拟机硬件版本 若无法升级VMware,可手动降低虚拟机硬件版本: 1. **关闭VMware**:确保所有虚拟机已关闭。 2. **找到虚拟机文件**:定位到虚拟机存储目录,找到后缀为`.vmx`的文件(如`Ubuntu.vmx`)。 3. **编辑.vmx文件**: - 用文本编辑器打开`.vmx`文件。 - 找到`virtualHW.version = "XX"`(XX为当前硬件版本号)。 - 将其修改为当前VMware支持的版本(例如,VMware 16 Pro最高支持硬件版本16,因此可改为`virtualHW.version = "16"`)。 4. **保存并重启**:保存文件后重新启动虚拟机。 #### 方法3:修复依赖项(Linux系统) 在Ubuntu等Linux系统中,可能因内核模块缺失导致问题: 1. 安装编译依赖: ```bash sudo apt install build-essential linux-headers-$(uname -r) ``` 2. 重新编译VMware模块: ```bash sudo vmware-modconfig --console --install-all ``` 若失败,可尝试临时禁用安全启动(需重启)[^2][^3]。 #### 注意事项 - **备份虚拟机**:修改文件前建议备份`.vmx`和`.vmdk`文件。 - **版本兼容性**:硬件版本需与VMware版本匹配(如VMware 17支持硬件版本20,VMware 16支持版本16-19)。
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椿融雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值