NO IMAGE

關於mysql的基礎知識可以參考 mysql基礎
首先,需要確保已安裝mysql-server,mysql-client,mysql-devel。

一、常用型別介紹

1. MYSQL

用於定義一個mysql物件,便於後續操作確定要操作的資料庫是哪一個。

MYSQL mysql;  //mysql標記對應某個資料庫

2. MYSQL_ROW

用於定義一個行物件,其內容含有一行的資料。

MYSQL_ROW row;  //row[i]可用於輸出該行第i個欄位的資料

3. MYSQL_FIELD

用於定義一個儲存欄位資訊的物件。

MYSQL_FIELD *field;  //field->name儲存對應欄位名稱

4. MYSQL_RES

用於定義一個儲存資料庫檢索資訊結果的物件。

MYSQL_RES *result;

二、常用函式介紹

其實在操作mysql資料庫時,最常使用的函式有以下幾個:

1. mysql_init()

用於初始化一個MYSQL物件,來連線mysql服務端。

MYSQL *mysql_init( MYSQL *mysql );
//example
MYSQL mysql;
mysql_init( &mysql );

2. mysql_real_connect()

用於連線資料庫

MYSQL *mysql_real_connect (
MYSQL *mysql,   //初始化的MYSQL物件,與mysql_init()對應
const char *host,   //主機地址
const char *user,   //使用者,例如:root
const char *passwd,   //資料庫的密碼
const char *db,   //要連線的資料庫,例如:student
unsigned int port,   //埠,可填0
const char *unix_socket,   //一般為NULL
unsigned long client_flag);  //一般為0
//example
mysql_real_connect( &mysql, "localhost", "root", 
"mypasswd", "student", 0, NULL, 0 );

3. mysql_query()

用於執行mysql命令。其引數應使用c風格字串。

mysql_query( MYSQL *mysql, char * command );
//example
string command = "select * from info";
mysql_query( &mysql, command.c_str() );

4. mysql_store_result()

用於獲取mysql操作的檢索結果。

MYSQL_RES *mysql_store_result(MYSQL *mysql);
//example
MYSQL_RES *result;
result = mysql_store_result( &mysql );

5. mysql_num_rows()

用於獲取結果集的行數。

mysql_num_rows( MYSQL_RES *result );

6. mysql_num_fields()

用於獲取結果集的欄位數。

mysql_num_fields( MYSQL_RES *result );
//example
int row_num;
row_num = mysql_num_fields( result );

7. mysql_fetch_field()

用於獲取下一個欄位的型別。

MYSQL_FIELD* mysql_fetch_field(MYSQL_RES *result);

8. mysql_fetch_row()

從結果集中獲取下一行,結束返回NULL。

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result); 
//example
MYSQL_ROW row;
while( row = mysql_fetch_row( result ), row != NULL ) {
for( int i = 0; i < num; i   ) {
cout << row[i] << "\t\t";
}
cout << endl;
}

9. mysql_fetch_field_direct()

給定欄位序號,返回欄位型別,結束返回NULL。

MYSQL_FIELD* mysql_fetch_field_direct(MYSQL_RES *result, int i); 
//example
int num = mysql_num_fields( result );  //返回欄位個數
for( int i = 0; i < num; i   ) {
field = mysql_fetch_field_direct( result, i );  //返回欄位型別
cout << field->name << "\t\t";  //輸出欄位名
}
cout << endl;

10. mysql_close()

用於關閉連線。

mysql_close( MYSQL *mysql );

三、示例程式碼

#include <iostream>
#include <string>
#include <mysql/mysql.h>
using namespace std;
class MysqlDB {
private:
MYSQL mysql;
MYSQL_ROW row;
MYSQL_RES *result;
MYSQL_FIELD *field;
public:
MysqlDB() {
if( mysql_init( &mysql ) == NULL ) {
cout << "init error, line: " << __LINE__ << endl;
exit(-1);
}
}
~MysqlDB() {
mysql_close( &mysql );
}
void connect( string host, string user, string passwd,  string database ) {
if( !mysql_real_connect( &mysql, host.c_str(), user.c_str(), passwd.c_str(), 
database.c_str(), 0, NULL, 0 ) ) {
cout << "connect error, line: " << __LINE__ << endl;
exit(-1);
}
}
void add();
void print();
};
void MysqlDB::add() {
string id, name, sex, birthday;
do {
cout << "請輸入學生資訊:\n";
cin >> id >> name >> sex >> birthday;
string sql = "insert into info values('"   id   "', '"   name   
"', '"   sex   "', '"   birthday   "');";
mysql_query( &mysql, sql.c_str() );
cout << "是否繼續(y/n): ";
cin >> id;
} while( id == "y" );
}
void MysqlDB::print() {
// string sql = "select * from info where name = '"   name   "';";  //要有''
string sql = "select * from info;";
mysql_query( &mysql, sql.c_str() );
result = mysql_store_result( &mysql );
if( !result ) {
cout << "result error, line : " << __LINE__ << endl;
return ;
}
int num;
num = mysql_num_fields( result );  //返回欄位個數
for( int i = 0; i < num; i   ) {
field = mysql_fetch_field_direct( result, i );  //返回欄位型別
cout << field->name << "\t\t";  //輸出欄位名
}
cout << endl;
while( row = mysql_fetch_row( result ), row ) {
for( int i = 0; i < num; i   ) {
cout << row[i] << "\t\t";
}
cout << endl;
}
}
int main() {
MysqlDB db;
db.connect( "localhost", "root", "niliushall", "student" ); 
db.print();
db.add();
db.print();
return 0;
}

參考:
https://blog.csdn.net/tanswer_/article/details/72796570