標籤: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++ 串連資料庫的入口和擷取列數、資料