SQLite整合與用法

來源:互聯網
上載者:User

標籤: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的使用樣本

引入標頭檔

1 #include "sqlite3.h"
建立SQLite 資料庫
12345678910 sqlite3 *pdb=NULL;//1std::string path= FileUtils::getInstance()->getWritablePath()+"save.db";//2 std::string sql;int result;result=sqlite3_open(path.c_str(),&pdb);//3if(result!=SQLITE_OK){    log("open database failed,  number%d",result);}
  1. 資料庫指標
  2. 指定資料庫的路徑
  3. 開啟一個資料庫,如果該資料庫不存在,則建立一個資料庫檔案 
SQL語句
1 sql="create table student(ID integer primary key autoincrement,name text,sex text)";//1
  1. 建立表的SQL語句
建立Table
123 result=sqlite3_exec(pdb,sql.c_str(),NULL,NULL,NULL);//1if(result!=SQLITE_OK)    log("create table failed");
  1. 建立表
插入資料
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!");
  1. 向表中插入3條資料
查詢
12345678910111213 char **re;//查詢結果int r,c;//行、列sqlite3_get_table(pdb,"select * from student",&re,&r,&c,NULL);//1log("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);
  1. 查詢表中的資料
  2. 將查詢結果的log輸出

查詢結果:

12345678910 cocos2d: row is 3,column is 3cocos2d: 1cocos2d: student1cocos2d: malecocos2d: 2cocos2d: student2cocos2d: femalecocos2d: 3cocos2d: student3cocos2d: male

我們可以看到查詢到結果和我們前面插入的資料一樣。

刪除
1234 sql="delete from student where ID=1";result=sqlite3_exec(pdb,sql.c_str(), NULL,NULL,NULL);//1if(result!=SQLITE_OK)    log("delete data failed!");
  1. 刪除ID=1的學生

使用上面的查詢語句查詢刪除ID=1的學生後的資料

查詢結果:

1234567 cocos2d: row is 2,column is 3cocos2d: 2cocos2d: student2cocos2d: femalecocos2d: 3cocos2d: student3cocos2d: male

我們可以看到,表中ID=1的資料已經被刪除了

注意:

使用sqlite一定要注意的記憶體管理問題,那就是開啟資料庫之後,資料操作完成之後,一定要關閉資料庫,否側會造成記憶體流失。

1 sqlite3_close(pdb);
資料檔案存放的位置
  • Android:
1 /data/data/com.youCompany.Helloworld/files/save.db
  • iOS:

位於程式沙箱的文檔目錄下

1 ../Documents/save.db

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.