Cocos2d-x資料持久化-修改資料,cocos2d-x資料修改

來源:互聯網
上載者:User

Cocos2d-x資料持久化-修改資料,cocos2d-x資料修改
修改資料時,涉及的SQL語句有insert、update和delete語句,這3個SQL語句都可以帶參數。修改資料的具體步驟如下所示。
(1) 使用sqlite3_open函數開啟資料庫。
(2) 使用sqlite3_prepare_v2函數預先處理SQL語句。
(3) 使用sqlite3_bind_text函數綁定參數。
(4) 使用sqlite3_step函數執行SQL語句。
(5) 使用sqlite3_finalize和sqlite3_close函數釋放資源。
這與查詢資料少了提取欄位資料這個步驟,其他步驟是一樣的。下面我們看看代碼部分。
1、插入備忘錄

NoteDAO.cpp中的NoteDAO::create插入備忘錄的代碼如下:int NoteDAO::create(string pDate, string pContent){//初始化資料庫initDB();sqlite3* db= NULL;string path = dbDirectoryFile();if (sqlite3_open(path.c_str(), &db) != SQLITE_OK) {                   sqlite3_close(db); CCASSERT(false, "DB open failure.");} else {string sqlStr = "INSERT OR REPLACE INTO note (cdate, content) VALUES (?,?)";①sqlite3_stmt *statement;//預先處理過程if (sqlite3_prepare_v2(db, sqlStr.c_str(), -1, &statement, NULL) == SQLITE_OK) {//綁定參數開始sqlite3_bind_text(statement, 1, pDate.c_str(), -1, NULL); ②sqlite3_bind_text(statement, 2, pContent.c_str(), -1, NULL);//執行插入if (sqlite3_step(statement) != SQLITE_DONE) {③CCASSERT(false, "Insert Data failure.");}}sqlite3_finalize(statement); sqlite3_close(db);}return 0;}


上述代碼第①行是插入資料的SQL語句,其中的問號(它是預留位置)就是要綁定的參數。第②行代碼sqlite3_bind_text(statement, 1, pDate.c_str(), -1, NULL)是綁定第一個參數。
第③行代碼中的sqlite3_step(statement)語句執行插入語句,常量SQLITE_DONE表示執行完成。
為了能夠調用NoteDAO中插入備忘錄函數create,我們需要在HelloWorldScene情境中調用。HelloWorldScene.cpp主要代碼如下:
void HelloWorld::OnClickMenu2(cocos2d::Ref* pSender){string currentTime = MyUtility::getCurrentTime();log("%s",currentTime.c_str());NoteDAO::create(currentTime, "歡迎使用MyNote.");}


HelloWorld::OnClickMenu2函數是玩家點擊Insert Data菜單時候回調的函數。其中MyUtility::getCurrentTime()語句是獲得目前時間。
提示  在Win32平台,採用Visual Studio 進行編譯運行時候中文會有一些麻煩!我們需要將原始碼檔案另存新檔Unicode(UTF-8無簽名)格式,可以參考4.2.5一節解決方案,有的時候會有如下編譯錯誤:error C2001: 常量中有分行符號。我們需要在中文字元後面添加一些英文字元,或者“啊”等特殊的中文字元。例如:"歡迎使用MyNote。"這個字串後面是中文句號“。”結尾,編譯的時候就會出現error C2001錯誤,本例中我們採用英文句號“.”結尾,編譯就不會有錯誤,但是會有警告。這種問題只會出現在Win32平台,其它平台沒有問題。為了省事我們測試時候可以不採用中文字元。


2、刪除備忘錄
NoteDAO.cpp中的NoteDAO::remove刪除備忘錄的代碼如下:
i
nt NoteDAO::remove(string pDate){//初始化資料庫initDB();sqlite3* db= NULL;string path = dbDirectoryFile();if (sqlite3_open(path.c_str(), &db) != SQLITE_OK) {sqlite3_close(db);CCASSERT(false, "DB open failure.");} else {string sqlStr = "DELETE  from note where cdate =?";sqlite3_stmt *statement;//預先處理過程if (sqlite3_prepare_v2(db, sqlStr.c_str(), -1, &statement, NULL) == SQLITE_OK) {//綁定參數開始sqlite3_bind_text(statement, 1, pDate.c_str(), -1, NULL);//執行刪除if (sqlite3_step(statement) != SQLITE_DONE) {CCASSERT(false, "Delete Data failure.");}}sqlite3_finalize(statement);sqlite3_close(db);}return 0;}


為了能夠調用NoteDAO中刪除備忘錄函數remove,我們需要在HelloWorldScene情境中調用。HelloWorldScene.cpp主要代碼如下:
void HelloWorld::OnClickMenu3(cocos2d::Ref* pSender){NoteDAO::remove("2008-08-16 10:01:02");}


HelloWorld::OnClickMenu3函數是玩家點擊Delete Data菜單時候回調的函數。


3、修改備忘錄
NoteDAO.cpp中的NoteDAO::modify修改備忘錄的代碼如下:
int NoteDAO::modify(string pDate, string pContent){//初始化資料庫initDB();sqlite3* db= NULL;string path = dbDirectoryFile();if (sqlite3_open(path.c_str(), &db) != SQLITE_OK) {sqlite3_close(db);CCASSERT(false, "DB open failure.");} else {string sqlStr = "UPDATE note set content=? where cdate =?";sqlite3_stmt *statement;//預先處理過程if (sqlite3_prepare_v2(db, sqlStr.c_str(), -1, &statement, NULL) == SQLITE_OK) {//綁定參數開始sqlite3_bind_text(statement, 1, pContent.c_str(), -1, NULL);sqlite3_bind_text(statement, 2, pDate.c_str(), -1, NULL);//執行修改資料if (sqlite3_step(statement) != SQLITE_DONE) {CCASSERT(false, "Upate Data failure.");}}sqlite3_finalize(statement);sqlite3_close(db);}return 0;}


為了能夠調用NoteDAO中修改備忘錄函數modify,我們需要在HelloWorldScene情境中調用。HelloWorldScene.cpp主要代碼如下:
void HelloWorld::OnClickMenu4(cocos2d::Ref* pSender){NoteDAO::modify("2008-08-16 10:01:02", "修改資料。");}


HelloWorld::OnClickMenu4函數是玩家點擊Update Data菜單時候回調的函數。



更多內容請關注國內第一本Cocos2d-x 3.2版本圖書《Cocos2d-x實戰:C++卷》本書交流討論網站:http://www.cocoagame.net
更多精彩視頻課程請關注智捷課堂Cocos課程:http://v.51work6.com
歡迎加入Cocos2d-x技術討論群:257760386歡迎關注智捷iOS課堂公用平台



什是資料持久化?

1.什麼是持久化?本人找了好多文章都沒有找到滿意的答案,最後是從孫衛琴寫的《精通Hibernate:Java對象持久化技術詳解》中,看到如下的解釋,感覺還是比較完整的。摘抄如下:狹義的理解:“持久化”僅僅指把域對象永久儲存到資料庫中;廣義的理解,“持久化”包括和資料庫相關的各種操作。● 儲存:把域對象永久儲存到資料庫。● 更新:更新資料庫中域對象的狀態。● 刪除:從資料庫中刪除一個域對象。● 載入:根據特定的OID,把一個域對象從資料庫載入到記憶體。● 查詢:根據特定的查詢條件,把符合查詢條件的一個或多個域對象從資料庫載入內在存中。2.為什麼要持久化?持久化技術封裝了資料訪問細節,為大部分商務邏輯提供物件導向的API。● 通過持久化技術可以減少訪問資料庫資料次數,增加應用程式執行速度;● 代碼重用性高,能夠完成大部分資料庫操作;● 鬆散耦合,使持久化不依賴於底層資料庫和上層商務邏輯實現,更換資料庫時只需修改設定檔而不用修改代碼。
 
什是資料持久化?為何要持久化?

一直聽人說資料庫持久化,也想學這方面的技術,但是什麼是資料庫持久化呢? 持久資料其實就是將資料儲存到資料庫。 資料持久化就是將記憶體中的資料模型轉換為儲存模型,以及將儲存模型轉換為記憶體中的資料模型的統稱;資料模型可以是任何資料結構或物件模型,儲存模型可以是關聯式模式、XML、二進位流等;cmp和Hibernate只是物件模型到關聯式模式之間轉換的不同實現。只不過物件模型和關聯式模式應用廣泛,所以就會誤認為資料持久化就是物件模型到關係型資料庫的轉換罷了。 “持久化”這個概念是和“暫時”等概念相對的,資料在電腦中有一般有兩個儲存地,記憶體為暫存,因為電源關機就會資料丟失,如果需要反覆使用,就要持久儲存,實現持久化了。 為什麼要持久化? 持久化技術封裝了資料訪問細節,為大部分商務邏輯提供物件導向的API。 1. 通過持久化技術可以減少訪問資料庫資料次數,增加應用程式執行速度; 2. 代碼重用性高,能夠完成大部分資料庫操作; 3. 鬆散耦合,使持久化不依賴於底層資料庫和上層商務邏輯實現,更換資料庫時只需修改設定檔而不用修改代碼。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.