SQlite的使用

2018-09-08 17:04 更新

在CrossApp中,簡單數(shù)據(jù)存儲,可以使用CAUserDefault。那么如何存儲大量,不規(guī)則的數(shù)據(jù)?我們可以使用SQLite數(shù)據(jù)庫存儲數(shù)據(jù)。SQLite是使用非常廣泛的嵌入式數(shù)據(jù)庫,它有小巧 、高效、跨平臺、開源免費和易操作的特點。

SQLite數(shù)據(jù)庫是使用C語言來編寫的,在CrossApp中使用也是非常容易的。

CrossApp已經(jīng)添加了SQlite的,在CrossApp\extensions\sqlite3目錄,我直接使用就可以了。


引入頭文件

#include "CrossAppExt.h"


創(chuàng)建數(shù)據(jù)庫

//數(shù)據(jù)庫指針
sqlite3 *pdb=NULL;
 
//保存數(shù)據(jù)庫的路徑
std::string path= CCFileUtils::sharedFileUtils()->getWritablePath()+"save.db";
 
std::string sql;
int result;
 
//打開一個數(shù)據(jù),如果該數(shù)據(jù)庫不存在,則創(chuàng)建一個新的數(shù)據(jù)庫文件
result=sqlite3_open(path.c_str(),&pdb);
 
if(result!=SQLITE_OK)
{
    CCLog("open database failed,  number%d",result);
}


SQL語句

//創(chuàng)建數(shù)據(jù)庫表的sql語句

sql="create table student(ID integer primary key autoincrement,name text,sex text)";


創(chuàng)建Talbe

//創(chuàng)建表格
result=sqlite3_exec(pdb,sql.c_str(),NULL,NULL,NULL);
 
if(result!=SQLITE_OK)
    CCLog("create table failed");


    插入

    //向表內(nèi)插入3條數(shù)據(jù)
    sql="insert into student  values(1,'student1','male')";
     
    result=sqlite3_exec(pdb,sql.c_str(),NULL,NULL,NULL);
     
    if(result!=SQLITE_OK)
       CCLog("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)
        CCLog("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)
        CCLog("insert data failed!");
    

    查詢

    //查詢結(jié)果
    char **re;
     
    //行、列
    int r,c; 
     
    //查詢數(shù)據(jù)
    sqlite3_get_table(pdb,"select * from student",&re,&r,&c,NULL);
     
    CCLog("row is %d,column is %d",r,c);
     
    //將查詢出的數(shù)據(jù)通過log輸出
    for(int i=1;i<=r;i++)
    {
        for(int j=0;j<c;j++)
        {
            CCLog("%s",re[i*c+j]);
        }
    }
     
    sqlite3_free_table(re);
    


    刪除

    sql="delete from student where ID=1";
     
    //刪除id=1的學(xué)生的信息
    result=sqlite3_exec(pdb,sql.c_str(), NULL,NULL,NULL);
     
    if(result!=SQLITE_OK)
        CCLog("delete data failed!");
    

    注意
    使用sqlite一定要注意的內(nèi)存管理問題,那就是打開數(shù)據(jù)庫之后,數(shù)據(jù)操作完成之后,一定要關(guān)閉數(shù)據(jù)庫,否側(cè)會造成內(nèi)存泄漏。

    sqlite3_close(pdb);
    

    SQlite保存路徑

    Android:

    /data/data/com.youCompany.Helloworld/files/save.db
    

    IOS:

    位于程序沙盒的文檔目錄下


    ../Documents/save.db
    



    以上內(nèi)容是否對您有幫助:
    在線筆記
    App下載
    App下載

    掃描二維碼

    下載編程獅App

    公眾號
    微信公眾號

    編程獅公眾號