linux(ubuntu)下C++访问mysql数据库

2023-11-06

  1. Ubuntu安装msyql

    1. 安装mysql数据库

      ?
      1
      sudo apt-get install mysql-server
    2. 安装mysql客户端

      ?
      1
      sudo apt-get install mysql-client
  2. C API的基本类型

    1. MYSQL

      1. 该结构代表1个数据库连接的句柄.

      2. 几乎所有的MySQL函数均使用它.

      3. 不应尝试拷贝MYSQL结构, 不保证这类拷贝结果会有用.

    2. MYSQL_RES

      1. 该结构代表返回行的查询结果

    3. MYSQL_ROW

      1. 这是1行数据的“类型安全”表示。它目前是按照计数字节字符串的数组实施的。

      2. 行是通过调用mysql_fetch_row()获得的。

    4. 官方文档地址 

      1. ?
        1
        http://dev.mysql.com/doc/refman/5.1/zh/apis.html#c
  3. 代码

    1. 向表中插入(删除)一条数据

      ?
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      #include <iostream>
      #include <mysql/mysql.h>
       
      using namespace std;
       
      int main( int argc, char * argv[])
      {
           //准备mysql的访问结构
           MYSQL mysql;
           mysql_init( &mysql );
        
           mysql_real_connect(
               &mysql,
               "192.168.16.114" ,   //要访问数据库的IP地址
               "root" ,         //用户名
               "root" ,         //密码
               "test" ,         //要访问的数据库
               3306,           //该数据库的端口
               NULL,           //一般为NULL
               0           //一般为0
           );
        
           //插入
           string sql = "insert into student value(1, 'jp', 24, 'gzjd')" ;
        
           //删除
           //string sql = "delete from student where id = 33";
        
           //执行sql语句
           mysql_query( &mysql, sql.c_str() );
       
           //关闭数据库连接
           mysql_close( &mysql );
       
           return 0;
      }
       
      //编译
           //g++ file.cpp -o target -lmysqlclient
       
      //执行
           //./target
       
      //验证
           //成功
    2. 更新表内容

      ?
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      #include <iostream>
      #include <mysql/mysql.h>
       
      using namespace std;
       
      int main( int argc, char * argv[])
      {
           MYSQL mysql;
           mysql_init( &mysql );
           
           mysql_real_connect(
               &mysql,
               "192.168.16.114" ,
               "root" ,
               "root" ,
               "test" ,
               3306,
               NULL,
               0
           );
       
           string sql = "update student set name = 'pj' where id = 2" ;
       
           mysql_query( &mysql, sql.c_str() );
           
               mysql_close(&mysql);
               
               return 0;
      }
    3. 调用存储过程

      ?
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      #include <iostream>
      #include <mysql/mysql.h>
       
      using namespace std;
       
      int main( int argc, char * argv[])
      {
           MYSQL mysql;
           mysql_init( &mysql );
           
           mysql_real_connect(
               &mysql,
               "192.168.16.114" ,
               "root" ,
               "root" ,
               "test" ,
               3306,
               NULL,
               0  
           ); 
       
           string sql = "call myPorc();" ;
           int ret = mysql_query( &mysql, sql.c_str() );
           
      //      debug info
      //  cout << mysql_error( &mysql );
      //  cout << ret << endl;
       
           mysql_close(&mysql);
       
           return 0;
      }
    4. 查询数据表的内容

      ?
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      #include <iostream>
      #include <mysql/mysql.h>
       
      using namespace std;
       
      int main( int argc, char * argv[])
      {
           MYSQL mysql;
           mysql_init( &mysql );
           mysql_real_connect(
               &mysql,
               "192.168.16.114" ,
               "root" ,
               "root" ,
               "test" ,
               3306,
               NULL,
               0  
           );
       
           string sql = "select * from student" ;
           mysql_query( &mysql, sql.c_str() );
           
           MYSQL_RES *result = NULL;
           result = mysql_store_result( &mysql );
           
           //得到查询出来所有数据的条数
           int row_count = mysql_num_rows( result );
           cout << "all data number: " << row_count << endl;
       
           //得到字段的个数和字段的名字
           int field_count = mysql_num_fields( result );
           cout << "field count : " << field_count << endl;
       
           //得到所有字段的名字
           MYSQL_FIELD* field = NULL;
           for ( int i = 0; i < field_count; ++i)
           {
               field = mysql_fetch_field_direct( result, i );
               cout << field->name << "\t" ;
           }
           cout << endl;
       
           //显示表中的所有数据
           MYSQL_ROW row = NULL;
           row = mysql_fetch_row( result );
           while ( NULL != row )
           {
               for ( int i = 0; i < field_count; ++i)
               {
                   cout << row[i] << "\t" ;
               }
               cout << endl;
       
               row = mysql_fetch_row( result );
           }
          
           mysql_free_result(result);
       
           mysql_close( &mysql );
           
           return 0;
      }
    5. 得到指定数据库test中的所有表

      ?
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      #include <iostream>
      #include <string>
      #include <vector>
      #include <mysql/mysql.h>
       
      using namespace std;
       
      int main( int argc, char * argv[])
      {
           //定义一个数据库连接句柄
           MYSQL mysql;
           
           //对数据句柄进行初始化
           mysql_init( &mysql );
       
           //连接数据库
           mysql_real_connect(
               &mysql,
               "192.168.16.114" ,
               "root" ,
               "root" ,
               "test" ,
               3306,
               NULL,
               0
           );
       
           //查询数据库
           string sql = "show tables;" ;
           
           mysql_query( &mysql, sql.c_str() );
       
           MYSQL_RES *result = NULL;
           result = mysql_store_result( &mysql );
       
           //得到查询出来所有数据记录的数量
           vector<string> allTable;
           MYSQL_ROW row = mysql_fetch_row( result );
           while ( NULL != row )
           {
               allTable.push_back( row[0] );
               row = mysql_fetch_row( result );
           }
       
           for (vector<string>::const_iterator cit = allTable.begin(); cit != allTable.end(); ++cit )
           {
               cout << *cit << "\t" ;
           }
           cout << endl;
           
           mysql_free_result( result );
           
           mysql_close( &mysql );
           
           return 0;
      }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux(ubuntu)下C++访问mysql数据库 的相关文章

  • 拥抱国产化,推动产业互联网,拍乐云做了什么?

    新一轮科学技术进步法的修订中提出要健全科技创新保障措施 完善创新体系 为促进实现高水平科技自立自强提供法治保障 随着国家对信息安全 科学自主的要求越来越高 音视频技术作为视频会议 应急指挥 办公协同 远程银行等行业场景的基础技术支撑 其独立
  • 【机器学习】欠拟合与过拟合总结

    目录 欠拟合与过拟合总结 一 欠拟合与过拟合的概念 二 欠拟合产生的原因与解决方法 三 过拟合产生的原因与解决方法 过拟合与欠拟合的区别在于 欠拟合在训练集和测试集上的性能都较差 而过拟合往往能较好地学习训练集数据的性质 而在测试集上的性能
  • 解决 Cannot find the specified class com.ibm.websphere.ssl.protocol.SSLSocketFactory报错问题

    背景说明 最近做接口开发时 需要调用调用第三方系统的接口 一开始用的是http的接口后来改为用https的协议 发现接口调用时会报错 java lang Exception 调用OA接口服务发生异常 java net SocketExcep
  • crmeb 标准版客服配置

    说明 此教程用于4 3 1 版本配置客服系统 1 首先放行服务器端口 info 提示 客服端口可自定义 目前系统默认使用 20002 20003 20012 端口 v4 3 0之后版本忽略本步骤 这里以阿里云服务器为参考 进入服务器安全组端
  • volume的含义_volume是什么意思

    你知道volume是什么意思吗X 在我们的日常生活中或在网络上 有时会听到或看到这样的词 下面我们一起来看看volume是什么意思吧 volume是什么意思 volume在计算机领域有 卷标 音量 之意 在股票用语上表示 成交量 成交金额及
  • leetcode----JavaScript 详情题解(3)

    目录 2667 创建 Hello World 函数 2677 分块数组 2693 使用自定义上下文调用函数 2695 包装数组 2703 返回传递的参数的长度 2704 相等还是不相等 2705 精简对象 2715 执行可取消的延迟函数 2
  • 北京时间--UNIX时间戳 相互转换

    UNIX时间戳 13位 10位 毫秒 秒 北京时间转换为13位时间戳 UTC 8 gt UTC gt 时间戳 e g DECLARE DATE DATETIME SET DATE DATEADD HOUR 8 2018 12 07 14 3
  • 华为od机试 Java 【单词前缀】

    题目 描述 给定一个单词前缀和一个字典 你的任务是从字典中找出所有以该前缀开头的单词 输入 输入的第一个单词是你要查找的前缀 接下来的数字表示字典中的单词数量 紧随其后的是字典中的单词 单词之间由空格分隔 输出 如果存在以给定前缀开头的单词
  • 【计算机网络】传输层协议-------TCP详解

    文章目录 1 TCP 协议概述 2 TCP原理 2 1 保持可靠性的机制 2 1 1 确认应答 2 1 2 超时重传 2 1 3 连接管理机制 安全机制 2 1 3 1 三次握手 2 1 3 2 四次挥手 2 1 4 滑动窗口 2 1 5
  • 在pycharm用python画图:matplotlib

    安装matplotlib 先找到自己的python位置 再进入Scripts文件夹 我的是C Users mi AppData Local Programs Python Python39 Scripts 一定要找对 否则下面的命令没有任何
  • Flex (SDK 4.5) 中直接使用 H.264 编码视频

    最近用到 Flex FMS 实现一个视频通信 而且需要用 H 264 编码 但 Flash 本身只能采用 VP6 H 263 编码 要想编码为 H 264 必须要利用第三方工具 Flash Media Live Encoder 这也是我不愿
  • 计算智能——感知器模型

    主要内容 1 感知器总述 2 感知器模型 3 感知器策略 建立损失函数 4 感知器算法 梯度下降和随机梯度下降 4 1梯度下降 4 2随机梯度下降 5 感知器MATLAB简单实现 5 1newp函数 5 2sim函数 5 3init函数 5
  • mysql提示表不存在的解决方法error: 1146: Table doesn't exist

    如果表真的不存在就新建对应表 如果存在 则 1 这种情况一般只要重启下数据库就能解决 2 或者把原来mysql安装目录data里的 ibdata1 文件也拷贝过去 不确定是否会影响MySQL里的原有数据库 请先备份ibdata1文件
  • HTML5是什么与什么合作推出的语言,H5和Html5是一回事吗?-- -H5和Html5问答

    经常有人问何为H5 或发个网页问是不是H5 真让回答 一两句也讲不清楚 所以先聊聊我理解的H5广告究竟如何定义 H5广告是什么 广告在生活中可是不新鲜了 不管你乐不乐意 带这个符号的传播物每天都在消耗着你的时间 你的精力 甚至还有你的情感
  • 内存数据库解析与主流产品对比(三)

    作者 实验室小陈 大数据开放实验室 在上一篇文章 内存数据库解析与主流产品对比 二 中 我们从数据组织和索引的角度介绍了内存数据库的特点和几款产品的技术实现 本文将继续解析内存数据库 从并发控制 持久化和查询处理的角度介绍几款技术 带来更多
  • Unity提高工作效率的终极指南

    本套课程指南通过关于如何更快 更智能地工作的最新技术 帮助Unity创作者节省时间并提高工作效率 你会学到 Unity的创建者节省了时间 提高了生产力 关于如何更快地使用程序员和艺术家工具集的技巧 无论是个人还是团队 Unity应该是一种快
  • 什么是布隆过滤器?如何使用?

    欢迎搜索 文章目录 一 布隆过滤器简介 二 布隆过滤器的结构 三 布隆过滤器应用 四 布隆过滤器的优缺点 五 布隆过滤器实战 六 总结 Redis缓存穿透可以通过布隆过滤器进行解决 那么什么是布隆过滤器呢 请往下看 通常你判断某个元素是否存

随机推荐

  • 在Unity中编写Shader的编译器环境配置(支持CG和HLSL)

    Unity默认使用的编译器VisualStudio带有扩展插件ShaderLabVS 但功能很差 所以还是选用VisualStudioCode作为编写Shader的编译器 一方面其能自动识别Shaderlab语法 并且还有丰富的Shader
  • vue脚手架中创建自定义指令

    局部自定义指令直接在组件内部创建
  • 使用tee命令 将bash -x 输出的内容保存到文件中

    tee 命令语法 tee ai help version 文件 参数 a或 append 附加到既有文件的后面 而非覆盖它 i或 ignore interrupts 忽略中断信号 help 在线帮助 version 显示版本信息 示例 ba
  • java -jar 启动脚本

    ccue sh 需 chomd x ccue sh 启动使用 ccue sh start bin sh ccue sh start 启动 stop 停止 restart 重启 status 状态 AppName ccue server ja
  • 【一分钟解决】Python报错ImportError: attempted relative import with no known parent package

    文章目录 报错关键词 常见问题汇总及排查 1 在脚本中使用相对导入 详细解决方案 1 看这段基本够了 使用相对导入的时机 2 扩展 如果你真的需要在包平级目录以外的位置调用包 参考链接 扩展 名词解释 脚本 script 模块 module
  • 【Python 3.7】分子运动:修改 rw_visual.py,将其中的 plt.scatter() 替换为 plt.plot() 。为 模拟花粉在水滴表面的运动路径

    Python 3 7 分子运动 修改 rw visual py 将其中的 plt scatter 替换为 plt plot 为 模拟花粉在水滴表面的运动路径 向 plt plot 传递 rw x values 和 rw y values 并
  • 前端canvas绘制水波球

    效果如下图 代码
  • 创建软链接(symbolic link)

    Linux ln命令是一个非常重要命令 它的功能是为某一个文件在另外一个位置建立一个同步的链接 类似windows下的快捷方式 Linux文件系统中 有所谓的链接 link 我们可以将其视为档案的别名 而链接又可分为两种 硬链接 hard
  • 计算机视觉学习总结:基本的图像操作和处理(一)

    PIL Python图像处理类库 PIL Python Imaging Library Python 图像处理类库 提供了通用的图像处理功能 以及大量有用的基本图像操作 比如图像缩放 裁剪 旋转 颜色转换等 基本操作 1 读取图片及灰度转换
  • acwing模板整理(第一讲)(基础算法)

    目录 一 归并排序模板 二 二分 需要满足单调性 整数二分和小数二分 三 高精度加减乘除 2 减法 3 乘法 4 除法 四 1 一维前缀和与差分数组 2 子矩阵的前缀和与差分矩阵 二维前缀和与二维差分矩阵 五 双指针算法 找单调性优化 双指
  • 测试——Web网站测试主要测试那些内容

    一般的网站的主要测试内容就分为以下几点 目录 功能测试 性能测试 安全测试 稳定测试 兼容性测试 压力测试 功能测试 功能测试常用到的有效方法 等价划分法 等价划分法就是把输入空间划分为几个 等价区间 在每个等价区间中只需要测试一个典型的数
  • 六、代理模式

    六 动态代理模式 1 模式结构和结构图 1 抽象主题 Subject 类 通过接口或抽象类声明真实主题和代理对象实现的业务方法 1 2 真实主题 Real Subject 类 实现了抽象主题中的具体业务 是代理对象所代表的真实对象 是最终要
  • Linux Power Supply架构及代码解析

    一 概述 电源管理整体上可以分为两个部分 一个是电池监控 fuel gauge 另外一个是充放电管理 这两部分在内核中也是分为两个驱动来管理 fuelgauge驱动的功能主要是负责向上层Android系统提供当前电池的电量和健康信息等等 同
  • redis学习总结

    文章目录 redis数据结构原理 简单字符串SDS 叫Simple dynamic string 链表 字典 跳跃表 redis持久化 RDB持久化 AOF持久化 redis集群三种模式 主从模式 实现主从分离 提高吞吐 多机备份 哨兵模式
  • Python填写问卷星

    主要使用python实现问卷星的自动填写和提交 主要使用了https www jianshu com p 34961ceedcb4的代码 使用了X Forwarded For自动修改ip 我测试的时候是可以使用的 PS 我是在linux下面
  • idea 设置自动添加注释

    添加类注释 打开Settings 点击Apply OK 添加方法注释 添加组 选择test 添加Live Template text如下 Author yeluo Description description param param re
  • JSONObject对象的方法

    JSONObject 是 org json 库中的一个类 用于创建和操作 JSON 对象 以下是一些常用的 JSONObject 方法 1 put key value 向 JSON 对象中添加键值对 jsonObject put key v
  • 锂电池充放电电路设计与分析

    Lithium battery charge 锂电池充放电电路 1 USB插入检测电路 1 1 FUSE1 自恢复保险丝 当后续的电路发生短路等故障时 自动启动保护作用来保护外围的电源 避免损坏 因为经常出事故一般是电源出事故了 电源短路
  • leetcode_第17题_缺失的第一个正数——原地哈希

    题目 题目 分析 正常思路 另外制作一个哈希表 然后遍历就ok 但是这样不符合题目空间复杂度要求 所以采用原地哈希就可以了 思路 把正常数字nums i 交换存储到下标位置为nums i 1的地方 不正常数字不管 正常数字是指 值 1 le
  • linux(ubuntu)下C++访问mysql数据库

    Ubuntu安装msyql 安装mysql数据库 1 sudo apt get install mysql server 安装mysql客户端