我們先把初始化控制代碼和斷開控制代碼進行乙個封裝
static mysql*
mysqlinit()
//3.設定字元編碼集
mysql_set_character_set
(connect_fd,
"utf8");
return connect_fd;
}static
void
mysqlrelease
(mysql* mysql)
接下來的實現操作,我們需要借助乙個庫,這個庫是json庫,
大概了解一下json
yum install jsoncpp-devel
以下的操作相關引數都同一使用json的方式
json::value
jsoncpp中最核心的類,json::value
就表示乙個具體的物件,例如我們之前設計的api
為什麼我們要使用json這個庫呢?
其實最大的好處就是方便我們以後進行功能上的擴充套件
json可以跨語言程式設計
實現插入部落格
我們需要把部落格物件傳進去,因為一些特赦字元的原因,我們先進行轉義,然後進行申請空間,這裡使用智慧型指標來幫助我們管理記憶體,我們就不必在考慮其中的釋放問題。最後拼裝sql語句並進行返回值校驗
智慧型指標原理
bool
insert
(const json::value& blog)
return
true
;}
實現查詢所有部落格
因為是獲取所有部落格內容,我們需要乙個返回的結果,blogs
作為輸出型引數,除此之外我們還可以按照標籤來篩選,初始給標籤id預設為空,如果使用者提供標籤則進行篩選,沒有提供則不進行篩選,然後執行sql語句,並判斷是否成功,然後我們還需要對結果集合進行遍歷列印
bool
selectall
(json::value* blogs,
const std::string& tag_id ="")
;// 可以根據 tag_id 來篩選結果
if(tag_id =="")
else
int ret =
mysql_query
(mysql_, sql);if
(ret !=0)
mysql_res* result =
mysql_store_result
(mysql_);if
(result ==
null
)int rows =
mysql_num_rows
(result)
;//把結果集合寫到blogs引數中,返回給呼叫者
for(
int i =
0; i < rows;
++i)
printf
("執行查詢成功\n");
//mysql查詢的結果集合需要記得釋放
mysql_free_result
(result)
;return0;
}
實現查詢單個部落格
我們在檢視單個部落格時,blog
同樣是輸出型引數,根據當前的blog_id
在資料庫中找到具體的內容,部落格內容通過blog引數返回給呼叫者。這回我們只需要拼接一條sql語句即可,然後再去遍歷結果集合就可以。
bool
selectone
(int32_t blog_id, json::value* blog)
;sprintf
(sql,
"select * from blog_table where blog_id = %d"
, blog_id)
;int ret =
mysql_query
(mysql_, sql);if
(ret !=0)
mysql_res* result =
mysql_store_result
(mysql_);if
(result ==
null
)int rows =
mysql_num_rows
(result);if
(rows !=1)
mysql_row row =
mysql_fetch_row
(result);(
*blog)
["blog_id"]=
atoi
(row[0]
);(*blog)
["title"
]= row[1]
;(*blog)
["content"
]= row[2]
;(*blog)
["tag_id"]=
atoi
(row[3]
);(*blog)
["create_time"
]= row[4]
;return
true
;}
實現更新部落格
因為要更新部落格,涉及到有關正文的操作,所以需要先轉義,然後申請空間再由智慧型指標管理
bool
update
(const json::value& blog)
printf
("執行部落格成功\n");
return
true
;}
實現刪除部落格bool
delete
(int blog_id)
;sprintf
(sql,
"delete from blog_table where blog_id=%d"
, blog_id)
;int ret =
mysql_query
(mysql_, sql);if
(ret !=0)
printf
("刪除部落格成功\n");
return
true
;}
對部落格表操作進行單元測試void
testblogtable()
實現新增標籤
這塊我們還是跟部落格表的操作是一樣的,都是拼裝sql語句,然後執行,判斷是否執行成功,列印提示。
bool
insert
(const json::value& tag)
;// 此處 dish_ids 需要先轉成字串(本來是乙個物件,
// 形如 [1, 2, 3]. 如果不轉, 是無法 ascstring)
sprintf
(sql,
"insert into tag_table values(null, '%s')"
,tag[
"tag_name"].
ascstring()
);int ret =
mysql_query
(mysql_, sql);if
(ret !=0)
printf
("插入標籤成功\n");
return
true
;}
實現刪除標籤bool
delete
(int32_t tag_id)
;sprintf
(sql,
"delete from tag_table where tag_id = %d"
, tag_id)
;int ret =
mysql_query
(mysql_, sql);if
(ret !=0)
printf
("插入標籤成功\n");
return0;
}
實現檢視所有標籤bool
selectall
( json::value* tags)
;sprintf
(sql,
"select * from tag_table");
int ret =
mysql_query
(mysql_, sql);if
(ret !=0)
mysql_res* result =
mysql_store_result
(mysql_);if
(result ==
null
)int rows =
mysql_num_rows
(result)
;for
(int i =
0; i < rows;
++i)
printf
("查詢標籤成功!共找到 %d 個\n"
,rows)
;return
true
;}
對標籤操作進行單元測試void
testtagtable()
Bmob後端雲 私人雲資料庫
資料庫的使用非常廣泛,各大語言都存在於資料庫的連線互動,以便資料的操作處理。自己配置資料庫較麻煩且沒必要,個人開發者自己安裝資料庫較佔記憶體,個人不常用,資料庫語句要求掌握學習等原因帶來不便。公司開發則有自己的資料庫。公司規模小些的運營乙個大型資料庫又較繁瑣,雲資料庫 bmob 後端雲是為個人開發者...
多型,封裝,介面,封裝,繼承,資料庫連線和專案模組
我們今天覆習了一下前一周學的知識,主要以概念為主,先說一下多型,封裝,介面這三個概念吧 1.多型的概念 就是用不同的類,實現相同的方法,實現不同的結果 乙個物件在特定的情況下,表現不同的狀態,從而對應不同的屬性和方法 多型有兩種表現形式一種是覆蓋,另一種是過載。父類使用子類的方法。2.封裝的概念 封...
資料庫訪問封裝
專案名稱 dbacess 專案目的 封裝jdbc訪問 專案使用 任意,保障所有包開源 專案當前功能 1.訪問資料庫方法封裝 2.資料庫連線池採用hikaricp 3.配置檔案遵守hikaricp的配置,設定根目錄,以此保障功能多資料庫,多源。4.擴充套件驅動路徑,採用自定義載入器載入驅動 5.新資料...