學習記錄 Mysql

2021-06-23 02:22:37 字數 2862 閱讀 2736

「mysql++是官方發布的、乙個為mysql設計的c++語言的api,這個api的作用是使工作更加簡單且容易。

mysql++為mysql的c-api的再次封裝,它用stl(standard template language)開發並編寫,並為c++開發程式設計師提供象操作stl容器一樣方便的運算元據庫的一套機制。」——《mysql++使用者手冊》

既然官方說明是更簡單的操作,那看一下這一套api是如何是用的。

———————————下文引自mysql++使用者手冊—————————————————

它的大致用法如下:

1: 開啟連線。 

2: 組成執行查詢。

3: 如果成功則返回結果。

4: 如果失敗則處理錯誤。

每一步均對應mysql++的乙個類。

1.連線物件

每乙個連線物件負責管理乙個mysql伺服器的連線。你起碼需要乙個連線物件進行資料庫事務處理。 

mysql支援客戶端和伺服器有多種不同的資料連線:tcp/ip,unix domain sockets,windows命名管道。 

mysql++的普通連線物件 connection 類可以支援上面的全部連線,只要在 connection::connect() 時指定不同的引數便可。當然,如果開始你就知道連線種類,可以直接使用子類,例如直接使用 tcpconnection 類。

2.查詢物件

通常你可以使用 connection 類物件建立乙個sql查詢物件。 

query 查詢物件使用方式類似乙個c++輸出流,所以你可以像使用 std::out 或者 std::ostringstream 一樣寫入資料。這就是mysql++建立乙個查詢字串時最類似c++的方法。這個庫做了檔案流處理,這樣你可以很容易的建立出正確的sql語句。

query 查詢物件還支援乙個特性,我們稱之為模板查詢(template queries),它用起來就類似c的 printf() 函式。你可以用一些符號標誌插入的變數部分。如果你要進行大量相似的查詢,可以建立乙個模板查詢,然後更換其中的變數即可。 

第三種建立 query 查詢物件的方式是使用ssqls。這個特性允許你建立乙個c++結構,你同樣可以進行insert,replace,update操作,同樣也可以生成 select * from tablename 的查詢,最終將查詢的結果儲存在乙個類似stl容器的ssqlsecs內。

3.結果表

結果表裡的資料都儲存在乙個類似 std::string 的 string 物件中。這個 string 類中有大量簡潔的函式能讓你很方便的將其轉換為c標準資料型別。另外一些mysql++內定義的型別,例如 datetime 型別,你也可以輕鬆的從mysql的datatime 型別直接初始化,mysql++會自動的進行轉換。轉換中如果出現錯誤,你可以設定乙個警告或者丟擲乙個異常,如何處理這種錯誤取決於你如何設定本庫。 

雖然mysql函式返回結果不同,但整體來說,mysql++裡查詢返回型別有以下幾個主要型別:

a)無資料返回的查詢

並不是所有的sql查詢需要返回資料,例如 create table 。這種型別的查詢,將返回乙個特殊的返回值型別:******result 這個返回值會簡單的描述一些查詢的資訊,例如查詢是否成功執行,結果有多少行等。

b)返回mysql++結構型別的查詢

大部分時候,接收乙個結果表的方式是使用 query::store() 函式。這個函式會返回乙個 storequeryresult 物件,這個物件基於 std::vector,它是乙個對rows做了隨機的儲存的容器。每乙個 mysqlpp::row 裡儲存了乙個 std::vector 的 string 物件,每乙個 string 物件都是乙個資料結果。所以,你可以將 storequeryresult 看做乙個二維陣列。例如,你想獲取第5列第2行的資料,你可以這樣寫 result[1][4] ,你同樣可以使用元素單元名進行訪問,例如,result[2][「pricekey」]; 。 

乙個簡單的執行查詢的方式是使用 query::use() ,它會返回乙個 usequeryresult 物件,這個類類似於乙個stl的std::vector 輸入迭代。你可以一次性處理結果表裡的一行。當你不知道結果表內有多少結果的時候,可以迭代遍歷到容器尾。這個特性允許我們獲得更好的記憶體效能,因為查詢出來的結果不用儲存在ram中,這對我們獲得大容量的結果表時很有意義。

c)返回mysql標準結構或自定義結構

使用mysql++的資料結構來提取資料,的確比mysql c api方便,但是你可以定一些自己的c++結構以承接資料庫中的一些自定義資料。這樣的話,就需要你在**裡加入一些原生的sql**。

——————————————基礎用法的使用者手冊引用結束——————————————————

對資料庫的基本操作有兩個類,分別是conn連線類和query請求類。

conn.connect(db,host,user,passwd,port)函式:建立連線。

query.query(sql)函式:執行查詢。

query.execute(sql)函式:執行sql,一般為插入和修改。

query.fetchnext()函式:從查詢後的結果集中取一條記錄。

conn.releaseconnection()函式:釋放連線。

之前看導師**的時候,看到他把這方法自己又封裝了一次,更加簡潔。

現在我用的是導師的那個版本,用起來很舒服。

參考文件

mysql++使用者手冊

mysql學習記錄 MySQL學習記錄 2

in 子查詢 select from student where id in 1,2 not in 不在其中 select from student where id not in 1,2 is null 是空 select from student where age is null is not...

Mysql 學習記錄

本篇部落格主要記錄一些開發中使用的到一些知識點。cdata 這是乙個xml語法 是的所有在cdata中的資料都不會被解析詳細描述參見 cdata語法 concat 函式用於將多個字串連線成乙個字串注意 如有任何乙個引數為null 則返回值為 null。或許有乙個或多個引數。如果所有引數均為非二進位制...

Mysql學習記錄

一 安裝 彷彿做了場夢,mysql從5.7公升級到8了,世界變化真快。安裝時會提示輸入密碼,密碼要記住。安裝好後進到workbench看看,熟悉一下有幾個資料庫和哪些 二 連線 安裝包裡面有mysql shell,不要用這個進行連線。會毀滅你學習的慾望 使用mysql 8.0 command lin...