MySQL:使用mysql(Ubuntu)

一、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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、MySQL For Windows安裝: 1. 下載: 上官網下載即可: http://www.mysql.c...
    夕望有你閱讀 1,982評論 0 14
  • 數據庫操作代碼的基本流程 一、mysql接口函數相關 1>初始化一個mysql連接句柄,有了mysql句柄就可以對...
    賦閑閱讀 590評論 0 2
  • 什么是數據庫? 數據庫是存儲數據的集合的單獨的應用程序。每個數據庫具有一個或多個不同的API,用于創建,訪問,管理...
    chen_000閱讀 4,060評論 0 19
  • 1.MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下產品。My...
    黃花菜已涼閱讀 4,600評論 3 60
  • 太多你的樣子, 刻成我回憶的模子。 墨綠的,嫩黃的,淺灰的, 你笑著的樣子,插腰站的樣子, 和著你美美的名字, 放...
    再七年我三十歲閱讀 5,323評論 4 11