MySQL資料庫相關知識梳理
MySQL基本知識梳理
int STDCALLmysql_query(MYSQL*mysql,constchar*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_ROWSTDCALLmysql_fetch_row(MYSQL_RES*result); 表示的是記錄集裡的一條資料;
unsignedintSTDCALLmysql_num_fields(MYSQL_RES*res); 表示的是返回資料有多少列,即多少個欄位;
my_ulonglongSTDCALLmysql_num_rows(MYSQL_RES*res); 表示的是返回資料有多少行,即行數;
連線資料庫的並且取得資料庫中表資料的程式:
#include<string.h>
#include<stdio.h>
#include<iostream>
#include"mysql/mysql.h"
intmain(void)
{
MYSQLmysql;
MYSQL_RES*res;
MYSQL_ROWrow;
mysql_init(&mysql);//初始化MYSQL物件
if(!mysql_real_connect(&mysql,"localhost","db_user","db_user","database",0,NULL,0)){
std::cout<<"FailedtoconnecttoMysql!"<<std::endl;
return0;
}else{
std::cout<<"ConnectedtoMysqlsuccess!\n";
}
char*order="select*fromleon";
/*查詢,成功則返回0*/
intflag=mysql_real_query(&mysql,order,(unsignedint)strlen(order));
if(flag){
std::cout<<"Queryfailed!"<<std::endl;
return0;
}else{
std::cout<<"Querysuccess!"<<std::endl;
}
//mysql_store_result將全部的查詢結果讀取到
res=mysql_store_result(&mysql);
//mysql_fetch_row檢索結果集的下一行
while(row=mysql_fetch_row(res)){
//mysql_num_fields返回結果集中的欄位數目
for(inti=0;i<mysql_num_fields(res);i++)
{
std::cout<<row[i]<<'\t';
}
puts("");
}
mysql_close(&mysql);
return0;
}