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  }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏决胜机器学习

PHP实用功能——modern PHP读书笔记(一)

PHP实用功能——modern PHP读书笔记 (原创内容,转载请注明来源,谢谢) 一、命名空间 1、命名空间按照虚拟的层次结构组织PHP代码,类似操作系统的目...

2835
来自专栏精讲JAVA

JDK 10 的 109 项新特性

虽然感觉 JDK9 发布才仅仅几周的时间,然而,随着新的 OpenJDK 的发布节奏,JDK10 已经到达发布候选里程碑阶段。

982
来自专栏维C果糖

史上最简单的 MySQL 教程(六)「SQL 基本操作 之 数据操作」

根据操作对象的不同,咱们可以将 SQL 的基本操作分为三类,分别为:库操作、表(字段)操作和数据操作。

41513
来自专栏猿人谷

腾讯2013年实习生笔试题目(附答案)

下面是我在参加2013年腾讯实习生招聘的笔试题目,当然啦,我个人不可能是完全的记住所有题目,部分是摘自网络的。同时,下面也有一些题目我不会的,希望大家一起商量解...

1928
来自专栏数据之美

关于 MySQL UTF8 编码下生僻字符插入失败/假死问题的分析

1、问题:mysql 遇到某些中文插入异常 最近有同学反馈了这样一个问题: ? 上述语句在脚本中 load 入库的时候会 hang 住,web 前端、命令行操作...

2719
来自专栏ChaMd5安全团队

addslashes防注入的绕过案例(AFSRC获奖白帽子情痴)

代码审计中遇到的一些绕过addslashes的案例 From ChaMd5安全团队核心成员 无敌情痴 MMMMM叫我写一篇文章发到公众号,然...

3909
来自专栏PHP技术

mysql学习笔记

InnoDB引擎与MyISAM引擎 mysql是关系型数据库。其中的存储引擎可以show engines来查看。我的版本是5.6.26的,查看版本用selec...

2685
来自专栏深度学习之tensorflow实战篇

SQL中distinct的用法

在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。 表A: ? 表...

2683
来自专栏10km的专栏

fastjson:对于Exception中复杂类型(enum,...以及自定义类型)成员的处理

如果一个Exception类中有枚举类型或其他复杂类型(比如java.util.Date,或自定义类型)的成员,fastjson反序列化会抛出异常。 /...

2046
来自专栏ChaMd5安全团队

0ctf2018 heapstorm2详解

题目链接 https://github.com/eternalsakura/ctf_pwn/tree/master/0ctf2018/heapstorm2 前置...

4177

扫码关注云+社区