当前位置: 首页 > news >正文

C 语言连接MySQL 数据库

前提条件

本机安装MySQL  8 数据库

整体步骤

第一步:开启Windows 子系统安装Ubuntu 22.04.4,安装MySQL 数据库第三方库执行 如下命令:

sudo aptitude install libmysqlclient-dev

wz2012@LAPTOP-8R0KHL88:/mnt/e/vsCode/cpro$ sudo aptitude install libmysqlclient-dev
The following NEW packages will be installed:libmysqlclient-dev libmysqlclient21{a} libssl-dev{a} libzstd-dev{a} zlib1g-dev{a}
The following packages will be REMOVED:libssl1.1{u}
0 packages upgraded, 5 newly installed, 1 to remove and 10 not upgraded.
Need to get 5901 kB of archives. After unpacking 26.2 MB will be used.
Do you want to continue? [Y/n/?] y
Get: 1 http://mirrors.aliyun.com/ubuntu jammy-security/main amd64 libmysqlclient21 amd64 8.0.37-0ubuntu0.22.04.3 [1302 kB]
Get: 2 http://mirrors.aliyun.com/ubuntu jammy-security/main amd64 libssl-dev amd64 3.0.2-0ubuntu1.15 [2376 kB]
Get: 3 http://mirrors.aliyun.com/ubuntu jammy/main amd64 libzstd-dev amd64 1.4.8+dfsg-3build1 [401 kB]
Get: 4 http://mirrors.aliyun.com/ubuntu jammy-security/main amd64 zlib1g-dev amd64 1:1.2.11.dfsg-2ubuntu9.2 [164 kB]
Get: 5 http://mirrors.aliyun.com/ubuntu jammy-security/main amd64 libmysqlclient-dev amd64 8.0.37-0ubuntu0.22.04.3 [1658 kB]
Fetched 5901 kB in 22s (271 kB/s)
(Reading database ... 32533 files and directories currently installed.)
Removing libssl1.1:amd64 (1.1.1f-1ubuntu2.22) ...
Selecting previously unselected package libmysqlclient21:amd64.
(Reading database ... 32523 files and directories currently installed.)
Preparing to unpack .../libmysqlclient21_8.0.37-0ubuntu0.22.04.3_amd64.deb ...
Unpacking libmysqlclient21:amd64 (8.0.37-0ubuntu0.22.04.3) ...
Selecting previously unselected package libssl-dev:amd64.
Preparing to unpack .../libssl-dev_3.0.2-0ubuntu1.15_amd64.deb ...
Unpacking libssl-dev:amd64 (3.0.2-0ubuntu1.15) ...
Selecting previously unselected package libzstd-dev:amd64.
Preparing to unpack .../libzstd-dev_1.4.8+dfsg-3build1_amd64.deb ...
Unpacking libzstd-dev:amd64 (1.4.8+dfsg-3build1) ...
Selecting previously unselected package zlib1g-dev:amd64.
Preparing to unpack .../zlib1g-dev_1%3a1.2.11.dfsg-2ubuntu9.2_amd64.deb ...
Unpacking zlib1g-dev:amd64 (1:1.2.11.dfsg-2ubuntu9.2) ...
Selecting previously unselected package libmysqlclient-dev.
Preparing to unpack .../libmysqlclient-dev_8.0.37-0ubuntu0.22.04.3_amd64.deb ...
Unpacking libmysqlclient-dev (8.0.37-0ubuntu0.22.04.3) ...
Setting up libmysqlclient21:amd64 (8.0.37-0ubuntu0.22.04.3) ...
Setting up libzstd-dev:amd64 (1.4.8+dfsg-3build1) ...
Setting up libssl-dev:amd64 (3.0.2-0ubuntu1.15) ...
Setting up zlib1g-dev:amd64 (1:1.2.11.dfsg-2ubuntu9.2) ...
Setting up libmysqlclient-dev (8.0.37-0ubuntu0.22.04.3) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.8) ...

第二步:编写MySQL 8 数据库连接,验证数据是否能够正常联通。

温馨提示:相关重要说明,已经代码中进行标记。

mysql_demo.c

#include <mysql/mysql.h>
#include <stdio.h>
// MySQL 数据库连接
int main(void){// 数据库连接MYSQL *conn;// 数据库集合MYSQL_RES *res;// 数据库行记录MYSQL_ROW *row;char *server = "localhost";char *user = "root";char *password = "123456"; /* 此处改成你的密码 */char *database = "base";/*数据库,比如base*/conn = mysql_init(NULL);/* 数据库连接 */if (!mysql_real_connect(conn, server,user, password, database, 0, NULL, 0)) {fprintf(stderr, "%s\n", mysql_error(conn));exit(1);}printf("数据库连接成功");return 0;}

第三步:编译mysql_demo.c文件

我这里演示错误的编译方式/(使用常用代码编辑方式,这是一种错误方式)错误结果如下:

wz2012@LAPTOP-8R0KHL88:/mnt/e/ubuntu_code$ cd "/mnt/e/ubuntu_code/" && gcc mysql_demo.c -o mysql_demo && "/mnt/e/ubuntu_code/"mysql_demo
/usr/bin/ld: /tmp/ccm7ZrUH.o: in function `main':
mysql_demo.c:(.text+0x3e): undefined reference to `mysql_init'
/usr/bin/ld: mysql_demo.c:(.text+0x6b): undefined reference to `mysql_real_connect'
/usr/bin/ld: mysql_demo.c:(.text+0x80): undefined reference to `mysql_error'
collect2: error: ld returned 1 exit status

上述代码错误原因:没有找到mysql_init 函数定义的库文件/undefined reference to `mysql_init'。

解决办法: 

使用mysql_config 命令查找MySQL 依赖的LIB库, --libs_r 就是我们需要添加编译mysql 库链接参数。

wz2012@LAPTOP-8R0KHL88:/mnt/e/ubuntu_code$ mysql_config
Usage: /usr/bin/mysql_config [OPTIONS]
Compiler: GNU 11.4.0
Options:--cflags         [-I/usr/include/mysql ]--cxxflags       [-I/usr/include/mysql ]--include        [-I/usr/include/mysql]--libs           [-L/usr/lib/x86_64-linux-gnu -lmysqlclient -lzstd -lssl -lcrypto -lresolv -lm]--libs_r         [-L/usr/lib/x86_64-linux-gnu -lmysqlclient -lzstd -lssl -lcrypto -lresolv -lm]--plugindir      [/usr/lib/mysql/plugin]--socket         [/var/run/mysqld/mysqld.sock]--port           [0]--version        [8.0.37]--variable=VAR   VAR is one of:pkgincludedir [/usr/include/mysql]pkglibdir     [/usr/lib/x86_64-linux-gnu]plugindir     [/usr/lib/mysql/plugin] 

切换至Unbuntu 命令输出控制台输入如下编译指令:

wz2012@LAPTOP-8R0KHL88:/mnt/e/ubuntu_code$ gcc mysql_demo.c -o mysql_demo -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lzstd -lssl -lcrypto -lresolv -lm

第四步:测试MySQL 数据库是否联通,遇到的问题总结

1、问题1:基于localhost 无法联通MySQL 服务器,提示错写信息为:

wz2012@LAPTOP-8R0KHL88:/mnt/e/ubuntu_code$ ./mysql_demo

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (13)

解决办法:将localhost 修改为127.0.0.1

2、问题2:针对问题1,将windows 访问地址由localhost 修改 为127.0.0.1 ,提示的错误信息为:

wz2012@LAPTOP-8R0KHL88:/mnt/e/ubuntu_code$ ./mysql_demo

Can't connect to MySQL server on '127.0.0.1:3306' (111)

解决办法:将localhost 修改为本机IP地址(在window 系统上使用ipconf命令查看本机IP地址)

3、问题3:针对问题2,将mysql 访问地址由127.0.0.1 修改为192.168.43.1, 提升的错误信息为:

wz2012@LAPTOP-8R0KHL88:/mnt/e/ubuntu_code$ ./mysql_demo

Access denied for user 'root'@'LAPTOP-8R0KHL88' (using password: YES)

4、针对问题3 主要是由于MySQL 服务访问权限设置问题造成。

在MySQL 控制台执行如下命令:

use mysql;update user set Host='%' where User ='root';FLUSH PRIVILEGES;

第五步: 基于MySQL 联通代码,打印指定数据库所有表名:

#include <mysql/mysql.h>
#include <stdio.h>
// MySQL 数据库连接
int main(void){// 数据库连接MYSQL *conn;// 数据库集合MYSQL_RES *res;// 数据库行记录MYSQL_ROW row;char *server = "192.168.43.1";char *user = "root";char *password = "123456"; /* 此处改成你的密码 */char *database = "base";/*数据库,比如base*/conn = mysql_init(NULL);/* 数据库连接 */if (!mysql_real_connect(conn, server,user, password, database, 0, NULL, 0)) {fprintf(stderr, "%s\n", mysql_error(conn));exit(1);}/*SQL 查询 */if (mysql_query(conn, "show tables")) {fprintf(stderr, "%s\n", mysql_error(conn));exit(1);}res = mysql_use_result(conn);/* 输出表名 */printf("MySQL Tables in mysql database:\n");while ((row = mysql_fetch_row(res)) != NULL)printf("%s \n", row[0]);/* 关闭数据库连接 */mysql_free_result(res);mysql_close(conn);return 0;}

结果输出:

wz2012@LAPTOP-8R0KHL88:/mnt/e/ubuntu_code$ ./mysql_demo
MySQL Tables in mysql database:
base_user
bds_building
bds_building_progress
bds_contract
bds_contract_entity
bds_contract_house
bds_enterprise_org
bds_house
bds_house_flag
bds_license
bds_license_house
bds_project
bds_subs_contract
bds_subs_contract_entity
bds_subs_contract_house
bds_yw_wqba
gethouse

第六步: 基于MySQL 基础代码,封装通用表增删改查操作。

待补充

相关文章:

C 语言连接MySQL 数据库

前提条件 本机安装MySQL 8 数据库 整体步骤 第一步&#xff1a;开启Windows 子系统安装Ubuntu 22.04.4&#xff0c;安装MySQL 数据库第三方库执行 如下命令&#xff1a; sudo aptitude install libmysqlclient-dev wz2012LAPTOP-8R0KHL88:/mnt/e/vsCode/cpro$ sudo aptit…...

【探索Linux】P.34(HTTPS协议)

阅读导航 引言一、HTTPS是什么1. 什么是"加密"2. 为什么要加密3. 常见的加密方式&#xff08;1&#xff09;对称加密&#xff08;2&#xff09;非对称加密 二、证书认证1. CA认证 三、HTTPS的加密底层原理✅非对称加密对称加密证书认证 温馨提示 引言 在上一篇文章中…...

Python 踩坑记 -- 调优

前言 继续解决问题 慢 一个服务运行有点慢&#xff0c;当然 Python 本身不快&#xff0c;如果再编码不当那这个可能就是量级上的劣化。 整个 Code 主线逻辑 1700&#xff0c;各依赖封装 3000&#xff0c;主线逻辑也是很久远的痕迹&#xff0c;长函数都很难看清楚一个 if els…...

英特尔澄清:Core i9处理器崩溃问题根本原因仍在调查,eTVB非主因

英特尔否认了有关已找到导致Core i9崩溃问题根本原因的报道&#xff0c;强调调查仍在继续。此前&#xff0c;德国媒体Igors Lab曾报道&#xff0c;英特尔已经发现了影响第13代猛禽湖&#xff08;Raptor Lake&#xff09;和第14代猛禽湖Refresh Core i9处理器稳定性的根源问题&a…...

python实战根据excel的文件名称这一列的内容,找到电脑D盘的下所对应的文件位置,要求用程序实现

今天客户需要 根据excel的文件名称这一列的内容&#xff0c;找到电脑D盘的下所对应的文件位置&#xff0c;要求用程序实现 数据样例&#xff1a;记录.xlsx 解决代码&#xff1a; 1、安装必要的库&#xff1a; pip install pandas openpyxl2、编写Python脚本&#xff1a; im…...

LVS ipvsadm命令的使用(二)

目录 上篇&#xff1a;负载均衡集群&#xff08;一&#xff09;-CSDN博客 命令参数概述 调度算法 基本命令 1. 添加虚拟服务器 2. 添加真实服务器 3. 删除虚拟服务器 4. 删除真实服务器 5. 列出当前配置 6. 修改服务器权重 7.保存规则 8. 清除所有配置 进行增加虚拟…...

Java面向对象-接口

Java面向对象-接口 一、JDK1.8之前二、接口的作用三、JDK1.8之后&#xff0c;新增非抽象方法四、静态方法 一、JDK1.8之前 1、类是类&#xff0c;接口是接口&#xff0c;它们是同一层次的概念 2、接口中没有构造器 3、接口如何声明&#xff1a;interface 4、在jdk1.8之前&…...

怎么不使用springboot Helper或Spring Initializr来创建spring项目

1. 创建项目目录结构 首先&#xff0c;创建项目的基本目录结构。一个典型的 Maven 项目结构如下&#xff1a; my-spring-project ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── example │ │ │ └…...

STM32CubeMX配置-RTC周期唤醒

一、简介 MCU为STM32G070&#xff0c;采用内部时钟32KHZ&#xff0c;配置为周期6s唤醒&#xff0c;调用回调函数&#xff0c;进行喂狗操作。 二、配置 初始时间、日期、周期唤醒时间配置。 开启周期唤醒中断 三、生成代码 调用回调函数&#xff0c;进行喂狗操作。 //RTC唤醒回…...

js如何添加新元素到数组中

1.push方法 push() 方法可向数组的末尾添加一个或多个元素&#xff0c;并返回新的长度。这是向数组添加元素的最常用方法。 let arr [1, 2, 3]; arr.push(4); // 向数组末尾添加元素4 console.log(arr); // 输出: [1, 2, 3, 4] 2.unshift方法 unshift() 方法可向数组的…...

Python变量和基本数据类型

变量和基本数据类型 变量是什么&#xff1f; 变量是存储在内存中的值&#xff0c;这就意味着在创建变量时会在内存中开辟一个空间。 基于变量的数据类型&#xff0c;解释器会分配指定内存&#xff0c;并决定什么数据可以被存储在内存中。 因此&#xff0c;变量可以指定不同…...

嵌入式数据库_1.嵌入式数据库的定义及特点和分类

1.嵌入式数据库的定义及特点 1.1定义 嵌入式数据库的名称来自其独特的运行模式。这种数据库嵌入到了应用程序进程中&#xff0c;消除了与客户机服务器配置相关的开销。嵌入式数据库实际上是轻量级的&#xff0c;在运行时&#xff0c;它们需要较少的内存。它们是使用精…...

新人学习笔记之(变量)

一、什么是变量 1.变量是存储数据的小盒子&#xff0c;不是里面的数据 2.经常发生改变的数据 二、变量的定义格式 1.数据类型 变量名; 数据类型&#xff1a;为盒子中存储的数据&#xff0c;加入类型【限制】 变量名&#xff1a;为盒子起的名字 分号&#xff1a;语句的结束 三…...

Windows修改CMD窗口编码为UTF-8

windows下的cmd的默认编码是GBK编码&#xff0c;有时可能造成乱码问题&#xff0c;下面是我找到的两种更换编码方式为UTF-8的方法。 1、临时修改 &#xff08;1&#xff09;先进入cmd命令窗口&#xff08;快捷键win键R&#xff09; &#xff08;2&#xff09;直接输入“chcp…...

os实训课程模拟考试(1~7)

操作系统的基本功能和设计目标 1、 操作系统是一组 ____&#xff08;单选&#xff09; A、 文件管理程序 B、 资源管理程序 C、 中断处理程序 D、 设备管理程序 2、 以下哪项不是操作系统关心的主要问题&#xff1f;&#xff08;单选&#xff09; A、 管理计算机裸机 B、 设计…...

yolov10 学习笔记

目录 推理代码&#xff0c;source可以是文件名&#xff0c;路径&#xff0c; 预测可视化&#xff1a; 预测可视化加nms 训练自己的数据集&#xff0c; 训练一段时间报错&#xff1a;dill库 解决方法&#xff1a; 推理代码&#xff0c;source可以是文件名&#xff0c;路径…...

NAT概述

NAT概念 NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;是一种用于修改网络地址信息的技术&#xff0c;主要用于在路由器或防火墙上进行地址转换&#xff0c;以解决 IPv4 地址短缺问题、提高网络安全性以及实现私有网络与公有网络之间的通信…...

Ansys Mechanical|学习方法

Ansys Mechanical是Ansys的旗舰产品之一&#xff0c;涉及的学科体系全面丰富&#xff0c;包括的力学分支主要有理论力学&#xff0c;振动理论&#xff0c;连续介质力学&#xff0c;固态力学&#xff0c;物理力学&#xff0c;爆炸力学及应用力学等。 在自媒体及数字经济飞速发展…...

热门开源项目ChatTTS: 国内语音技术突破,实现弯道超车

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…...

环形链表2证明

解法 快慢指针相遇后&#xff0c;其中一个指回头部&#xff0c;然后同步前进 代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNod…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...