私人部落格定製 封裝資料庫介面

2021-09-29 12:23:55 字數 4683 閱讀 6956

我們先把初始化控制代碼和斷開控制代碼進行乙個封裝

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::valuejsoncpp中最核心的類,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.新資料...