一、MySQL安裝
(一)安裝mysql服務端
sudo apt-get install mysql-server
(二)安裝圖形開發界面
sudo apt-get install mysql-workbench
(三)安裝mysql開發包
sudo apt-get install libmysqlclient-dev
二、API
(一)MYSQL
該結構代表1個數據庫連接的句柄。幾乎所有的MySQL函數均使用它。
(二)MYSQL_RES
該結構代表返回行的查詢結果(SELECT, SHOW, DESCRIBE,EXPLAIN)。
(三)MYSQL_ROW
這是1行數據的“類型安全”表示。它目前是按照計數字節字符串的數組實施的。(如果字段值可能包含二進制數據,不能將其當作由Null終結的字符串對待,這是因為這類值可能會包含Null字節)。行是通過調用mysql_fetch_row()獲得的。
(四)MYSQL_FIELD
該結構包含關于字段的信息,如字段名、類型和大小。通過重復調用mysql_fetch_field(),可為每個字段獲得MYSQL_FIELD結構。字段值不是該結構的組成部份,它們包含在MYSQL_ROW結構中。
(五)MYSQL_FIELD_OFFSET
這是MySQL字段列表偏移量的“類型安全”表示(由mysql_field_seek()使用)。偏移量是行內的字段編號,從0開始。
三、mysql常用API
(一)mysql_init()
- 語法:
MYSQL *mysql_init(MYSQL *mysql)
-
描述:
分配或初始化與mysql_real_connect()相適應的MYSQL對象。如果mysql是NULL指針,該函數將分配、初始化、并返回新對象。否則,將初始化對象,并返回對象的地址。如果mysql_init()分配了新的對象,當調用mysql_close()來關閉連接時。將釋放該對象。 -
返回值:
初始化的MYSQL*句柄。如果無足夠內存以分配新的對象,返回NULL。
(二)mysql_real_connect()
- 語法:
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_real_connect()嘗試與運行在主機上的MySQL數據庫引擎建立連接。在你能夠執行需要有效MySQL連接句柄結構的任何其他API函數之前,mysql_real_connect()必須成功完成。關閉連接。
如果“port”不是0,其值將用作TCP/IP連接的端口號。
如果unix_socket不是NULL,該字符串描述了應使用的套接字或命名管道。
注意:“host”參數決定了連接的類型。client_flag的值通常為0。 -
返回值:
如果連接成功,返回MYSQL*連接句柄。如果連接失敗,返回NULL。對于成功的連接,返回值與第1個參數的值相同。
(三)mysql_real_query()
- 語法:
int mysql_real_query(
MYSQL *mysql,
const char *query,
unsigned long length
)
-
描述:
執行由“query”指向的SQL查詢,它應是字符串長度字節“long”。
正常情況下,字符串必須包含1條SQL語句,而且不應為語句添加終結分號(‘;’)或“\g”。如果允許多語句執行,字符串可包含由分號隔開的多條語句。對于包含二進制數據的查詢,必須使用mysql_real_query()而不是mysql_query()。 -
返回值:
如果查詢成功,返回0。如果出現錯誤,返回非0值。
(四)mysql_store_result()
- 語法:
MYSQL_RES *mysql_store_result(MYSQL *mysql)
-
描述:
對于成功檢索了數據的每個查詢(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必須調用mysql_store_result()或mysql_use_result() 。mysql_store_result()將查詢的全部結果讀取到客戶端,分配1個MYSQL_RES結構,并將結果置于該結構中。調用mysql_num_rows()可以找出結果集中的行數。可以調用mysql_fetch_row()來獲取結果集中的行,或調用mysql_row_seek()和mysql_row_tell()來獲取或設置結果集中的當前行位置。 -
返回值:
具有多個結果的MYSQL_RES結果集合。如果出現錯誤,返回NULL。
(五)mysql_use_result()
- 語法:
MYSQL_RES *mysql_use_result(MYSQL *mysql)
-
描述:
mysql_use_result()將初始化結果集檢索,但并不像mysql_store_result()那樣將結果集實際讀取到客戶端。它必須通過對mysql_fetch_row()的調用,對每一行分別進行檢索。這將直接從服務器讀取結果,而不會將其保存在臨時表或本地緩沖區內,與mysql_store_result()相比,速度更快而且使用的內存也更少。使用mysql_use_result()時,必須執行mysql_fetch_row(),直至返回NULL值。 -
返回值:
具有多個結果的MYSQL_RES結果集合。如果出現錯誤,返回NULL。
(六)mysql_fetch_row()
- 語法:
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
-
描述:
檢索結果集的下一行。如果行中保存了調用mysql_fetch_row()返回的值,將按照row[0]到row[mysql_num_fields(result)-1],訪問這些值的指針。 -
返回值:
下一行的MYSQL_ROW結構。如果沒有更多要檢索的行或出現了錯誤,返回NULL。
(七)mysql_free_result()
- 語法:
void mysql_free_result(MYSQL_RES *result)
-
描述:
釋放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等為結果集分配的內存。完成對結果集的操作后,必須調用mysql_free_result()釋放結果集使用的內存。 -
返回值:
無 。
(八)mysql_error()
- 語法:
const char *mysql_error(MYSQL *mysql)
-
描述:
對于由mysql指定的連接,對于失敗的最近調用的API函數,mysql_error()返回包含錯誤消息的、由Null終結的字符串
如果成功,,所有向服務器請求信息的函數均會復位mysql_error()。 -
返回值:
返回描述錯誤的、由Null終結的字符串。如果未出現錯誤,返回空
字符串。
(九)mysql_close()
- 語法:
void mysql_close(MYSQL *mysql)
-
描述:
關閉前面打開的連接。如果句柄是由mysql_init()或mysql_connect()自動分配的,mysql_close()還將解除分配由mysql指向的連接句柄。 -
返回值:
無 。
四、一個簡單的C++程序
#include <mysql/mysql.h>
#include <iostream>
using namespace std;
MYSQL *conn;MYSQL_RES *res;MYSQL_ROW row;
int main(int argc,char **argv)
{
const char *sever = "localhost"; //主機
const char *user = "root"; //用戶名
const char *password = "XXXXXX"; //用戶密碼
const char *database = "database_name"; //數據庫名稱
conn = mysql_init(NULL);
if(!mysql_real_connect(conn,sever,user,password,database,0,NULL,0))
{
cout << "connect error" << endl;
return 0;
}
mysql_set_character_set(conn,"utf8");
if(mysql_query(conn,"select * from emp"))
{
cout << "query error" << endl;
return 0;
}
//res = mysql_store_result(conn);
res = mysql_use_result(conn);
while((row = mysql_fetch_row(res)) != NULL)
{
cout << row[0] << '\t' << row[1] << '\t' << row[2] << '\t'
<< row[3] << '\t' << row[4] << endl;
}
mysql_free_result(res);
mysql_close(conn);
return 0;
}
顯示結果:
顯示結果.png