C++ 连接数据库的入口和获取列数、数据
这里不具体放出完整的程序,分享两个核心函数:
由于这里用到的函数是编译器自己的库所没有的,需要自己下载mysql.h库或者本地有数据库,可以去bin找到,放进去。
前提,我自己的测试数据库是WampServe自带的mysql,曾经试过连接新浪云的,发现很坑,它里面的要放代码进去它空间才能连,不能在本机连,连接的输入形参全是它规定的常量!
第一个是连接数据库的:
行内带有详细注释,皆本人的见解,有理解错的,求帮指出。
再作简单介绍,之所有带有int返回类型,是因为一旦连接数据库失败就return 0 结束程序。
形参所输入的分别是 数据库地址、端口,本机的端口一般是3306、数据库名、用户名、密码,调用就能用了。
int DateBase::init(const char* host, int port, const char* database, const char* user, const char* password){
this->mysql_res = NULL;//再次先赋空,原因是init这函数可以在任意函数内使用,为了避免在它之前,有缓存读入导致出错,统一用init前,res为NULL
my_bool opt_reconnect=;//全局的“是”,用于是否开启一些功能
mysql_init(&(this->conn));//初始化,这个是连库必须的函数,传入conn,把缓存存进去
mysql_options(&(this->conn), MYSQL_SET_CHARSET_NAME,(char *)"gbk");
//库函数,mysql_options设置gbk字符码,,utf8会导致从库中取数据显示出乱码,
//此函数的功能很大,第二个参数就是选择功能,这里是选择设置字符码,设置字符码还可以用query命令,只不过它更麻烦。
mysql_options(&(this->conn), MYSQL_OPT_RECONNECT,(char *)&opt_reconnect);
//设置当mysql异常断开连接, 看第二个参数,reconne,就是重连。可自动重连,怎样测掉了呢?
//下面的real connect函数,连了之后,如果发现有丢失,就会联系它
if(!mysql_real_connect(&(this->conn), host, user, password, database, port, NULL, CLIENT_MULTI_STATEMENTS|CLIENT_FOUND_ROWS)) {
//这个是连接函数,核心之一,可选参数很多,这里最后的是,允许进行其他操作,连接失败输出所有信息
cout<<host<<user<<password<<database<<port<<endl;
return ;
}
//设置事务自动提交,1为启用自动提交
mysql_autocommit(&(this->conn), );
}
下面这个是在连接数据库成功后:
特别注意,用这个之前请确认你的mysql里面有数据表,否则会出错!
用来获取数据库中表的列名,并且在依次、有顺序地输出列名后输出所有数据的函数。
里面一样注释齐全,还不明白的请留言!有错的请留言告诉我咯。谢谢!
请读者认清里面的函数,下作简介:
mysql_query(,) 这条是执行命令的,成功返回0,第一个参数是连库缓存变量,第二个是命令字符串;
mysql_store_result(),获取结果集,形参是连库缓存变量,返回值是mysql res 类型的结果集缓存变量; mysql_fetch_fields(),获取表中的列名字,它返回的是mysql filed类型的数组,用一次就能获取所有列名,用一循环即可输出所有! mysql_num_fields(),获取字段的数目,就是有多少列; mysql_fetch_row(),获取一行的数据,这是一行哦,但是,获取一行后会自动后移,所以用while最好!返回值是mysql row类型的变量
void DateBase::show_db(){//总体显示一遍数据
int i,j;
MYSQL_FIELD *files;
check();//调用chec函数,检查好用户表的存在与否
//this->mysql_res=mysql_list_tables(&(this->conn),"user_1");
if(mysql_query(&(this->conn),"select * from user_1;")!=){//选出用户表的所有数据 * 表示所有
cout<<"获取用户表信息出错!";
}
this->mysql_res=mysql_store_result(&(this->conn));
files=mysql_fetch_fields(this->mysql_res);//获得字段名
for(i=;i<mysql_num_fields(this->mysql_res);i++){//mysql_num_fields返回字段的数目
cout<<std::left<<std::setw();cout<<files[i].name;//对齐输出,setw函数是对齐用到的
}
cout<<"\n";
while(mysql_row=mysql_fetch_row(this->mysql_res)){//获取一行的数据
for(j=;j<mysql_num_fields(this->mysql_res);j++){
if(mysql_row[j]==NULL){//防止内容为空,程序崩溃
cout<<"null";
}
else
cout<<std::left<<std::setw();cout<<mysql_row[j];
}
cout<<"\n";
}
mysql_free_result(mysql_res);//这个是释放内存
}
C++ 连接数据库的入口和获取列数、数据的更多相关文章
- 如何在MyEclipse中通过hibernate使用jtds驱动连接数据库,并向数据库添加数据的方法
最近学习了下如何在MyEclipse中通过hibernate使用jtds驱动连接数据库,并向数据库添加数据的方法,虽然MyEclipse中自带了连接数据库的方法,我也尝试了下其他方法,如有不当之处请指 ...
- POI中getLastRowNum() 和getLastCellNum()的区别 hssfSheet.getLastRowNum();//最后一行行标,比行数小1 hssfSheet.getRow(k).getLastCellNum();//获取列数,比最后一列列标大1
hssfSheet.getLastRowNum();//最后一行行标,比行数小1 hssfSheet.getRow(k).getLastCellNum();//获取列数,比最后一列列标大1
- CListCtrl获取列数
CListCtrl获取列数 // m_List是一个CListCtrl CHeaderCtrl* pHeaderCtrl = m_List.GetHeaderCtrl();if(pHeaderCtrl ...
- 2016/05/10 thinkphp 3.2.2 ①系统常量信息 ②跨控制器调用 ③连接数据库配置及Model数据模型层 ④数据查询
[系统常量信息] 获取系统常量信息: 如果加参数true,会分组显示: 显示如下: [跨控制器调用] 一个控制器在执行的时候,可以实例化另外一个控制,并通过对象访问其指定方法. 跨控制器调用可以节省我 ...
- php连接数据库、创建数据库、创建数据表
<?php $con = mysql_connect("localhost", "root", "root"); if(!$con){ ...
- 数据库中的记录通过servlet回显到jsp页面中(连接数据库或者查询參照:对数据进行增删改查)
我们常常会用到通过图书的名称来查询图书那么这种话我们也就会使用到从数据库中搜索出数据而且载入到自己的Jsp页面中 这种话我们须要将从数据库中获取到的数据放进响应中然后通过%=request.getAt ...
- 如何解决python连接数据库编码问题(python传数据到mysql乱码)'ascii' codec can't encode _mysql_exceptions.OperationalError: (1366, "Incorrect string value:?
首先描述下问题: 在使用python计算出结果后将结果插入到mysql过程中,报如下错误.原因很好定位就是编码的问题.那么到底是编码哪里出了问题了呢? 报错如上: 排查顺序: 第一:python的编 ...
- VIN码识别/车架号OCR识别:快速占领汽车后市场数据入口
大数据时代,企业在数据入口方面的竞争越来越激烈,这种对于入口级的大数据“争夺战”,让很多企业在数据挖掘和收集的技术方面开始加快更新速度. 在当前IT行业激烈竞争环境之下,对于入口产品的控制成为了大数据 ...
- jsp+servlet+poi导出数据库中的数据
index.jsp: <a href="POIout">简单导出数据</a> <a href="POIoutTemplate"&g ...
随机推荐
- CSS居中demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...
- Jenkins 集成打包和上传 App Store 的冲突
周一下午用 Jenkins 集成打包,遇到了一个很奇怪的问题,之前上传到 APP Store 的时候 Build Settings->“Code Signing Resource Rules P ...
- Android APK瘦身之Android Studio Lint (代码审查)
******** ******** 第一部分: 瘦身内容介绍 ******** ******** 项目新版本的迭代接近尾声, 因为历史累积问题, 导致有很多无效的资源让已经臃肿的APK变得更肿, 因此 ...
- Python之路第一课Day6--随堂笔记(面向对象 )
本节内容: 1. 面向对象编程介绍 2. 为什么要用面向对象进行开发? 3. 面向对象的特性:封装.继承.多态 4. 类.方法 一.面向过程 VS 面向对象 1. 编程范式 编程是 程序 员 用 ...
- PAT Judge
原题连接:https://pta.patest.cn/pta/test/16/exam/4/question/677 题目如下: The ranklist of PAT is generated fr ...
- 安卓学习之--UI控件用法 单选 按钮 下拉框
1.单选 .RadioGroup 可将各自不同的RadioButton ,设限于同一个Radio 按钮组,同一个RadioGroup 组里的按钮,只能做出单一选择(单选题). <RadioGro ...
- 用C语言编写生成小学四则运算程序
使用软件——VS 2015 使用环境——C语言 早在上周我就开始使用C#语言做,由于最后一点问题而放弃,之后用C语言开始做,很顺利,但是也碰到了一些问题,但是通过了百度文库上的一些程序的借鉴和吴阿平同 ...
- The easy way to implement a Red-Black tree
Red-Black trees are notorious for being nightmares of pointer manipulation. Instructors will show th ...
- RPC 的概念模型与实现解析
今天分布式应用.云计算.微服务大行其道,作为其技术基石之一的 RPC 你了解多少?一篇 RPC 的技术总结文章,数了下 5k+ 字,略长,可能也不适合休闲的碎片化时间阅读,可以先收藏抽空再细读:) 全 ...
- 挡不住的好奇心:ASP.NET 5是如何通过XRE实现跨平台的
.NET程序员也有自己的幸福,.NET的跨平台是一种幸福,.NET的开源也是一种幸福,而更幸福的是可以通过开源的.NET了解.NET是如何一步步走向跨平台的,所以幸福是一种过程. 在.NET跨平台的进 ...