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

C++连接数据库的入口和获取列数、数据,第1张

概述这里不具体放出完整的程序,分享两个核心函数: 由于这里用到的函数是编译器自己的库所没有的,需要自己下载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为NULL3 my_bool opt_reconnect=1;//全局的“是”,用于是否开启一些功能45 mysql_init(&(this->conn));//初始化,这个是连库必须的函数,传入conn,把缓存存进去67 mysql_options(&(this->conn), MYSQL_SET_CHARSET_NAME,(char *)"gbk");8 //库函数,mysql_options设置gbk字符码,,utf8会导致从库中取数据显示出乱码,9 //此函数的功能很大,第二个参数就是选择功能,这里是选择设置字符码,设置字符码还可以用query命令,只不过它更麻烦。1011 mysql_options(&(this->conn), MYSQL_OPT_RECONNECT,(char *)&opt_reconnect);12 //设置当mysql异常断开连接, 看第二个参数,reconne,就是重连。可自动重连,怎样测掉了呢?13 //下面的real connect函数,连了之后,如果发现有丢失,就会联系它1415 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 else21 cout<<std::left<<std::setw(14);cout<<mysql_row[j];22 }23 cout<<"n";24 }25 mysql_free_result(mysql_res);//这个是释放内存26 }  

这里不具体放出完整的程序,分享两个核心函数:

     前提,我自己的测试数据库是WampServe自带的MysqL,曾经试过连接新浪云的,发现很坑,它里面的要放代码进去它空间才能连,不能在本机连,连接的输入形参全是它规定的常量!

第一个是连接数据库的:

      行内带有详细注释,皆本人的见解,有理解错的,求帮指出。

      再作简单介绍,之所有带有int返回类型,是因为一旦连接数据库失败就return 0 结束程序。

形参所输入的分别是 数据库地址、端口,本机的端口一般是3306、数据库名、@R_419_6964@、密码,调用就能用了。

DateBase::init( * host, port, * database, * user, * ->MysqL_res = NulL; my_bool opt_reconnect=; MysqL_init(&(->conn)); MysqL_options(&(->conn),MysqL_SET_CHARSET_name,( *) MysqL_options(&(->conn),MysqL_OPT_RECONNECT,( *)& (!MysqL_real_connect(&(->conn),host,user,password,database,port,NulL,CLIENT_MulTI_STATEMENTS| cout< MysqL_autocommit(&(->conn), }

下面这个是在连接数据库成功后:

      用来获取数据库中表的列名,并且在依次、有顺序地输出列名后输出所有数据的函数。

      里面一样注释齐全,还不明白的请留言!有错的请留言告诉我咯。谢谢!

      请读者认清里面的函数,下作简介:

 

DateBase::show_db(){ MysqL_FIELD * check(); MysqL_res=MysqL_List_tables(&(this->conn),"user_1"); (MysqL_query(&(->conn),)!=){ cout<< ->MysqL_res=MysqL_store_result(&(-> files=MysqL_fetch_fIElds(->MysqL_res); (i=;i->MysqL_res);i++){ cout<);cout< cout<< (MysqL_row=MysqL_fetch_row(->MysqL_res)){ (j=;j->MysqL_res);j++ (MysqL_row[j]==NulL){ cout<< cout<);cout<< cout<< MysqL_free_result(MysqL_res); } 总结

以上是内存溢出为你收集整理的C++ 连接数据库的入口和获取列数、数据全部内容,希望文章能够帮你解决C++ 连接数据库的入口和获取列数、数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1264172.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存