C++ 连接数据库的入口和获取列数、数据
这里不具体放出完整的程序,分享两个核心函数:
由于这里用到的函数是编译器自己的库所没有的,需要自己下载mysql.h库或者本地有数据库,可以去bin找到,放进去。
前提,我自己的测试数据库是WampServe自带的mysql,曾经试过连接新浪云的,发现很坑,它里面的要放代码进去它空间才能连,不能在本机连,连接的输入形参全是它规定的常量!
第一个是连接数据库的:
行内带有详细注释,皆本人的见解,有理解错的,求帮指出。
再作简单介绍,之所有带有int返回类型,是因为一旦连接数据库失败就return 0 结束程序。
形参所输入的分别是 数据库地址、端口,本机的端口一般是3306、数据库名、用户名、密码,调用就能用了。
1 int DateBase::init(const char* host, int port, const char* database, const char* user, const char* password){ 2 this->mysql_res = NULL;//再次先赋空,原因是init这函数可以在任意函数内使用,为了避免在它之前,有缓存读入导致出错,统一用init前,res为NULL 3 my_bool opt_reconnect=1;//全局的“是”,用于是否开启一些功能 4 5 mysql_init(&(this->conn));//初始化,这个是连库必须的函数,传入conn,把缓存存进去 6 7 mysql_options(&(this->conn), MYSQL_SET_CHARSET_NAME,(char *)"gbk"); 8 //库函数,mysql_options设置gbk字符码,,utf8会导致从库中取数据显示出乱码, 9 //此函数的功能很大,第二个参数就是选择功能,这里是选择设置字符码,设置字符码还可以用query命令,只不过它更麻烦。 10 11 mysql_options(&(this->conn), MYSQL_OPT_RECONNECT,(char *)&opt_reconnect); 12 //设置当mysql异常断开连接, 看第二个参数,reconne,就是重连。可自动重连,怎样测掉了呢? 13 //下面的real connect函数,连了之后,如果发现有丢失,就会联系它 14 15 if(!mysql_real_connect(&(this->conn), host, user, password, database, port, NULL, CLIENT_MULTI_STATEMENTS|CLIENT_FOUND_ROWS)) { 16 //这个是连接函数,核心之一,可选参数很多,这里最后的是,允许进行其他操作,连接失败输出所有信息 17 cout<<host<<user<<password<<database<<port<<endl; 18 return 0; 19 } 20 //设置事务自动提交,1为启用自动提交 21 mysql_autocommit(&(this->conn), 1); 22 }
下面这个是在连接数据库成功后:
特别注意,用这个之前请确认你的mysql里面有数据表,否则会出错!
用来获取数据库中表的列名,并且在依次、有顺序地输出列名后输出所有数据的函数。
里面一样注释齐全,还不明白的请留言!有错的请留言告诉我咯。谢谢!
请读者认清里面的函数,下作简介:
mysql_query(,) 这条是执行命令的,成功返回0,第一个参数是连库缓存变量,第二个是命令字符串;
mysql_store_result(),获取结果集,形参是连库缓存变量,返回值是mysql res 类型的结果集缓存变量; mysql_fetch_fields(),获取表中的列名字,它返回的是mysql filed类型的数组,用一次就能获取所有列名,用一循环即可输出所有! mysql_num_fields(),获取字段的数目,就是有多少列; mysql_fetch_row(),获取一行的数据,这是一行哦,但是,获取一行后会自动后移,所以用while最好!返回值是mysql row类型的变量
1 void DateBase::show_db(){//总体显示一遍数据 2 int i,j; 3 MYSQL_FIELD *files; 4 check();//调用chec函数,检查好用户表的存在与否 5 //this->mysql_res=mysql_list_tables(&(this->conn),"user_1"); 6 if(mysql_query(&(this->conn),"select * from user_1;")!=0){//选出用户表的所有数据 * 表示所有 7 cout<<"获取用户表信息出错!"; 8 } 9 this->mysql_res=mysql_store_result(&(this->conn)); 10 files=mysql_fetch_fields(this->mysql_res);//获得字段名 11 for(i=0;i<mysql_num_fields(this->mysql_res);i++){//mysql_num_fields返回字段的数目 12 cout<<std::left<<std::setw(14);cout<<files[i].name;//对齐输出,setw函数是对齐用到的 13 } 14 cout<<"\n"; 15 while(mysql_row=mysql_fetch_row(this->mysql_res)){//获取一行的数据 16 for(j=0;j<mysql_num_fields(this->mysql_res);j++){ 17 if(mysql_row[j]==NULL){//防止内容为空,程序崩溃 18 cout<<"null"; 19 } 20 else 21 cout<<std::left<<std::setw(14);cout<<mysql_row[j]; 22 } 23 cout<<"\n"; 24 } 25 mysql_free_result(mysql_res);//这个是释放内存 26 }
转载于:https://www.cnblogs.com/linguanh/p/4115622.html
C++ 连接数据库的入口和获取列数、数据相关推荐
- 连接数据库,OleDbDataReader读取mdb的数据
去年下半年用VB6弄了简单的串口通信,现在看过去仿佛动物进化史.. 年初开始每月交报表,手算个破表耗掉两三个钟,交上去要审核再算一遍.去尼玛的时间! 为效率,人士推荐用了WPF.鼓捣了俩月,现在用上数 ...
- matlab与excel数据连接数据库,如何实现matlab与excel数据同步 数据交互?
Excel Link是一个在Windows环境下实现Excel与Matlab进行链接的插件.通过连接Excel和Matlab,用户可以在Excel工作表空间和宏编程工具中使用Matlab的数值计算,图 ...
- 红帆以拥有四位MCITP再获微软“数据平台金牌能力”
他们是: 戴志鸿 杨海杰 梁树春 毛国导 金牌能力可帮助您提高专业技术,让您的企业在市场中脱颖而出.当您获得数据平台金牌能力,可以通过展示已经过严格审核过程检验的一流解决方案来展现客户价值.--微软合 ...
- 【重磅】马晓东所著的《数字化转型方法论》获“大数据科技传播奖”,与李兰娟等10位院士、BAT高管共获殊荣
12月13日-14日,由中国科技新闻学会.湖南省科学技术协会.衡阳市人民政府联合主办的"2020年大数据科技传播与应用高峰论坛"在衡阳市正式开幕.200余名业界大咖参会,李德仁.李 ...
- 案例分析 陆金所_陆金所获“大数据优秀安全案例奖”
打造国内首家实现安全验证组件动态化平台 近日,陆金所联合平安金融安全研究院开发的"大数据业务安全风控系统",获得由大数据协同安全技术国家工程实验室颁发的2018年度"大数 ...
- 通过JDBC连接数据库再向数据库里录入数据
一 首先第一步我们现在数据库里创建一张examstudent空表: 二 接着对应着表里内容创建一个学生类: package com.atguigu.jdbc;public class Student ...
- PHP连接数据库成功,但是无法获取数据!
有两种情况: 1.你的数据表没有任何数据,所以返回一个空的数组. 2.php配置的问题. 这里以mysql8和php8为例: 以root用户登入mysql 输入以下命令: mysql> show ...
- Java笔记-spring-rabbitmq中使用@RabbitListener消费(手动确认,获header数据)
手动确认时: application.properties需要添加 spring.rabbitmq.listener.simple.acknowledge-mode=manual 确认ack chan ...
- php excel 获取列数,利用PHPEXCEL读取EXCEL内容,主要是读取EXCEL可用列数 | 学步园...
require_once '../Classes/PHPExcel.php'; $objPHPExcel = PHPExcel_IOFactory::load('simple.xls'); $objA ...
最新文章
- mui 加载动画_mui 等待动画loading mui.showLoading
- 无线网络未来十年十大产业趋势
- java 对 mysql 最简配置
- 数据结构 - 反转单链表(C++)
- 音频文件 数据库存储_数据库系统是什么?它由哪几部分组成?
- git clone 速度过慢
- C# Task 用法
- 2021水电消纳交易电量增长超150% 价格已提高16%
- python能不能自动写代码_微软最强 Python 自动化工具开源了!不用写一行代码!...
- 系统分析与设计的三个发展阶段
- 51与JDY31蓝牙模块通讯,51驱动JDY31蓝牙APP点灯
- 点击链接时直接在网页中打开word文档
- java/php/net/python毕业生就业管理系统
- vue封装了个日历组件(包含农历,节日)
- 最简单明了的QT服务器搭建
- 搭建STF远程真机操控环境
- Android 打电话程序
- iOS App “去评分” 功能的几种实现总结
- springBoot配置 https 和http转htpps协议。
- matlab画图三维立体,matlab的三维图形绘制
热门文章
- 插入排序:直接插入排序希尔排序
- [ActionScript 3.0] AS3中的位图(BitmapData)应用
- window 2008+apache2.4.4+php5.5+mysql-5.6.12+phpmyadmin4.0.4.1安装过程(参考他人文章基础上加上自己遇到的问题)...
- 整理90部好看的经典喜剧片
- [LeetCode]Remove Nth Node From End of List
- SharePoint 2010多语言包的安装
- 收到朋友寄来的煎饼了
- HTML中利用堆栈方式对Table进行行排序
- Mybatis自学日志04(日志工厂)
- 阿里首推的“SpringBoot+Vue全栈项目”有多牛X?