基于Linux的C++轻量级web服务器/webserver/httpserver——MySQL数据库的使用
MySQL數(shù)據(jù)庫(kù)的使用
常見(jiàn)的服務(wù)器設(shè)計(jì),其結(jié)構(gòu)組成一般都是:I/O處理模塊、業(yè)務(wù)邏輯模塊、數(shù)據(jù)模塊。
我的另一個(gè)項(xiàng)目:chatserver聊天服務(wù)器其設(shè)計(jì)模式也是這樣:使用Muduo處理網(wǎng)絡(luò)I/O,編寫(xiě)業(yè)務(wù)模塊代碼、數(shù)據(jù)代碼和業(yè)務(wù)代碼要能夠?qū)崿F(xiàn)分離。
這個(gè)項(xiàng)目開(kāi)發(fā)的http服務(wù)器支持用戶的【登陸】和【注冊(cè)】業(yè)務(wù)。為了保存用戶的登陸名稱和密碼,采用MySQL數(shù)據(jù)庫(kù)進(jìn)行落地存儲(chǔ)。
MySQL使用介紹
這部分大家自行學(xué)習(xí)吧。簡(jiǎn)單的使用掌握就行,對(duì)數(shù)據(jù)庫(kù)的增刪改查命令要熟悉。書(shū)籍這邊推薦《MySQL必知必會(huì)》,幾天就能學(xué)會(huì)MySQL的基礎(chǔ)使用
看書(shū)的同時(shí),還可以配合牛客網(wǎng)的刷題網(wǎng)站,通過(guò)刷題加深記憶
環(huán)境配置
為了讓這個(gè)項(xiàng)目成功編譯,你需要提前配置好mysql的庫(kù)。
本項(xiàng)目需要安裝mysql-server以及對(duì)應(yīng)的開(kāi)發(fā)包。ubuntu環(huán)境安裝mysql-server和mysql開(kāi)發(fā)包,包括mysql頭文件和動(dòng)態(tài)庫(kù)文件,命令如下:
安裝完成后需要設(shè)置MySQL的登錄用戶和密碼,按下面步驟修改mysql的root用戶密碼為123456:
【step 1】tony@tony-virtual-machine:~$ sudo cat /etc/mysql/debian.cnf [client] host = localhost user = debian-sys-maint 《============== 初始的用戶名 password = Kk3TbShbFNvjvhpM 《=============== 初始的密碼 socket = /var/run/mysqld/mysqld.sock 【step 2】用上面初始的用戶名和密碼,登錄mysql server,修改root用戶的密碼,命令如下: tony@tony-virtual-machine:~$ mysql -u debian-sys-maint -pKk3TbShbFNvjvhpM 命令解釋: -u后面是上面查看的用戶名 -p后面緊跟上面查看的密碼 mysql> update mysql.user set authentication_string=password('123456') where user='root' and host='localhost'; mysql> update mysql.user set plugin="mysql_native_password"; mysql> flush privileges; Query OK, 0 rows affected (0.01 sec) mysql> exit Bye如果用戶名和密碼無(wú)法修改成功,也可以在CSDN上找到對(duì)應(yīng)的解決方法
為了能夠正確運(yùn)行項(xiàng)目中的代碼,還需導(dǎo)入項(xiàng)目要用到的表
導(dǎo)入文件在:thirdparty/httpserver.sql
導(dǎo)入的方法請(qǐng)自行查詢,也是很簡(jiǎn)單的
設(shè)計(jì)方法
對(duì)于網(wǎng)頁(yè)上用戶的登陸和注冊(cè)業(yè)務(wù),從項(xiàng)目業(yè)務(wù)邏輯上分析的話,這個(gè)服務(wù)器需要以下的功能支持:
- 支持POST請(qǐng)求。用戶名和密碼會(huì)通過(guò)POST請(qǐng)求被傳輸?shù)椒?wù)器上。所以,httpconnect模塊要能夠解析出POST請(qǐng)求中攜帶的用戶名和密碼
- 解析得到的用戶名和密碼在MySQL數(shù)據(jù)庫(kù)中進(jìn)行查驗(yàn)。賬號(hào)密碼正確,服務(wù)器回報(bào)登陸成功頁(yè)面;如果錯(cuò)誤也需要告知客戶端。登陸和注冊(cè)業(yè)務(wù)在服務(wù)器端很好區(qū)別,通過(guò)解析URL地址能夠獲知客戶端是在登陸頁(yè)面,還是在注冊(cè)頁(yè)面發(fā)送過(guò)來(lái)的POST請(qǐng)求
MySQL的開(kāi)發(fā)方式
與MySQL數(shù)據(jù)庫(kù)相關(guān)的代碼文件總共有三個(gè):
include/db/database.h
include/db/user.h
include/model/usermodel.h
database.h
這個(gè)頭文件的作用是操作數(shù)據(jù)庫(kù)的,負(fù)責(zé)完成對(duì)數(shù)據(jù)庫(kù)的連接、更新、查詢操作。
連接的數(shù)據(jù)庫(kù)名稱、主機(jī)名等信息,我預(yù)先定義在了文件起始位置。如果你的數(shù)據(jù)庫(kù)設(shè)置和我的不一樣的話,請(qǐng)按照你的配置進(jìn)行修改
// 數(shù)據(jù)庫(kù)配置信息 static std::string server = "127.0.0.1"; static std::string user = "root"; static std::string password = "123456"; static std::string dbname = "webserver";user.h
user類是一個(gè)ORM類。ORM全稱Object Relational Mapping,即對(duì)象關(guān)系映射。這個(gè)類是將我們數(shù)據(jù)庫(kù)中的user表的信息映射到類中。對(duì)于數(shù)據(jù)的操作,我們無(wú)需再去編寫(xiě)原生sql,取代代之的是基于面向?qū)ο蟮乃枷肴ゾ帉?xiě)類、對(duì)象、調(diào)用相應(yīng)的方法等,ORM會(huì)將其轉(zhuǎn)換/映射成原生SQL然后交給database.h中的MYSQL類去執(zhí)行。
usermodel.h
這個(gè)類才算是真正在數(shù)據(jù)庫(kù)中查詢user表的一個(gè)類的。
定義了兩個(gè)方法:
// 在數(shù)據(jù)庫(kù)中新增一個(gè)用戶信息 bool insert(User &usr); // 在數(shù)據(jù)庫(kù)中查找用戶信息 User query(std::string &name);insert方法會(huì)往user表中插入一個(gè)新的用戶信息(賬號(hào)名稱和密碼)。這個(gè)方法是針對(duì)注冊(cè)業(yè)務(wù)使用的
query方法在user表中查詢用戶名為name的信息,返回值是一個(gè)User對(duì)象。如果沒(méi)有找到用戶名,該User對(duì)象的成員信息都是空值。
實(shí)戰(zhàn)使用
具體代碼使用,請(qǐng)查看:src/httprequest.cpp:_getPost()
總結(jié)
以上是生活随笔為你收集整理的基于Linux的C++轻量级web服务器/webserver/httpserver——MySQL数据库的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: html轮播图下面小点,jq轮播图,一组
- 下一篇: 微信小程序云数据库请求数据并将请求到的数