Cocos2d-x中建立SQLite資料庫

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   ar   使用   for   

我們下邊介紹如何通過SQLite3提供的API實現MyNotes資料庫建立。建立資料庫一般需要經過如下三個步驟。
(1) 使用sqlite3_open函數開啟資料庫。
(2) 使用sqlite3_exec函數執行Create Table語句,建立資料庫表。
(3) 使用sqlite3_close函數釋放資源。
在這個過程中,我們使用了三個SQLite3 API函數,它們都是純C語言函數。在Cocos2d-x中通過C++調用C函數當然不是什麼問題,NoteDAO.cpp中的NoteDAO::initDB()函數可以初始化資料庫,它的相關代碼如下:

[html] view plaincopy

  1. int NoteDAO::initDB()  

  2. {  

  3.     auto sharedFileUtils = FileUtils::getInstance();  

  4.   

  5.   

  6.     string path = dbDirectoryFile();                                            ①  

  7.   

  8.   

  9.     bool isExist = false;  

  10.     isExist = sharedFileUtils->isFileExist(path);                                    ②  

  11.     if (!isExist) {  

  12.         log("NotesList.sqlite3 doesn‘t exist.");  

  13.         return -1;  

  14.     }  

  15.   

  16.   

  17.     sqlite3* db= NULL;  

  18.     if (sqlite3_open(path.c_str(), &db) != SQLITE_OK) {                             ③  

  19.         sqlite3_close(db);                                                  ④  

  20.         CCASSERT(false, "DB open failure.");                                    ⑤  

  21.     } else {  

  22.         char *err;  

  23.         string createSQL = "CREATE TABLE IF NOT EXISTS   

  24.                                 Note (cdate TEXT PRIMARY KEY, content TEXT)";               ⑥  

  25.   

  26.   

  27.         if (sqlite3_exec(db,createSQL.c_str(),NULL,NULL,&err) != SQLITE_OK) {           ⑦  

  28.             sqlite3_close(db);                                              ⑧  

  29.             CCASSERT(false, "Create table failure.");                               ⑨  

  30.         }  

  31.         sqlite3_close(db);                                                  ⑩  

  32.     }  

  33.   

  34.   

  35.     return 0;  

  36. }  



上述代碼initDB()函數是初始化資料庫函數,通過這個函數建立資料庫中的表等對象,每次對資料庫進行CRUD操作時候都會調用它。這個函數中處理流程是先判斷資料庫檔案NotesList.sqlite3是否存在,如果不存在就是初始化,如果已經存在則跳出該函數。其中代碼第①行調用dbDirectoryFile()函數,該函數是我們自己封裝的函數,用來獲得可寫入目錄中資料庫檔案NotesList.sqlite3全路徑。第②行代碼是判斷可寫入目錄中資料庫檔案NotesList.sqlite3是否存在,如果不存在程式跳出該函數。
第③行的代碼是建立資料庫,其中sqlite3_open函數的第一個參數是資料庫檔案的完整路徑,需要注意的是在SQLite3函數中接受的是const char*類型資料,需要將string類型資料使用c_str()函數轉換為const char*類型;第二個參數為sqlite3指標變數db的地址;傳回值是int類型。在SQLite3中,我們定義了很多常量,如果傳回值等於常量SQLITE_OK,則說明建立成功。如果開啟資料庫失敗,我們需要使用第④行代碼sqlite3_close(db)關閉資料庫釋放資源,類似的還有第⑧行和第⑩行代碼。第⑤行代碼使用CCASSERT斷言宏,斷言宏是判斷第一個參數false情況下拋出異常,終止程式運行,並且輸出把第二個參數作為日誌內容輸出。
第⑥行代碼是編寫建表SQL語句,代碼如下:
CREATE TABLE IF NOT EXISTS Note (cdate TEXT PRIMARY KEY, content TEXT)
建表語句CREATE TABLE IF NOT EXISTS可以判斷表是否存在,不存在則建立,存在則不建立。如果使用建表語句CREATE TABLE,在表存在的情況下,這會導致資料拋出異常。類似的還有第⑨行代碼。
第⑦行代碼是執行建表語句,其中語句sqlite3_exec(db,createSQL.c_str(),NULL,NULL,&err)執行第⑥行的建表SQL語句,sqlite3_exec函數的第一個參數是sqlite3指標變數db的地址,第二個參數是要執行的SQL語句,第三個參數是要回調的函數,第四個參數是要回呼函數的參數,第五個參數是執行出錯的錯誤資訊。
為了能夠調用NoteDAO中的初始化資料庫函數initDB(),我們需要在HelloWorldScene情境中調用。HelloWorldScene.cpp主要代碼如下:

[html] view plaincopy

  1. void HelloWorld::OnClickMenu1(cocos2d::Ref* pSender)  

  2. {  

  3.     NoteDAO::initDB();  

  4.     NoteDAO::create("2008-08-16 10:01:02", "初始化資料.");  

  5. }  



HelloWorld::OnClickMenu1函數是玩家點擊Init DB菜單時候回調的函數,在該函數中通過NoteDAO::initDB()語句實現資料庫的初始化。NoteDAO中initDB()函數是靜態函數,需要執行個體化NoteDAO就可以直接調用。下面的NoteDAO::create("2008-08-16 10:01:02", "初始化資料.")語句是調用NoteDAO中的create函數在Note表中插入一條資料。


更多內容請關注國內第一本Cocos2d-x 3.2版本圖書《Cocos2d-x實戰:C++卷》

本書交流討論網站:http://www.cocoagame.net
更多精彩視頻課程請關注智捷課堂Cocos課程:http://v.51work6.com

歡迎加入Cocos2d-x技術討論群:257760386

歡迎關注智捷iOS課堂公用平台


Cocos2d-x中建立SQLite資料庫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.