c++ 获取mysql查询数据_c++ 从mysql数据库中获取数据 - CSDN
  • C++查询mysql数据库

    2017-01-20 09:52:21
    转自: http://blog.csdn.net/afeiluo/article/details/7756518?locationNum=1 #include ...int main(int argc,char **argv){ MYSQL mysql_conn;... MYSQL_RES *mysql_result;... MYSQL_ROW mysql_ro

    转自:

    http://blog.csdn.net/afeiluo/article/details/7756518?locationNum=1


    #include<stdio.h>
    #include<mysql.h>
    
    int main(int argc,char **argv){
       MYSQL mysql_conn;
       MYSQL_RES *mysql_result;
       MYSQL_ROW mysql_row;
       char execsql[256];
       int f1,f2,num_row,num_col;
       
       if(mysql_init(&mysql_conn)!=NULL)
        {
    
            if(mysql_real_connect(&mysql_conn,"localhost","root","111111","test",MYSQL_PORT,NULL,0)!=NULL)
              {
                  printf("connect success!!!\n");
                  sprintf(execsql,"select * from info");
                  if(mysql_query(&mysql_conn,execsql)==0)
                  {
                     printf("query success!\n");
                     mysql_result=mysql_store_result(&mysql_conn);
                     num_row=mysql_num_rows(mysql_result);
                     num_col=mysql_num_fields(mysql_result);
                     printf("row: %d,col: %d\n",num_row,num_col);
                        for(f1=0;f1<num_row;f1++)
                           {
                              mysql_row=mysql_fetch_row(mysql_result);
                                for(f2=0;f2<num_col;f2++)
                                  {
                                    printf("[Row %d,Col %d]==>[%s]\n",f1,f2,mysql_row[f2]);
                                  }
                           }
                 }else
                  {
                     printf("query error!!!\n");
                  }
            }else
              {
                 printf("connect failed\n");
              }
      }else
         {
            printf("initial failed\n");
         }
         mysql_free_result(mysql_result);
         mysql_close(&mysql_conn);
         return 0;
    }
    
    
    
    


    展开全文
  • int mysql_query(MYSQL* mysql, const char* query) //查询函数,成功返回零,否则返回错误类型非零值。 • • const char* mysql_error(MYSQL* mysql) //返回最近一次调用失败的错误消息(返回的是字符串消息) ...

    int mysql_query(MYSQL* mysql, const char* query) //查询函数,成功返回零,否则返回错误类型非零值。  
    •   
    • const char* mysql_error(MYSQL* mysql) //返回最近一次调用失败的错误消息(返回的是字符串消息)  
    •   
    • unsigned int mysql_errno(MYSQL* mysql) //返回最近一次调用失败的错误代号(返回的是数字代号)  
    •   
    • MySQL_RES* mysql_store_result(MYSQL* mysql) //将数据库中查询(mysql_query)得到的结果(集合)存放在MySQL_RES结构中
    • 
    
    • MySQL_RES* mysql_use_result(MYSQL* mysql) //将数据库中查询(mysql_query)初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据
    
    • 
    
    • unsigned int mysql_num_fields(MYSQL_RES* res) //返回结果集中的列的数目  
    •   
    • MYSQL_ROW* mysql_fetch_row(MYSQL_RES* res) //返回结果集(MYSQL_RES)的当前行的结果  
    •   
    • unsigned int mysql_num_rows(MYSQL_RES* res) //返回结果集中的行的数目  
    •   
    • unsigned long* mysql_fetch_lengths(MYSQL_RES* res) //返回结果集中各列的长度(可用于字符串拷贝,代替strlen函数)  
    •   
    • void mysql_close(MYSQL* mysql) //数据库使用完毕之后应该进行关闭 
    


    展开全文
  • 二、利用C++MySQL中存取数据的基本思路: 以读取数据为例: 1)第一步,要将你的C++程序与Mysql连接起来,这里要用到函数mysql_real_connect() 2)第二步,执行查询语句,这里要用到函数mysql_query() 3)查询语句...

    一、添加库和头文件,由于各个IDE或编译器添加的方式都不同,在这里不做介绍

     

    二、利用C++在MySQL中存取数据的基本思路:

    以读取数据为例:

    1)第一步,要将你的C++程序与Mysql连接起来,这里要用到函数mysql_real_connect()

    2)第二步,执行查询语句,这里要用到函数mysql_query()

    3)查询语句查询到的结果,称为结果集,第三步就是要将结果集中的所有数据,存放在一个变量A中,类型为MYSQL_RES

    注意:这个变量中存放的数据,是以“行”和“列”为结构的,也就是一整个表。

    例如:

    身份证号 姓名 性别 余额
    1111 Mike 50
    2222 John 30

    4)虽然所有数据都存放进了上一步的变量A中,但你还不能把A作为一个整体输出到屏幕上,而需要另一个变量B,类型为MYSQL_ROW,变量B类似一个一维数组,一次只能储存一行变量A中的数据,而下标[ ]表示列,假设变量B当前储存了变量A中的第一行,则B[2]就是指这一行的第二列,也就是Mike,将变量A中的一行赋给变量B的函数叫做mysql_fetch_row(),而为了将变量B中储存的数据全部输出到屏幕,则需要用到循环

    5)最后用完了,要释放内存,并关闭和数据库的连接。

     

    实际上,还有一个最重要的变量,类型为MYSQL(从类型的名字就可以看出来很重要),是必须在第一步之前就声明的,试想,C++程序与Mysql这两个本来毫无关联的东西,是怎么联系起来的呢?如果C++程序在mysql内部,有一个“通信兵”,这个“通信兵”在C++连接mysql时承担重要的作用。而变量A又是怎么储存查询得到的结果集的呢,这也需要这个“通信兵”先在mysql内找到这个结果集的地址,再通过一个函数,mysql_store_result(),把结果集的地址告诉这个函数,让这个函数把这个地址储存的值(也就是结果集),赋给变量A。

     

    三、类型和api介绍

    类型:

    MYSQL:该结构代表1个数据库连接的句柄。几乎所有的MySQL函数均使用它。

    MYSQL_RES:该结构代表返回行的查询结果(例如SELECT查询语句)。在本节的剩余部分,将查询返回的信息称为“结果集”。(也就是前面提到的变量A)

    MYSQL_ROW:这是1行数据的“类型安全”表示,行是通过调用mysql_fetch_row()MYSQL_RES型变量中获得的。(也就是前面提到的变量B)

    例如定义一个MYSQL_RES和一个MYSQL_ROW变量,并将MYSQL_RES中的一行赋给MYSQL_ROW变量

    MYSQL_RES *result;
    MYSQL ROW row;
    
    //.....为result赋值部分省略
    
    row = mysql_fetch_row(result);
    //每成功调用一次mysql_fetch_row(),就滑向下一行,若到达最后一行,则返回NULL
    //所以下次调用mysql_fetch_row(result)时,就是将下一行赋给一个MYSQL_ROW变量

    api:

    mysql_init():用于初始化MYSQL变量

    MYSQL ceshi;
    mysql_init(&ceshi);

    mysql_real_connect():连接MYSQL,有8个参数,

    第一个参数是MYSQL变量的地址,

    第二个参数是主机名或IP地址,如果“host”是NULL或字符串"localhost"或“127.0.0.1”,连接将被视为与本地主机的连接,

    第三个参数是MySQL登录ID

    第四个参数是用户的密码

    第五个参数是数据库名称

    第六个参数是TCP/IP连接的端口号

    第七个参数一般为NULL,不需要了解

    第八个参数一般为0,不需要了解

    例如:

    mysql_real_connect(&ceshi, "127.0.0.1", "root", "123", "db", 3306, NULL, 0)

    mysql_query():向数据库发送查询语句

    第一个参数为MYSQL变量的地址,第二个参数为"查询语句"

    例如:

    mysql_query(&ceshi, "SELECT * FROM movie");

    mysql_store_result():将mysql_query()查询到的结果集,赋给MYSQL_RES变量

    只有一个参数,为MYSQL变量的地址

    例如:

    result = mysql_store_result(&ceshi);

     

    mysql_fetch_row():将MYSQL_RES变量中的一行赋给MYSQL_ROW变量,当重复调用mysql_fetch_row()时,将逐个获取结果集的行,到最后一行后返回NULL

     

    mysql_num_fields():获取结果集中的列数,返回值为整型

     

    下面是实践:

    #include <iostream>
    #include <mysql.h>
    using namespace std;
    
    int main()
    {
    	MYSQL ceshi; 
    
    	mysql_init(&ceshi);   //初始化MYSQL变量
    
    	MYSQL_RES *result; 
    
    	MYSQL_ROW row;
    
    	int num;        //用来存放结果集列数
    
    	int i;          
    
    
    
    	if (mysql_real_connect(&ceshi, "127.0.0.1", "root", "123", "cardinfo", 3306, NULL, 0))  //连接到mysql
    	{
    		cout << "\n\t-----MySQL已连接----" << endl;
    	}
    	
    	if (!mysql_query(&ceshi, "SELECT * FROM vips"))   //若查询成功返回0,失败返回随机数
    	{
    		cout << "\n\t  ----查询成功----" << endl;
    	}
    
    	result = mysql_store_result(&ceshi);    //将查询到的结果集储存到result中
    
    	num = mysql_num_fields(result);        //将结果集列数存放到num中
    
    	while ((row = mysql_fetch_row(result)))  //遇到最后一行,则中止循环
    	{
    		for (i = 0; i < num; i++)         //利用for循环,输出该行的每一列
    		{
    			cout << row[i]<< "\t";    //row是MYSQL_ROW变量,可以当做数组使用,i为列数
    		}
    		cout << endl;
    	}
    	mysql_free_result(result);     //释放结果集所占用的内存
    	mysql_close(&ceshi);          //关闭与mysql的连接
        
    }
    展开全文
  • 他提供了数据的长度,可以包含'\0'这样的字符 而对于第二种接口,如果中间出现类似的'\0'字符,就直接认为字符串结束 //可能会出现 Commands out of sync; you can't run this command now. 这是因为调用了接口之后...

    执行SQL语句

    提供了两种接口

    如果有包含特殊字符,要以第一个来。他提供了数据的长度,可以包含'\0'这样的字符
    而对于第二种接口,如果中间出现类似的'\0'字符,就直接认为字符串结束
    //可能会出现 Commands out of sync; you can't run this command now. 这是因为调用了接口之后没有进行获取结果集和清理结果集的操作。
    int mysql real_query(MYSQL *mysql, const char*stmt_str, unsinged long length)
    
    //下面这个接口不能有二进制数据
    int mysql_query(MYSQL *mysql, const char*stmt_str)
    

    获取结果集:MYSQL_RES

    两种接口

    在后续的处理中,希望能够通过API去对MYSQL_RES结构体内的数据进行访问,这样一来对数据的访问更加安全,二来也是考虑到线程安全的问题

    //这个接口只是说要开始读了,但不是真实地读。真正地操作在遍历结果集的时候进行,因此速度更快
    MYSQL_RES *mysql_use_result(MYSQL *mysql)
    
    //这个接口在使用的使用时真的在读。在使用的时候需要考虑缓冲的大小,内存是有限的,不能无限读
    MYSQL_RES *mysql_store_result(MYSQL *mysql)
    
    //在缓冲大小上面有max_allowed_packet,默认是64MB
    max_allowed_packet
    //可以使用mysql_options来更改,关键字是
    MYSQL_OPT_MAX_ALLOWED_PACKET
    

    遍历和清理结果集

    unsigned long *mysql_fetch_lengths(MYSQL_RES *result)
    MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
    void mysql_free_result(MYSQL_RES *result)
    
    • unsigned long *mysql_fetch_lengths(MYSQL_RES *result)返回一个数据,知道每一列数据的长度
    • MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)读出来的信息都是以字符串的形式,包括int。

    代码汇总

    //初始化mysql上下文
    MYSQL mysql;
    //单线程模式 mysql_init自动调用 mysql_library_init 线程不安全
    mysql_init(&mysql);
    const char *host = "127.0.0.1";
    //const char *host = "192.168.0.203";
    const char *user = "root";
    const char *pass = "0.0294";
    const char *db = "mysql";		//数据库名称
    if (!mysql_real_connect(&mysql,host, user, pass, db, 3306, 0, 0))
    {
    	cout << "mysql connect failed!" << mysql_error(&mysql) << endl;
    }
    else
    {
    	out << "mysql connect success!" << endl;
    }
    
    //user select * from user
    // 1 执行SQL语句
    const char *sql = "select * from user";
    // mysql_real_query  sql语句中可以包含二进制数据
    // mysql_query sql语句中只能是字符串
    // 0返回表示成功 
    int re = mysql_real_query(&mysql, sql, strlen(sql));
    
    // Commands out of sync; you can't run this command now 
    // 执行sql语句后,必须获取结果集并且清理
    // re = mysql_query(&mysql, sql);
    	
    if (re != 0)
    {
    	cout << "mysql_real_query faied! "<< sql<<" " << mysql_error(&mysql) << endl;
    }
    else
    {
    	cout << "mysql_real_query success! " << sql << endl;
    }
    
    //2 获取结果集
    
    // mysql_use_result 不实际读取数据
    //MYSQL_RES* result = mysql_use_result(&mysql);
    //mysql_store_result 读取所有数据,注意缓存大小 MYSQL_OPT_MAX_ALLOWED_PACKET 默认 64M
    MYSQL_RES* result = mysql_store_result(&mysql);
    if (!result)
    {
    	cout << "mysql_use_result faied! "  << mysql_error(&mysql) << endl;
    }
    
    //3 遍历结果集
    MYSQL_ROW row;
    while (row = mysql_fetch_row(result))	//获取行
    { 
    	unsigned long * lens = mysql_fetch_lengths(result);
    
    	cout<< lens[0] << "[" << row[0] << "," << row[1] << "]" << endl;
    }
    
    //清理结果集
    mysql_free_result(result);
    
    mysql_close(&mysql);
    mysql_library_end();
    
    展开全文
  • 关于C++读取mysql字段获取得到的类型: 因为最近在做mysql的方面的编程。 当然是简单的连接, 发送sql请求之类的。 用mysql_query(), mysql_store_result(), mysql_fetch_rows()函数,获得每一行的数据, 进而...
  • 这里给出获取表的结构的API。把表的字段描述作为列的形式,动态地显示。 在前面的mysql的连接中,提到一个参数是是否返回表的结构信息。可以通过mysql_options来关闭。使用的关键字为: MYSQL_OPT_OPTIONAL_...
  • 后来参考别人的博客,找到了向数据库中写数据C++代码#include&lt;mysql.h&gt; #include&lt;iostream&gt; #include&lt;string&gt; #include&lt;winsock.h&gt; #include&lt;...
  • C++使用mysql判断select查询结果是否为空/mysql_query返回值问题 MYSQL sqlcon; string str = "SELECT * FROM dt_user where user =.........." if (!mysql_query(&(this->sqlcon), str) { return true; ...
  • 在写项目时需要用到mysql数据库,使用select查询查询结果中文全部变为问号,但是在Sql中查询结果正常, 解决方案: MYSQL *my_fd = mysql_init(NULL); ... msyql_query(my_fd, "set names utf8"); //...
  • c++访问mysql获得数据中文显示为“?”的问题
  • c++操作mysql - 查询

    2010-10-15 19:32:00
    mysql的执行和查询都是使用一下2个接口: 1. mysql_query(MYSQL* mysql, const char* sql);2. int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length);一下就分别描述这两个函数:1. ...
  • 通常C++链接mysql你每次都需要转换数据,传指针,传大小等一系列复杂操作,是不是顺序很混乱,过程很繁杂。mysql也为你提供了另外一种方法,那就是MYSQL_BIND。将数据操作统一化,统一麻烦化。mysqlbind是一个结构体...
  • 这个教程会教你搭建安装MySQL Connector/C++ driver的要点和步骤,以一个简单的连接MySQL的例子,从MySQL获取数据并对其进行插入(数据)操作。因为重点在于从C++程序连接数据库,所以本文档假设MySQL已经运行并且...
  • MySQL数据库中,表的主键是每条数据的唯一标识,一般都设为自动增长,在执行插入语句时不用显式说明主键的值。 但在一些情况下,比如两个表之间形成主键和外键的关联,父表插入一条数据后,子表要相应地插入几条...
  • c++获取系统的时间后,发现时间的格式是int型,并且我们需要的格式是类似2015-07-24 15:55:03这种类型的格式,为此将这些int型的年月日时分秒转换为string,而MySQL中datetime型的格式为'2015-07-24 15:55:03',...
  • VS2017 用的 connector/c++ 连接mysql数据库 向mysql数据库中存储数据时,中文会乱码,mysql报错,求助各位大佬
  • 安装好MySQL8版本后,在安装目录会有mysql C++连接的头文件,静态库和动态库。如下图: 用VS2017新建C++控制台程序,根据安装的mysql是x86还是x64, 在项目属性中配置 包含mysql头文件目录:C:\Program Files\...
1 2 3 4 5 ... 20
收藏数 27,196
精华内容 10,878
关键字:

c++ 获取mysql查询数据