加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ocos2d-x中使用sqlite数据库

发布时间:2020-12-13 00:04:55 所属栏目:百科 来源:网络整理
导读:下载附件,解压,添加到工程中,加入头文件 Cpp代码 include "sqlite/sqlite3.h" include "sqlite/sqlite3.h" 创建数据库的代码 返回sqlite3的一个指针,通过该指针可以添加、修改、删除数据 Cpp代码 sqlite3*DBUtils::creatTable() { sqlite3*pDB=NULL; //

下载附件,解压,添加到工程中,加入头文件

Cpp代码
  1. include"sqlite/sqlite3.h"

创建数据库的代码 返回sqlite3的一个指针,通过该指针可以添加、修改、删除数据

Cpp代码
  1. sqlite3*DBUtils::creatTable()
  2. {
  3. sqlite3*pDB=NULL;//数据库指针
  4. char*errMsg=NULL;//错误信息
  5. std::stringsqlstr;//SQL指令
  6. intresult;//sqlite3_exec返回值
  7. //打开一个数据库,如果该数据库不存在,则创建一个数据库文件
  8. result=sqlite3_open("save.db",&pDB);
  9. if(result!=SQLITE_OK)
  10. //CCLog("打开数据库失败,错误码:%d,错误原因:%sn",result,errMsg);
  11. cout<<errMsg<<endl;
  12. //创建表,设置ID为主键,且自动增加
  13. result=sqlite3_exec(pDB,"createtableInfo(idintegerprimarykeyautoincrement,namenvarchar(32),scorenvarchar(50),awardnvarchar(50))",NULL,&errMsg);
  14. returnpDB;
  15. //sqlite3_close(pDB);
  16. }

通过创建数据库返回的指针,保存数据

Cpp代码
  1. intDBUtils::save(sqlite3*pDB)
  2. {
  3. char*errMsg=NULL;
  4. std::stringsqlstr="insertintoInfo(name,score,award)values('1','1','1')";
  5. intresult=sqlite3_exec(pDB,sqlstr.c_str(),&errMsg);
  6. returnresult;
  7. }

查询数据

定义一个全局函数,也就是在类外定义

Cpp代码
  1. intloadRecord(void*para,intn_column,char**column_value,char**column_name)
  2. {
  3. InfoBean*info=newInfoBean(column_value[0],column_value[1],column_value[2],column_value[3]);
  4. /*info->setId(column_value[0]);
  5. info->setName(column_value[1]);
  6. info->setScore(column_value[2]);
  7. info->setAward(column_value[3]);*/
  8. DBUtils::list->addObject(info);
  9. info->autorelease();
  10. return0;
  11. }

定义一个类的静态成员函数

Cpp代码
  1. voidDBUtils::listAll(sqlite3*pDB)
  2. {
  3. DBUtils::list=newCCSet();
  4. list->autorelease();
  5. char*errMsg=NULL;
  6. std::stringsqlstr="select*fromInfoorderbyscoredesclimit0,10";
  7. intresult=sqlite3_exec(pDB,loadRecord,&errMsg);
  8. }

当调用listAll的时候,执行到sqlite3_exec的时候,会回调loadRecord函数,一条数据调用一次

遍历CCSet

Cpp代码
  1. CCSetIteratorit;
  2. InfoBean*bean;
  3. CCSet*list=listAllRecord();
  4. CCLOG("%s","hello");
  5. intposition[]={300,606,300,530,454,378,302,760,302};
  6. inti=0;
  7. for(it=list->begin();it!=list->end();it++)
  8. {
  9. bean=(InfoBean*)(*it);
  10. if(!bean)
  11. break;
  12. CCLOG("%s",bean->getName());
  13. CCLabelTTF*m_pLabelName=CCLabelTTF::labelWithString(bean->getName(),"Arial",30);
  14. m_pLabelName->setColor(ccc3(255,0));
  15. inttemp_one=2*i;
  16. inttemp_two=(i+1)*2-1;
  17. m_pLabelName->setPosition(CCPointMake(position[temp_one],position[temp_two]));
  18. this->addChild(m_pLabelName);
  19. CCLabelTTF*m_pLabelScore=CCLabelTTF::labelWithString(bean->getScore(),30);
  20. m_pLabelScore->setColor(ccc3(255,0));
  21. m_pLabelScore->setPosition(CCPointMake(position[temp_one]+150,position[temp_two]));
  22. this->addChild(m_pLabelScore);
  23. i++;
  24. }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读