標籤:
概述
在Cocos2d-x中,簡單資料存放區,可以使用UserDefault。那麼如何儲存大量,不規則的資料?我們可以使用SQLite資料庫儲存資料。SQLite是使用非常廣泛的嵌入式資料庫,它有小巧 、高效、跨平台、開源免費和易操作的特點。
SQLite資料庫是使用C語言來編寫的,那麼在Cocos2d-x使用SQLite也是得心應手。
準備
首先建立一個Cocos2d-x v3.x的helloworld工程,我們將以該工程作為SQLite整合與用法的實戰工程。
開啟終端,使用如下命令建立工程:
cocos new HelloWorld -p com.your_company.HelloWorld -l cpp
按照上面的操作,我們建立了一個Cocos2d-x v3.x的HelloWorld工程。
iOS/Mac
iOS/Mac的系統庫內建sqlite庫,我們只需添加libsqlite3.0.dylib庫即可。
Android
Android系統沒有內建sqlite庫,我們需要手動添加。
1.下載sqlite包
:http://www.sqlite.org/download.html 下載後,在項目中匯入sqlite3.c和sqlite3.h兩個檔案即可。
2.匯入到工程
3.修改Android.mk
使用SQLite
開啟HelloWorldScene.cpp檔案,我們在裡面加入SQLite的使用樣本
引入標頭檔
#include "sqlite3.h"
建立SQLite 資料庫
sqlite3 *pdb=NULL;//1 std::string path= FileUtils::getInstance()->getWritablePath()+"save.db";//2 std::string sql; int result; result=sqlite3_open(path.c_str(),&pdb);//3 if(result!=SQLITE_OK) { log("open database failed, number%d",result); }
- 資料庫指標
- 指定資料庫的路徑
- 開啟一個資料庫,如果該資料庫不存在,則建立一個資料庫檔案
SQL語句
sql="create table student(ID integer primary key autoincrement,name text,sex text)";//1
- 建立表的SQL語句
建立Table
result=sqlite3_exec(pdb,sql.c_str(),NULL,NULL,NULL);//1 if(result!=SQLITE_OK) log("create table failed");
- 建立表
插入資料
sql="insert into student values(1,‘student1‘,‘male‘)"; result=sqlite3_exec(pdb,sql.c_str(),NULL,NULL,NULL); if(result!=SQLITE_OK) log("insert data failed!"); sql="insert into student values(2,‘student2‘,‘female‘)"; result=sqlite3_exec(pdb,sql.c_str(),NULL,NULL,NULL); if(result!=SQLITE_OK) log("insert data failed!"); sql="insert into student values(3,‘student3‘,‘male‘)"; result=sqlite3_exec(pdb,sql.c_str(),NULL,NULL,NULL); if(result!=SQLITE_OK) log("insert data failed!");
- 向表中插入3條資料
查詢
char **re;//查詢結果 int r,c;//行、列 sqlite3_get_table(pdb,"select * from student",&re,&r,&c,NULL);//1 log("row is %d,column is %d",r,c); for(int i=1;i<=r;i++)//2 { for(int j=0;j<c;j++) { log("%s",re[i*c+j]); } } sqlite3_free_table(re);
- 查詢表中的資料
- 將查詢結果的log輸出
查詢結果:
cocos2d: row is 3,column is 3cocos2d: 1cocos2d: student1cocos2d: malecocos2d: 2cocos2d: student2cocos2d: femalecocos2d: 3cocos2d: student3cocos2d: male
我們可以看到查詢到結果和我們前面插入的資料一樣。
刪除
sql="delete from student where ID=1"; result=sqlite3_exec(pdb,sql.c_str(), NULL,NULL,NULL);//1 if(result!=SQLITE_OK) log("delete data failed!");
- 刪除ID=1的學生
使用上面的查詢語句查詢刪除ID=1的學生後的資料
查詢結果:
cocos2d: row is 2,column is 3cocos2d: 2cocos2d: student2cocos2d: femalecocos2d: 3cocos2d: student3cocos2d: male
我們可以看到,表中ID=1的資料已經被刪除了
注意:
使用sqlite一定要注意的記憶體管理問題,那就是開啟資料庫之後,資料操作完成之後,一定要關閉資料庫,否側會造成記憶體流失。
sqlite3_close(pdb);
資料檔案存放的位置
/data/data/com.youCompany.Helloworld/files/save.db
位於程式沙箱的文檔目錄下
../Documents/save.db
(26)SQLite整合與用法