C 语言连接MySQL 数据库

news2024/11/24 19:27:23

前提条件

本机安装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 基础代码,封装通用表增删改查操作。

待补充

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

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

相关文章

使用Java Spring Boot生成二维码与条形码

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

导出excle表

文章目录 导出excle表需求场景引入依赖具体代码 导出excle表 需求场景 假设我们有一个需求&#xff0c;现在数据库中有一些用户信息&#xff0c;我们想要把这些信息导出到excle表格中&#xff0c;然后存储到本地磁盘中。要求&#xff1a;excle表格的第一行需要有黄色背景&…

系统报错vcruntime140_1.dll文件缺失怎么回事?多种解决方法让你对比

一、vcruntime140_1.dll常见问题与错误信息 错误信息类型 启动错误&#xff1a;应用程序在启动时提示缺少 vcruntime140_1.dll 文件。 运行时错误&#xff1a;应用程序在运行过程中突然崩溃&#xff0c;提示 vcruntime140_1.dll 错误。 兼容性错误&#xff1a;新旧版本的 V…

7z及7zip-cpp最高压缩比的免费开源压缩软件

7z介绍 7z是一种主流高效的压缩格式&#xff0c;它拥有极高的压缩比。在计算机科学中&#xff0c;7z是一种可以使用多种压缩算法进行数据压缩的档案格式。该格式最初由7-Zip实现并采用&#xff0c;但这种档案格式是公有的&#xff0c;并且7-Zip软件本身亦在GNU宽通用公共许可证…

js 前端 Function.prototype.call.call(0[‘toString‘], *, 16)

这个函数将 数组转任意进制 Function.prototype.call.call(0[toString], *, 16)

小工具开发

因不太喜欢重复性工作&#xff0c;为了提高日常工作效率&#xff0c;在业余时间开发一些小工具用于帮助自己“偷懒”。 小工具功能&#xff1a; 1、Hightec编译的hex文件&#xff0c;与多模式标定hex文件合成 2、Bootloader文件&#xff0c;Hightec编译的hex文件&#xff0c;与…

Qt画五角星,简单图表

五角星&#xff1a; 代码&#xff1a; widget.cpp #include "widget.h" #include "ui_widget.h" #include <QPaintEvent> #include <QPainter> #include <QPainterPath> Widget::Widget(QWidget *parent): QWidget(parent), ui(new U…

Mysql学习笔记-SQL优化总结

详细内容参见https://blog.csdn.net/qingwufeiyang_530/article/details/139705898?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139705898%22%2C%22source%22%3A%22qingwufeiyang_530%22%7D

Python学习笔记11:入门终结篇

前言 入门知识到这里基本结束了&#xff0c;这里主要讲一下input和range。这两个讲完&#xff0c;讲讲后面进阶学些啥。 range函数 之前将循环的时候讲过一点&#xff0c;这个函数是Python内置的函数&#xff0c;主要用来生成一系列数字&#xff0c;简单方便。 这里重新&…

实践分享:鸿蒙跨平台开发实例

先来理解什么是跨平台 提到跨平台&#xff0c;要先理解什么是“平台”&#xff0c;这里的平台&#xff0c;就是指应用程序的运行环境&#xff0c;例如操作系统&#xff0c;或者是Web浏览器&#xff0c;具体的像HarmonyOS、Android、iOS、或者浏览器&#xff0c;都可以叫做平台…

HTTP协议版本历程

HTTP协议的发展历程 版本推出年份当前状态HTTP/0.91991年已过时HTTP/1.01996年已过时HTTP/1.11997年标准HTTP/2.02015年标准HTTP/3.02022年标准 HTTP/0.9 HTTP/0.9非常简单&#xff0c;并不涉及数据包传输&#xff0c;通过请求和响应的交换达成通信&#xff0c;请求由单行指…

【猫狗分类】Pytorch VGG16 实现猫狗分类5-预测新图片

背景 好了&#xff0c;现在开尝试预测新的图片&#xff0c;并且让vgg16模型判断是狗还是猫吧。 声明&#xff1a;整个数据和代码来自于b站&#xff0c;链接&#xff1a;使用pytorch框架手把手教你利用VGG16网络编写猫狗分类程序_哔哩哔哩_bilibili 预测 1、导包 from to…

DataWhale - 吃瓜教程学习笔记(一)

学习视频&#xff1a;第1章-绪论_哔哩哔哩_bilibili 西瓜书对应章节&#xff1a; 第一章 机器学习三观 What&#xff1a;什么是机器学习&#xff1f; 关键词&#xff1a;“学习算法” Why: 为什么要学机器学习&#xff1f; #### 1. 机器学习理论研究#### 2. 机器学习系统开…

.net8 blazor auto模式很爽(五)读取sqlite并显示(2)

在BlazorApp1增加文件夹data&#xff0c;里面增加类dbcont using SharedLibrary.Models; using System.Collections.Generic; using Microsoft.EntityFrameworkCore;namespace BlazorApp1.data {public class dbcont : DbContext{public dbcont(DbContextOptions<dbcont>…

Servlet基础(续集2)

HttpServletResponse web服务器接收到客户端的http的请求&#xff0c;针对这个请求&#xff0c;分别创建一个代表请求的HttpServletRequest对象&#xff0c;代表响应的一个HttpServletResponse 如果要获取客户端请求过来的参数&#xff1a;找HttpServletRequest如果要给客户端…

梦想编织者Luna:COZE从童话绘本到乐章的奇妙转化

前言 Coze是什么&#xff1f; Coze扣子是字节跳动发布的一款AI聊天机器人构建平台&#xff0c;能够快速创建、调试和优化AI聊天机器人的应用程序。只要你有想法&#xff0c;无需有编程经验&#xff0c;都可以用扣子快速、低门槛搭建专属于你的 Chatbot&#xff0c;并一键发布…

Web前端项目-交互式3D魔方【附源码】

交互式3D魔方 ​ 3D魔方游戏是一款基于网页技术的三维魔方游戏。它利用HTML、CSS和JavaScript前端技术来实现3D效果&#xff0c;并在网页上呈现出逼真的魔方操作体验。 运行效果&#xff1a; 一&#xff1a;index.html <!DOCTYPE html> <html><head><…

独辟蹊径:我是如何用Java自创一套工作流引擎的(上)

作者&#xff1a;后端小肥肠 创作不易&#xff0c;未经允许严谨转载。 目录 1. 前言 2. 我为什么要自创一套工作流引擎 3. 表结构设计及关系讲解 3.1. 流程类别business_approval_workflow 3.1.1. 表结构 3.1.2. 表关系说明 3.2. 流程定义business_approval_workflow_de…

Oracle--存储结构

总览 一、逻辑存储结构 二、物理存储结构 1.数据文件 2.控制文件 3.日志文件 4.服务器参数文件 5.密码文件 总览 一、逻辑存储结构 数据块是Oracle逻辑存储结构中的最小的逻辑单位&#xff0c;一个数据库块对应一个或者多个物理块&#xff0c;大小由参数DB_BLOCK_SIZE决…

【详细介绍下PostgreSQL】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…