C操作MYSQL資料庫

2021-09-18 08:11:32 字數 4766 閱讀 1215

c語言下使用mysql資料庫提供的api運算元據庫。建議結合檢視api官方文件,開發環境搭建過程如下:

1. 安裝mysql資料庫。(你的專案與mysql lib庫位數必須一致,否則不相容,比如你編寫的程式是32位的就安裝32位的mysql資料庫,64位就安裝64位的mysql資料庫)如何安裝這裡就不介紹了,mysql5.4版本後的都可以,對api沒影響。

2. 在mysql安裝路徑下找到lib檔案中的libmysql.lib、libmysql.dll,複製到專案路徑下,然後同樣把mysql安裝路徑下的include檔案中的mysql.h複製到專案路徑下。在專案標頭檔案中新增庫與標頭檔案:

#include "mysql.h"

#pragma comment(lib,"libmysql.lib")

然後就可以愉快的使用c運算元據庫啦!主要內容如下:

1. 配置與連線資料庫。

2. 寫資料庫

3. 讀資料庫

const char host = "localhost";						//資料庫ip位址,這裡是本地資料庫。

const char name = "root"; //資料庫使用者名稱。

const char passwd = "123"; //資料庫密碼。

const char db = "hgdb"; //資料庫名。

mysql m_sqlcon; //全域性變數,資料庫的控制代碼。

mysql_init(&m_sqlcon); //初始化資料庫。

my_bool mybool = true; //typedef char my_bool,其實就是資料庫的bool型別

mysql_options(&m_sqlcon, mysql_opt_reconnect, &mybool); //開啟自動重連(注意自動重連也是要呼叫mysql_ping()函式才會重連的),mysql_options函式可以配置資料庫各種引數,比如傳輸的包大小,開啟多sql語句執行,讀寫超時時間等,總之可以優化資料庫。

if (mysql_real_connect(&m_sqlcon, host, name, passwd, db, 3306, null, client_multi_statements)) //連線資料庫。3306是資料庫埠號,client_multi_statements為開啟多sql語句執行。

else

}

要說明的都在注釋中了。mysql api提供了兩種方式運算元據庫,一種是mysql_real_query()函式執行sql語句,另外一種就是prepared statement方式了。第一種方式使用起來很簡單,就是把字串型別sql語句作為引數呼叫mysql_real_query()函式執行就行了。prepared statement方式對於頻繁運算元據庫有優勢,具體使用哪種根據實際效率看吧。以下操作都會介紹兩種方式。

第一種方式:

string sql = "insert into `tablename` values(1, '2', ...)";						//就是簡單的sql語句而已,但是這裡有兩點要注意!表名兩邊加上`符號(tab鍵上面的那個鍵也就是1鍵左邊的鍵),字段值是字元或字串型別的話兩邊要加'符號。

if(mysql_real_query(&m_sqlcon, sql.c_str(), sql.length())!=0) //執行sql語句,乙個函式就實現了各種操作。執行成功返回0。

else if(errcode==2006)

else if(errcode==2013)

else if(errcode==2000)

mysql_ping(&m_sqlcon); //檢查資料庫是否斷開,如果斷開就重連並且執行上一條出錯的sql語句。

}

第一種方式太簡單了,直接呼叫mysql_real_query()執行各種sql語句。但是要注意兩點,sql語句中表名兩邊加上`符號(tab鍵上面的那個鍵也就是1鍵左邊的鍵),字段值是字元或字串型別的話兩邊要加』符號。

prepared statement方式

對於頻繁執行的sql語句,繫結到mysql_stmt型別變數中,類似預編譯一樣,其中原理檢視api文件說明吧。首先呼叫mysql_stmt_init()函式申請mysql_stmt型別變數,然後呼叫mysql_stmt_prepare()函式繫結sql語句,需要帶值的sql語句比如insert操作還需要呼叫mysql_stmt_bind_param()函式繫結值。字段值資訊由mysql_bind結構體儲存。過程如下:

mysql_stmt *pstmt = mysql_stmt_init(&m_sqlcon);				//全域性變數。使用完後記得呼叫mysql_stmt_close()釋放!

string stmtsql = "insert into `tablename` values(?,?,?,?)"; //sql語句。

mysql_stmt_prepare(pstmt, stmtsql.c_str(), stmtsql.length()); //繫結sql語句到mysql_stmt變數中,也就是之後再執行該sql操作直接用mysql_stmt變數就行了,不用再重複寫該sql語句了。類似預編譯一樣。

mysql_bind bindstmt[4]; //insert操作,要插入幾個字段值陣列就多大。這裡4個字段值。mysql_bind結構體儲存欄位的一些資訊,比如值,是否為非負,非空等。

char filed1 = 'a';

int filed2 = 1;

float filed3 = 2.2;

char filed4 = "123";

memset(bindstmt, 0, sizeof(bindstmt)); //初始化為0

bindstmt[0].buffer_type = mysql_type_tiny; //char欄位型別。

bindstmt[0].buffer = &filed1; //注意賦的是位址而不是值。

bindstmt[0].buffer_length = sizeof(filed1); //buffer的位元組個數

bindstmt[1].buffer_type = mysql_type_long; //int型別

bindstmt[1].buffer = &filed2;

bindstmt[1].buffer_length = sizeof(filed2);

bindstmt[2].buffer_type = mysql_type_float;

bindstmt[2].buffer = &filed3;

bindstmt[2].buffer_length = sizeof(filed3);

bindstmt[3].buffer_type = mysql_type_string;

bindstmt[3].buffer = filed4;

bindstmt[3].buffer_length = sizeof(filed4);

mysql_stmt_bind_param(pstmt, bindstmt); //繫結字段值到mysql_stmt中。

if(mysql_stmt_execute(pstmt) != 0) //執行sql操作。

else if(errcode==2006)

else if(errcode==2013)

else if(errcode==2000)

mysql_ping(&m_sqlcon);

}

呼叫mysql_stmt_init()申請的mysql_stmt變數用完後記得呼叫mysql_stmt_close()釋放,不要用一次釋放一次,應該等不需要再執行該sql操作時再釋放。有多少需要頻繁操作的sql語句就可以申請多少mysql_stmt變數。這種方式不能在一條語句中執行多sql操作。mysql_bind結構體主要用到的屬性有:

struct mysql_bind

第一種方式

string sql = "select * from `" + tablename + "`";					//sql語句,讀取表中所有資料。

mysql_real_query(&m_sqlcon, sql.c_str(), sql.length()); //執行sql語句。

mysql_res *sqlres = mysql_store_result(&m_sqlcon); //查詢結果集。還可以使用mysql_use_result(&m_sqlcon);

if (sqlres)

}mysql_stmt_bind_result(stmt, rs_bind); //繫結mysql_bind。

while (mysql_stmt_fetch(stmt)) //每次獲取一行。

mysql_free_result(rs_metadata); //釋放結果集。

free(rs_bind); //釋放mysql_bind空間。

}

除了使用api操作mysql外,還可以使用mysql connector/c,具體資訊就去看mysql官方文件吧。

c 操作mysql資料庫

include include stdio.h include winsock.h include mysql.h int main else else sprintf tmp,update s set 商品 s 賣出 d,成交 d,漲跌 d,買進 d,總量 d,漲幅 f,時間 s where s ...

c 操作MySql資料庫

需要mysql.data.dll 資料庫連線 server資料庫位址,user資料庫使用者名稱,password密碼,database資料庫名 string connectstring string.format server user id password database server,use...

C 操作MYSQL資料庫

1.安裝mysql 略2.建立c 控制台程式,新建cpp原始檔,如 sqlconn.cpp 3.在工程專案中屬性 c c 常規 附加包含目錄中新增mysql安裝目錄中的mysql mysql mysql server 5.7 include 4.新增庫目錄 5.新增依賴項 libmysql.lib ...