MySQL學習筆記_11_Linux下C++/C串連MySQL資料庫(一)

來源:互聯網
上載者:User

Linux 下 C++/C 串連 MySQL 資料庫(一)



一、串連前準備

原材料:Ubuntu12.04LTS

    (已經安裝了MySQL5.5或者更進階版本,新立得軟體包,gcc/g++或者CodeBlosks編譯器)

    安裝了以上的軟體包後,我們可以正常使用MySQL完成資料管理工作,但是很多時候我們需要通過編寫程式訪問MySQL。此時,在程式中需要載入MySQL驅動標頭檔,但是預設這些驅動包是沒有安裝的,因此我們需要在新立得中找到"libmysqld-dev"包並安裝。

    安裝完成之後,在”/usr/include/mysql/”目錄下會有很多相對應的標頭檔,如mysql.h等。

當寫好程式,需要編譯時間:

    1、如果選用的是使用gcc/g++在命令列下完成,則需要加上-lmysqlclient選項。如:

g++ -lmysqlclient mysql_test.cc -o mysqltest

            2、如果選用的是CodeBlocks,則需在構建選項中,將串連庫設為mysqlclient。

開始編譯。


二、標頭檔及相關函數分析

    這篇部落格中所列的函數全部包含在標頭檔<mysql/mysql.h>下,因此,需要在程式編寫開始處,加入一行:

#include <mysql/mysql.h>

1、用CAPI串連MySQL資料庫有兩個步驟:

    1)初始化一個串連控制代碼

    2)建立串連

所用到的函數如下:

MYSQL *mysql_init(MYSQL *connection);// 初始化串連控制代碼//成功返回MySQL結構指標,失敗返回NULLMYSQL *mysql_real_connect(MYSQL *connection,                             const char *server_host,                                                    const char *sql_user_name,                            const char *sql_password,                             const char *db_name,                             unsigned int port_number,                             const char *unix_socket_name,                             unsigned int flags); //建立串連//成功返回MySQL結構指標,失敗返回NULL


2、MySQL串連工作完成之後,需要對MySQL的串連進行釋放

void mysql_close(MYSQL *connection); //關閉串連//參數connection被清空,指標變為無效

3、mysql_options用於設定額外選項,並影響串連行為,但是它只能在mysql_init和mysql_real_connect之間調用 

int mysql_options(MYSQL *connection, enum mysql_option option, const char *argument); //設定串連選項  

option的值為下列四個值之一:

MYSQL_INIT_COMMAND     //串連到MySQL伺服器時將執行的命令,再次串連時將自動再次執行。MYSQL_OPT_CONNECT_TIMEOUT    //連線逾時前的等待秒數MYSQL_OPT_COMPRESS           //網路連接中使用壓縮機制MYSQL_OPT_PROTOCOL     //要使用的協議類型,影視mysql.h中定義的mysql_protocol_type枚舉值之一

4、以上的函數是在假設沒有錯誤的情況下運行,如果資料庫連接過程中出現了錯誤,我們就需要以下兩個函數來處理錯誤資訊:

unsigned int mysql_errno(MYSQL *connection);//返回錯誤碼(0表示為出現錯誤)  char *mysql_error(MYSQL *connection); //返回錯誤資訊,是以NULL作為終結的字串 

5、程式訪問資料庫不只是與資料庫建立串連,更重要的是通過SQL語句的執行查詢或改變資料庫中資料。執行SQL語句可以通過下列函數實現。

int mysql_query(MYSQL *connection, const char *query);

SQL語句分為兩類,返回資料的SQL和不返回資料的SQL(UPDATE、DELETE、INSERT)。

下面我們只介紹不返回資料的SQL

my_ulonglong mysql_affected_rows(MYSQL *connection);//返回查詢受影響的行//對一段SQL語句執行後可以通過調用此函數查看SQL語句執行後,資料庫中資料狀態改變的行數,以此判斷SQL的執行成功與否。

三、執行個體
#include <iostream>#include <fstream>#include <cstdlib>#include <mysql/mysql.h>using namespace std;void mysql_err_function(MYSQL * connection);int main(){//freopen("input.txt","r",stdin);    MYSQL * connection;    connection = mysql_init(NULL);    if (!connection)    {        cout << "mysql_init failed!" << endl;        exit(-1);    }    if (!mysql_real_connect(connection,"localhost","root","123456","test",0,NULL,0))    {        cout << "Connection To MySQL failed!" << endl;        mysql_err_function(connection);    }    cout << "Connection To MySQL Server is Success..." << endl;    string str;    getline(cin,str);    int res = 0;    int affected_count = 0;    while (str != "close" && str != "" && !res)    {        res = mysql_query(connection,str.c_str());        affected_count += mysql_affected_rows(connection);        if (res)        {            if (mysql_errno(connection))            {                cout << "Error " << mysql_errno(connection) << " : "                     << mysql_error(connection) << '\n' << endl;                break;            }        }        getline(cin,str);    }    cout << "Have affected " << affected_count << " rows!" << endl;    mysql_close(connection);    cout << "Connection To MySQL Server is closed..." << endl;    return 0;}void mysql_err_function(MYSQL * connection){    if (mysql_errno(connection))    {        cout << "Error " << mysql_errno(connection) << " : "             << mysql_error(connection) << endl;        exit(-1);    }}

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.