1. 程式人生 > 其它 >MySQL使用C語言查詢

MySQL使用C語言查詢

MySQL使用C語言查詢

常用api

MYSQL *mysql_init(MYSQL *mysql)
    功能: 分配或初始化MYSQL物件。
    引數:mysql
    待初始化的MYSQ物件,將物件地址傳入,NULL指標,該函式將分配、初始化、並返回新物件。否則,將初始化物件,並返回物件的地址。
    用法例項:
    MYSQL mysql;
    mysql_init(&mysql); // 或者MYSQL*mysql = mysql_init(NULL);

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
	功能:嘗試與執行在主機上的MySQL資料庫引擎建立連線
	引數:mysql 前面一個函式的返回的mysql例項控制代碼。host 要連線的資料庫的主機,可以是ip地址或主機名。user 表示登入資料庫的使用者名稱,passwd 登入的密碼。db 就是訪問的資料庫。port: mysql的tcp/ip埠預設是3306。unix_socket 表示連線型別。client_flag 暫時為0即可。(一般win下後兩個引數為NULL,0)

int mysql_query(MYSQL *mysql,const char *query)
	功能:根據query查詢語句執行查詢資料庫
	引數: mysql: mysql的例項。query: 查詢語句字串可以是 增刪修查
	返回值: 成功返回0,失敗返回非0

MYSQL_RES *mysql_store_result(MYSQL *mysql)
	功能:得到查詢的結果集,對於成功檢索了資料的每個查詢(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK 		TABLE等),必須呼叫mysql_store_result()或mysql_use_result()
	引數:mysql:前面的mysql例項
	返回值:成功返回MYSQL_RES結構體,該結構體中儲存查詢的結果

unsigned int mysql_num_fields(MYSQL_RES *result)
	引數:前面返回的結果地址;
	返回結果集中的行數。
        
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
	功能:mysql_store_result得到的結果結構中提取一行,並把它放到一個行結構中。
	返回值:下一行的一個MYSQL_ROW結構當資料用完或發生錯誤時返回null

void mysql_free_result(MYSQL_RES *result)
	釋放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等為結果集分配的記憶體。完成對結果集的操作後,必須呼叫mysql_free_result()釋放結果集使用的記憶體。

void mysql_close(MYSQL *mysql)
	關閉前面開啟的連線。

綜上 返回值 若是指標,NULL表示失敗, 其他表示成功

​ 若是整形,0表示成功,其他表示失敗;

示例

#include "mysql.h"
#include<iostream>
using namespace std;

int main(){   
   MYSQL sql;
   mysql_init(&sql);
   MYSQL_ROW row;

   if (mysql_real_connect(&sql, "localhost", "root", "root", "mydatabase", 3306, NULL, 0))  //連線到mysql
	{
		cout << "\n\t-----MySQL已連線----" << endl;
	}
	
	if (!mysql_query(&sql, "select * from student"))   //若查詢成功返回0,失敗返回隨機數
	{
		cout << "\n\t  ----查詢成功----" << endl;
	}
 
	MYSQL_RES * rs = mysql_store_result(&sql);    //將查詢到的結果集儲存到result中
 
	int num = mysql_num_fields(rs);        //將結果集列數存放到num中
 
	while ((row = mysql_fetch_row(rs)))  //遇到最後一行,則中止迴圈
	{
		for (int i = 0; i < num; i++)         //利用for迴圈,輸出該行的每一列
		{
			cout << row[i]<< "\t";    //row是MYSQL_ROW變數,可以當做陣列使用,i為列數
		}
		cout << endl;
	}
	mysql_free_result(rs);     //釋放結果集所佔用的記憶體
	mysql_close(&sql);          //關閉與mysql的連線

   system("pause");
   return 0;
}

g++編譯命令

g++ main.cpp -o main -I D:/compiler/mysql-8.0.27-winx64/include libmysql.dll

需要將lib下的 libmysql.dll檔案放到專案資料夾下;

g++ main.cpp -o main        直接將mian.cpp編譯成main.exe

-L 要連結的庫所在目錄

-l 指定連結時需要的動態庫,隱含命名規則,即在前加lib,在後加.dll確定庫檔名

例:libmysql.dll

-lmysql  或直接用libmysql.dll

-I 要連結的標頭檔案目錄

示例:

g++ main.cpp -o main -I D:/compiler/mysql-8.0.27-winx64/include libmysql.dll