C++ 串連資料庫的入口和擷取列數、資料

來源:互聯網
上載者:User

標籤:style   blog   io   ar   color   os   使用   sp   for   

這裡不具體放出完整的程式,分享兩個核心函數:

 

由於這裡用到的函數是編譯器自己的庫所沒有的,需要自己下載mysql.h庫或者本地有資料庫,可以去bin找到,放進去。

 

     前提,我自己的測試資料庫是WampServe內建的mysql,曾經試過串連新浪雲的,發現很坑,它裡面的要放代碼進去它空間才能連,不能在本機連,串連的輸入形參全是它規定的常量!

第一個是串連資料庫的:

      行內帶有詳細注釋,皆本人的見解,有理解錯的,求幫指出。

      再作簡單介紹,之所有帶有int傳回型別,是因為一旦串連資料庫失敗就return 0 結束程式。

形參所輸入的分別是 資料庫地址、連接埠,原生連接埠一般是3306、資料庫名、使用者名稱、密碼,調用就能用了。

 1 int DateBase::init(const char* host, int port, const char* database, const char* user, const char* password){ 2     this->mysql_res = NULL;//再次先賦空,原因是init這函數可以在任意函數內使用,為了避免在它之前,有緩衝讀入導致出錯,統一用init前,res為NULL 3     my_bool opt_reconnect=1;//全域的“是”,用於是否開啟一些功能 4  5     mysql_init(&(this->conn));//初始化,這個是連庫必須的函數,傳入conn,把緩衝存進去     6  7     mysql_options(&(this->conn), MYSQL_SET_CHARSET_NAME,(char *)"gbk"); 8     //庫函數,mysql_options設定gbk字元碼,,utf8會導致從庫中取資料顯示出亂碼, 9     //此函數的功能很大,第二個參數就是選擇功能,這裡是選擇設定字元碼,設定字元碼還可以用query命令,只不過它更麻煩。10         11     mysql_options(&(this->conn), MYSQL_OPT_RECONNECT,(char *)&opt_reconnect);12     //設定當mysql異常中斷連線, 看第二個參數,reconne,就是重連。可自動重連,怎樣測掉了呢?13     //下面的real connect函數,連了之後,如果發現有丟失,就會聯絡它14 15     if(!mysql_real_connect(&(this->conn), host, user, password, database, port, NULL, CLIENT_MULTI_STATEMENTS|CLIENT_FOUND_ROWS)) {16         //這個是串連函數,核心之一,選擇性參數很多,這裡最後的是,允許進行其他動作,串連失敗輸出所有資訊17         cout<<host<<user<<password<<database<<port<<endl;18         return 0;19     }20     //設定事務自動認可,1為啟用自動認可21     mysql_autocommit(&(this->conn), 1);22 }

下面這個是在串連資料庫成功後:

特別注意,用這個之前請確認你的mysql裡面有資料表,否則會出錯!

 

      用來擷取資料庫中表的列名,並且在依次、有順序地輸出資料行名後輸出所有資料的函數。

      裡面一樣注釋齊全,還不明白的請留言!有錯的請留言告訴我咯。謝謝!

      請讀者認清裡面的函數,下作簡介:

  mysql_query(,) 這條是執行命令的,成功返回0,第一個參數是連庫緩衝變數,第二個是命令字串;

mysql_store_result(),擷取結果集,形參是連庫緩衝變數,傳回值是mysql res 類型的結果集緩衝變數;

mysql_fetch_fields(),擷取表中的列名字,它返回的是mysql filed類型的數組,用一次就能擷取所有列名,用一迴圈即可輸出所有!

mysql_num_fields(),擷取欄位的數目,就是有多少列;

mysql_fetch_row(),擷取一行的資料,這是一行哦,但是,擷取一行後會自動後移,所以用while最好!傳回值是mysql row類型的變數
 1 void DateBase::show_db(){//總體顯示一遍資料 2     int i,j; 3     MYSQL_FIELD *files; 4     check();//調用chec函數,檢查好使用者表的存在與否 5     //this->mysql_res=mysql_list_tables(&(this->conn),"user_1"); 6     if(mysql_query(&(this->conn),"select * from user_1;")!=0){//選出使用者表的所有資料 * 表示所有 7         cout<<"擷取使用者表資訊出錯!"; 8     } 9     this->mysql_res=mysql_store_result(&(this->conn));10     files=mysql_fetch_fields(this->mysql_res);//獲得欄位名 11     for(i=0;i<mysql_num_fields(this->mysql_res);i++){//mysql_num_fields返回欄位的數目12         cout<<std::left<<std::setw(14);cout<<files[i].name;//對齊輸出,setw函數是對齊用到的13     }14     cout<<"\n";15     while(mysql_row=mysql_fetch_row(this->mysql_res)){//擷取一行的資料16          for(j=0;j<mysql_num_fields(this->mysql_res);j++){17              if(mysql_row[j]==NULL){//防止內容為空白,程式崩潰18                  cout<<"null";19              }20              else21                cout<<std::left<<std::setw(14);cout<<mysql_row[j];22           }23          cout<<"\n";24     }25     mysql_free_result(mysql_res);//這個是釋放記憶體26  }

 

 

C++ 串連資料庫的入口和擷取列數、資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.