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  }


C++ 连接数据库的入口和获取列数、数据

时间: 2024-10-16 01:01:35

C++ 连接数据库的入口和获取列数、数据的相关文章

如何在MyEclipse中通过hibernate使用jtds驱动连接数据库,并向数据库添加数据的方法

最近学习了下如何在MyEclipse中通过hibernate使用jtds驱动连接数据库,并向数据库添加数据的方法,虽然MyEclipse中自带了连接数据库的方法,我也尝试了下其他方法,如有不当之处请指教,具体如下: 需要的驱动包为:jtds-1.2.jar 首先创建Java项目,就叫testjtds,同时为工程添加hibernate支持 对testjtds鼠标右键,在最下面找到MyEclipse-->Add Hibernate Capabilities...之后 出现如图窗口 当然了,直接nex

9.1(JDBC概述)、(JDBC连接数据库),(JDBC查询数据)

2:JDBC的配置 下载地址:https://dev.mysql.com/downloads/file/?id=470333 这里下载到了C:\Users\王家丰\AppData\Local\Microsoft\Windows\INetCache\IE\Z2F72PPH\mysql-connector-java-5.1.42 3:JDBC连接数据库的步骤 一:注册mysql驱动:两种方式 项目中用的方式:Class.forName("com.masql.jdbc.Driver"); 二

php连接数据库、创建数据库、创建数据表

<?php $con = mysql_connect("localhost", "root", "root"); if(!$con){ die("Could not connection:" . mysql_error()); }else{ echo $con; } /*$dbName = $_GET['databaseName']; if($dbName && isset($dbName)){ crea

libcap-捕获icmp数据包

geticmp1的功能是,捕获icmp数据包,并打印出数据包的内容,不过是直接打印的,不够人性化.geticmp2就更优化一些,把数据包的内容按照icmp,ip的格式打印出来,可以看到报文的内容. 编译方法:gcc -o geticmp? geticmp?.c -lpcap 源代码: geticmp1.c #include <pcap.h> #include <time.h> #include <stdlib.h> #include <stdio.h> #d

CListCtrl获取列数

// m_List是一个CListCtrl CHeaderCtrl* pHeaderCtrl = m_List.GetHeaderCtrl();if(pHeaderCtrl){ int n = pHeaderCtrl->GetItemCount();}

Java通过POI技术操作Excel(3)----数据导出

在之前的博客中,总结了Excel模板生成和Excel数据录入,然后剩最后一个模块,数据库中数据读取,在之前的基础上我们来看这一模块,应该已经非常容易了,接下来简单的介绍一下: 这里我们仍然以jsp+servlet为例,对SqlServer2005数据库进行操作,如下都是基本步骤: 1.连接数据库:2.根据sql语句获取数据库中值:3.将值进行导出操作: 首先,我们来记性数据库的连接,这个相信接触过java的人都不会陌生,我就不赘述了 1 public class DataBase { 2 pri

Python安装和操作EXCEL数据

一.windows下面安装Python 1.安装Python 选择的版本是3.5.2版本.windows下面的Python安装一般是通过软件安装包安装而不是命令行,所以首先要在Python的官方主页上面下载最新的Python安装包.下载地址是:https://www.python.org/downloads/ 下载好后,解压到文件夹中,一直点击下一步就OK了.在安装完成之后,打开控制台,输入“Python”,我们能够看到下面的效果: 因为python.exe文件在 Python 目录下,我们还没

chinacloud大数据新闻

2015年大数据发展八大趋势   (0 篇回复) “数据很丰满,信息很骨感”:Sight Machine想用大数据的方法,打碎两者间的屏障   (0 篇回复) 百度携大数据"圈地"证券业 "BAT"开启互联网金融新战场   (0 篇回复) 码农的春天到了?   (0 篇回复) 浪潮大数据一体机出招 装备科研“最强大脑”   (0 篇回复) 方物软件承担国家“核高基”重大专项研发   (2 篇回复) 2013互联网大会透露的热点与新趋势   (1 篇回复) 大数据从幕

c#教程之通过数据绑定修改数据

通过数据绑定修改数据 "实体框架"提供了与数据库的双向通信通道.前面已经讲述了如何使用"实体框架"获 取数据,现在来看看如何修改获取的信息,并将改动发送回数据库.  26.2.1 更新现有数据 使用一个 ObjectContext 对象获取数据时,根据数据创建的对象位于应用程序的内存缓存中. 为了更改缓存中的对象的值,采取的方式和修改任何普通对象中的值一样--设置它们的 属性.然而,更新内存中的对象不会更新数据库.要在数据库中反映出这个改动(换言之, 将改动&quo