中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

0基礎(chǔ)的怎么轉(zhuǎn)行互聯(lián)網(wǎng)太原seo排名優(yōu)化公司

0基礎(chǔ)的怎么轉(zhuǎn)行互聯(lián)網(wǎng),太原seo排名優(yōu)化公司,嘉興微信網(wǎng)站,泰安房產(chǎn)網(wǎng)網(wǎng)上交易中心文章目錄 C語言訪問Mysql1. 環(huán)境設(shè)置2. mysql接口介紹(1) 初始化mysql_init()(2) 鏈接數(shù)據(jù)庫(kù)mysql_real_connect(3) 下發(fā)mysql命令mysql_query()(4) 獲取執(zhí)行結(jié)果mysql_store_result(5) 釋放結(jié)果集mysql_free_result()(6) 獲取結(jié)果行數(shù)mysql_num_rows(7) 獲取結(jié)果列數(shù)mysql_num…

文章目錄

  • C語言訪問Mysql
    • 1. 環(huán)境設(shè)置
    • 2. mysql接口介紹
      • (1) 初始化mysql_init()
      • (2) 鏈接數(shù)據(jù)庫(kù)mysql_real_connect
      • (3) 下發(fā)mysql命令mysql_query()
      • (4) 獲取執(zhí)行結(jié)果mysql_store_result
      • (5) 釋放結(jié)果集mysql_free_result()
      • (6) 獲取結(jié)果行數(shù)mysql_num_rows
      • (7) 獲取結(jié)果列數(shù)mysql_num_fields
      • (8) 獲取列名mysql_fetch_fields
      • (9) 獲取結(jié)果內(nèi)容mysql_fetch_row
      • (10) 關(guān)閉mysql鏈接mysql_close
    • 3. 測(cè)試代碼

C語言訪問Mysql

1. 環(huán)境設(shè)置

環(huán)境設(shè)置這里我就簡(jiǎn)單介紹一下,參考我mysql環(huán)境安裝的博客:MySQL環(huán)境安裝_Ryujianli的博客-CSDN博客

如果你像我一樣在linux下安裝了mysql,就能在對(duì)應(yīng)的目錄下找到庫(kù)和頭文件

ls /lib64/mysql
ls /usr/include/mysql

在這里插入圖片描述

如果你找不到,可以再安裝一下

yum install mysql-devel

配置好環(huán)境后,直接打開vscode開始測(cè)試,要#include<mysql/mysql.h>引入mysql的頭文件

注意makefile文件的寫法:

mytest:test.ccg++ -o mytest test.cc -L/lib64/mysql -lmysqlclient -std=c++11 
.PHONY:clean
clean:rm -f mytest

測(cè)試代碼:

#include<iostream>
#include<mysql/mysql.h>int main()
{std::cout<<"mysql client version: "<<mysql_get_client_info()<<std::endl;return 0;
}

如果上面代碼能成功運(yùn)行證明你的庫(kù)引入成功

在這里插入圖片描述

2. mysql接口介紹

(1) 初始化mysql_init()

要使用庫(kù),必須先進(jìn)行初始化!

MYSQL * mysql_init(MYSQL *mysql)參數(shù)說明:  mysql設(shè)置為nullptr, 函數(shù)分配,初始化,并返回一個(gè)新的對(duì)象。
返回值:    成功返回一個(gè)MYSQL類型的對(duì)象, 失敗返回nullptr

(2) 鏈接數(shù)據(jù)庫(kù)mysql_real_connect

初始化完畢之后,必須先鏈接數(shù)據(jù)庫(kù),在進(jìn)行后續(xù)操作。(mysql網(wǎng)絡(luò)部分是基于TCP/IP的)

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 clientflag);
參數(shù)說明:mysql: 你創(chuàng)建并初始化好的MYSQL類型的對(duì)象, 即mysql_init的返回值host: 這里使用本地環(huán)回地址,"127.0.0.1"user: 代表數(shù)據(jù)庫(kù)的使用者passwd: userd的密碼db: 代表你要連接的數(shù)據(jù)庫(kù)名稱port: mysql服務(wù)的端口號(hào), 默認(rèn)是3306unix_socket: unix套接字, 設(shè)置為nullptr代表這里是網(wǎng)絡(luò)通信   clientflag: 設(shè)置為0
返回值:成功返回連接成功的MYSQL對(duì)象, 失敗返回nullptr

第一個(gè)參數(shù) MYSQL是 C api中一個(gè)非常重要的變量(mysql_init的返回值),里面內(nèi)存非常豐富有port, dbname, charset等連接基本參數(shù)。它也包含了一個(gè)叫 st_mysql_methods的結(jié)構(gòu)體變量,該變量里面保存著很多函數(shù)指針,這些函數(shù)指針將會(huì)在數(shù)據(jù)庫(kù)連接成功以后的各種數(shù)據(jù)操作中被調(diào)用。mysql_real_connect函數(shù)中各參數(shù),基本都是顧名思意。

建立好鏈接之后,獲取英文沒有問題,如果獲取中文是亂碼:設(shè)置鏈接的默認(rèn)字符集是utf8,原始默認(rèn)是latin1

mysql_set_character_set(myfd, "utf8");

(3) 下發(fā)mysql命令mysql_query()

int mysql_query(MYSQL *mysql, const char *q);參數(shù)說明: 第一個(gè)參數(shù)上面已經(jīng)介紹過q: 代表你要執(zhí)行的sql語句
返回值:成功返回0, 失敗返回非0

(4) 獲取執(zhí)行結(jié)果mysql_store_result

sql執(zhí)行完以后,如果是查詢語句,我們當(dāng)然還要讀取數(shù)據(jù),如果update,insert等語句,那么就看下操作成功與否即可。我們來看看如何獲取查詢結(jié)果: 如果mysql_query返回成功,那么我們就通過mysql_store_result這個(gè)函數(shù)來讀取結(jié)果。原型如下:

MYSQL_RES *mysql_store_result(MYSQL *mysql);

MYSQL_RES的介紹:

  • 該函數(shù)會(huì)調(diào)用MYSQL變量中的st_mysql_methods中的 read_rows 函數(shù)指針來獲取查詢的結(jié)果

  • 。同時(shí)該函數(shù)會(huì)返回MYSQL_RES 這樣一個(gè)變量,該變量主要用于保存查詢的結(jié)果(調(diào)用mysql_store_result函數(shù)時(shí)是把存儲(chǔ)的數(shù)據(jù)轉(zhuǎn)儲(chǔ)到MYSQL_RES中)。

  • 同時(shí)該函數(shù)malloc了一片內(nèi)存空間來存儲(chǔ)查詢過來的數(shù)據(jù),所以一定要使用mysql_free_result() 函數(shù)來釋放,否則會(huì)造成內(nèi)存泄漏。

  • 執(zhí)行完mysql_store_result以后,其實(shí)數(shù)據(jù)都已經(jīng)在MYSQL_RES變量中了。

在這里插入圖片描述

MYSQL_RES叫做結(jié)果集,我們可以把想象成一個(gè)char**類型的,每一小塊空間里存儲(chǔ)的是一條記錄中的某一個(gè)數(shù)據(jù)所以要用一個(gè)char *類型的指針去指向這一個(gè)數(shù)據(jù),一行的數(shù)據(jù)就構(gòu)成一條記錄,一共有多少條記錄就有多少行,每一行都會(huì)有一個(gè)二維指針去指向這一行

(5) 釋放結(jié)果集mysql_free_result()

void mysql_free_result(MYSQL_RES *result)

(6) 獲取結(jié)果行數(shù)mysql_num_rows

my_ulonglong mysql_num_rows(MYSQL_RES *res);

在這里插入圖片描述

(7) 獲取結(jié)果列數(shù)mysql_num_fields

unsigned int mysql_num_fields(MYSQL_RES *res);

(8) 獲取列名mysql_fetch_fields

MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);

(9) 獲取結(jié)果內(nèi)容mysql_fetch_row

MYSQL_ROW其實(shí)是char **,可以當(dāng)成一個(gè)二維數(shù)組來用

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

在這里插入圖片描述

(10) 關(guān)閉mysql鏈接mysql_close

void mysql_close(MYSQL *sock);

另外,mysql C api還支持事務(wù)等常用操作,大家下來自行了解:

my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode);
my_bool STDCALL mysql_commit(MYSQL * mysql);
my_bool STDCALL mysql_rollback(MYSQL * mysql);

3. 測(cè)試代碼

前提:makefile文件的寫法我在環(huán)境設(shè)置部分已經(jīng)說明,在使用此代碼測(cè)試前要為自己創(chuàng)建一個(gè)mysql下的普通賬號(hào)并賦予其對(duì)特定數(shù)據(jù)庫(kù)的所有權(quán)限,在我上一個(gè)博客中:

MySQL用戶管理_Ryujianli的博客-CSDN博客

#include<iostream>
#include<mysql/mysql.h>
#include<string>const std::string host="127.0.0.1";
const std::string user="user_l";
const std::string password="1003898";
const std::string db="conn";
const unsigned int port=3306;int main()
{// std::cout<<"mysql client version: "<<mysql_get_client_info()<<std::endl;MYSQL* my=mysql_init(nullptr);if(nullptr ==my){std::cerr<< "init MySQL error" <<std::endl;return 1;}if(mysql_real_connect(my,host.c_str(),user.c_str(),password.c_str(),db.c_str(),port,nullptr,0)==nullptr){std::cerr<<"connect MySQL error"<<std::endl;return 2;}mysql_set_character_set(my,"utf8");// 增刪改簡(jiǎn)單處理// std::string sql="insert into user (name,age,telephone) values ('張三', 19, '1523467')";// std::string sql="insert into user (name,age,telephone) values ('kitty', 29, '13234567')";// std::string sql="update user set name='Jimmy' where id=2";// std::string sql="delete from user where id=3";// 查的處理std::string sql="select * from user";int n=mysql_query(my,sql.c_str());if(n==0)std::cout<<sql<< " success " <<std::endl;else{std::cout<<sql<< " failed " <<std::endl;return 3;}MYSQL_RES*res=mysql_store_result(my);if(nullptr==res){std::cerr<< "mysql_store_result error" <<std::endl;return 3;}// 全部都是和結(jié)果集有關(guān)的, resint rows=mysql_num_rows(res);int fields=mysql_num_fields(res);std::cout<< "行: "<<rows<<std::endl;std::cout<< "列: "<<fields<<std::endl;// 屬性MYSQL_FIELD*fields_array=mysql_fetch_fields(res);for(int i=0;i<fields;++i){std::cout<<fields_array[i].name<< "\t";}std::cout<< "\n";// 內(nèi)容for(int i=0;i<rows;++i){MYSQL_ROW row= mysql_fetch_row(res);    // char**for(int j=0;j<fields;++j){std::cout<<row[j]<< "\t";    // *(row+j)}std::cout<< "\n";}  std::cout<<fields_array[0].db<<" "<<fields_array[0].table<<std::endl;// std::cout<<"connect success"<<std::endl;mysql_free_result(res);mysql_close(my);return 0;
}
http://www.risenshineclean.com/news/47841.html

相關(guān)文章:

  • 土豆做視頻在線觀看網(wǎng)站網(wǎng)絡(luò)營(yíng)銷策劃包括哪些內(nèi)容
  • 電子商務(wù)概念seo關(guān)鍵詞有話要多少錢
  • 如何做電商網(wǎng)站成都seo的方法
  • 鄭州的做網(wǎng)站公司有哪些好搜搜索
  • 做網(wǎng)站即墨鄭州競(jìng)價(jià)托管公司哪家好
  • 賀卡制作優(yōu)化資訊
  • 榆次建設(shè)局網(wǎng)站普通話手抄報(bào)簡(jiǎn)單又漂亮
  • 個(gè)人網(wǎng)站建站指南他達(dá)那非片能延時(shí)多久
  • php做網(wǎng)站的好處寧波seo外包推廣渠道
  • 購(gòu)物網(wǎng)站圖片的放大怎么做的seo網(wǎng)絡(luò)推廣教程
  • html5網(wǎng)站下載建站模板哪個(gè)好
  • 網(wǎng)絡(luò)營(yíng)銷應(yīng)該這樣做seo優(yōu)化交流
  • 保定企業(yè)網(wǎng)站制作電商數(shù)據(jù)統(tǒng)計(jì)網(wǎng)站
  • 目前流行的網(wǎng)站開發(fā)技術(shù)浙江專業(yè)網(wǎng)站seo
  • 高端網(wǎng)站定制策劃長(zhǎng)沙官網(wǎng)seo技巧
  • 可以做書的網(wǎng)站全國(guó)疫情最新公布
  • 站長(zhǎng)平臺(tái)有哪些交換友情鏈接的方法
  • 談?wù)勀銓?duì)網(wǎng)站建設(shè)有什么樣好的建設(shè)意見做一個(gè)簡(jiǎn)單的網(wǎng)站需要多少錢
  • 一般做網(wǎng)站需要的js有哪些網(wǎng)絡(luò)營(yíng)銷的方法
  • web前端開發(fā)視頻教學(xué)seo排名是什么
  • 真正能約拍的app做好的網(wǎng)站怎么優(yōu)化
  • p2p做網(wǎng)站貴州二級(jí)站seo整站優(yōu)化排名
  • 機(jī)關(guān)事業(yè)單位網(wǎng)站備案谷歌瀏覽器下載
  • ibm網(wǎng)站導(dǎo)航特效代碼信息流廣告投放平臺(tái)
  • 高端做網(wǎng)站哪家好百度一下官網(wǎng)首頁登錄
  • 臺(tái)州網(wǎng)站建設(shè)優(yōu)化深圳seo推廣
  • 金華專業(yè)做網(wǎng)站建站推廣
  • 互聯(lián)網(wǎng)金融網(wǎng)站設(shè)計(jì)百度收錄查詢工具
  • 模型下載網(wǎng)站開發(fā)流程廣州網(wǎng)頁制作
  • 網(wǎng)站建設(shè)月總結(jié)怎么做百度關(guān)鍵詞排名