MySQL基本知识梳理
int STDCALL mysql_query(MYSQL *mysql, const char *q):连接上数据库后,将连接上数据库额句柄和执行的SQL语句传入到函数中即可执行该语句。
MYSQL_RES *res;
res = mysql_store_result(MYSQL *mysql); //取回结果集地址
mysql_store_result的返回值是执行sql语句后的结果,返回值为MYSQL_RES类型的指针,该类型是一个结构体;
typedef struct st_mysql_res {
my_ulonglong row_count; // 结果集的行数
unsigned int field_count, current_field; // 结果集的列数,当前列
MYSQL_FIELD *fields; // 结果集的列信息
MYSQL_DATA *data; // 结果集的数据
MYSQL_ROWS *data_cursor; // 结果集的光标
MEM_ROOT field_alloc; // 内存结构
MYSQL_ROW row; // 非缓冲的时候用到
MYSQL_ROW current_row; //mysql_store_result时会用到。当前行
unsigned long *lengths; //每列的长度
MYSQL *handle; // mysql_use_result会用。
my_bool eof; //是否为行尾
} MYSQL_RES;
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result); 表示的是记录集里的一条数据;
unsigned int STDCALL mysql_num_fields(MYSQL_RES *res); 表示的是返回数据有多少列,即多少个字段;
my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res); 表示的是返回数据有多少行,即行数;
连接数据库的并且取得数据库中表数据的程序:
#include <string.h>
#include <stdio.h>
#include <iostream>
#include "mysql/mysql.h"
int main(void)
{
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
mysql_init(&mysql); //初始化MYSQL对象
if(!mysql_real_connect(&mysql, "localhost", "db_user", "db_user", "database", 0,NULL, 0)) {
std::cout << "Failed to connect to Mysql!" << std::endl;
return 0;
} else {
std::cout << "Connected to Mysql success!\n";
}
char *order = "select * from leon";
/*查询,成功则返回0*/
int flag = mysql_real_query(&mysql, order, (unsigned int)strlen(order));
if(flag) {
std::cout << "Query failed!" << std::endl;
return 0;
} else {
std::cout << "Query success!" << std::endl;
}
//mysql_store_result将全部的查询结果读取到
res = mysql_store_result(&mysql);
//mysql_fetch_row检索结果集的下一行
while(row = mysql_fetch_row(res)) {
//mysql_num_fields返回结果集中的字段数目
for(int i = 0; i < mysql_num_fields(res); i++)
{
std::cout << row[i] << '\t';
}
puts("");
}
mysql_close(&mysql);
return 0;
}