標籤:android style http io ar color os 使用 sp
本文轉載至 http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/sqlite/zh.md概述
在Cocos2d-x中,簡單資料存放區,可以使用UserDefault。那麼如何儲存大量,不規則的資料?我們可以使用SQLite資料庫儲存資料。SQLite是使用非常廣泛的嵌入式資料庫,它有小巧 、高效、跨平台、開源免費和易操作的特點。
SQLite資料庫是使用C語言來編寫的,那麼在Cocos2d-x使用SQLite也是得心應手。
準備
首先建立一個Cocos2d-x v3.x的helloworld工程,我們將以該工程作為SQLite整合與用法的實戰工程。
開啟終端,使用如下命令建立工程:
1 |
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的使用樣本
引入標頭檔
建立SQLite 資料庫
12345678910 |
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語句
1 |
sql= "create table student(ID integer primary key autoincrement,name text,sex text)" ; //1 |
- 建立表的SQL語句
建立Table
123 |
result=sqlite3_exec(pdb,sql.c_str(),NULL,NULL,NULL); //1 if (result!=SQLITE_OK) log ( "create table failed" ); |
- 建立表
插入資料
1234567891011121314 |
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條資料
查詢
12345678910111213 |
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輸出
查詢結果:
12345678910 |
cocos2d: row is 3,column is 3 cocos2d: 1 cocos2d: student1 cocos2d: male cocos2d: 2 cocos2d: student2 cocos2d: female cocos2d: 3 cocos2d: student3 cocos2d: male |
我們可以看到查詢到結果和我們前面插入的資料一樣。
刪除
1234 |
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的學生後的資料
查詢結果:
1234567 |
cocos2d: row is 2,column is 3 cocos2d: 2 cocos2d: student2 cocos2d: female cocos2d: 3 cocos2d: student3 cocos2d: male |
我們可以看到,表中ID=1的資料已經被刪除了
注意:
使用sqlite一定要注意的記憶體管理問題,那就是開啟資料庫之後,資料操作完成之後,一定要關閉資料庫,否側會造成記憶體流失。
資料檔案存放的位置
1 |
/data/data/com.youCompany.Helloworld/files/save.db |
位於程式沙箱的文檔目錄下
SQLite整合與用法