Cocos2d-x   发布时间:2022-05-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Cocos2d-X 学习笔记 18 Cocos2dx 下对sqlite3 的简单封装大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

DBUtil.h:

  1. classDBUtil{
  2. public:
  3. /************************************************************
  4. 封装<atarget="_blank"style="color:#0000F0;display:inline;position:static;BACkground:none;"href="http://www.so.com/s?q=sqlite3&ie=utf-8&src=se_lighten_f">sqlite3</a>操作
  5. ************************************************************/
  6. //用来创建一个db数据库db为数据库的名字
  7. //打开数据库
  8. staticvoidinitDB(constchar*db);
  9. //用来判断表格是否存在
  10. //name:表示表名
  11. staticbooltableIsExist(StringName);
  12. //用来创建一个表名为name的表格,创建时会先匹配时否有该表的存在如果存在则不创建
  13. //创建
  14. voidcreateTable(Stringsql,StringName);
  15. //用来删除一张表名为name的表格,删除时会先匹配是否有该表的存在如果不存在则不执行删除操作
  16. //删除表
  17. voiddeleteTable(Stringsql,0); BACkground-color:inherit">//用来向表中插入一条数据
  18. //插入一条数据
  19. voidinsertData(Stringsql);
  20. //用来向表中删除一条数据
  21. //删除一条数据
  22. voiddeleteData(Stringsql);
  23. //用来向表中修改一条数据
  24. //修改一条数据
  25. voidupdateData(Stringsql);
  26. //获取一个记录的条数
  27. //获得记录的条数
  28. intgetDataCount(Stringsql);
  29. //读取一条记录的信息
  30. /*
  31. *此方法是查询方法,相当之重要,pSender最好是个vector
  32. */
  33. voidgetDataInfo(Stringsql,void*pSend);
  34. //关闭打开的数据库
  35. voidcloseDB();
  36. };

DBUtil.cpp:

copy
    sqlite3*pDB=NULL;//数据库指针
  1. char*errMsg=NULL;//错误信息
  2. std::stringsqlstr;//SQL指令
  3. intresult;//sqlite3_exec返回值
  4. //创建数据库
  5. voidDBUtil::initDB(char*db)
  6. {
  7. //打开一个数据库,如果该数据库不存在,则创建一个数据库文件
  8. result=sqlite3_open(db,&pDB);
  9. if(result!=@R_13_5607@OK)
  10. CCLog("打开数据库失败,错误码:%d错误原因:%s\n",result,errMsg);
  11. }
  12. //tableIsExist的<atarget="_blank"style="color:#0000F0;display:inline;position:static;BACkground:none;"href="http://www.so.com/s?q=%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0&ie=utf-8&src=se_lighten_f">回调函数</a>
  13. intisExisted(void*para,intn_column,87); BACkground-color:inherit; font-weight:bold">char**column_value,87); BACkground-color:inherit; font-weight:bold">char**column_Name)
  14. bool*isExisted_=(bool*)para;
  15. *isExisted_=(**column_value)!='0';
  16. return0;
  17. }
  18. //判断表格是否存在
  19. boolDBUtil::tableIsExist(StringName)
  20. if(pDB!=NULL)
  21. //判断表是否存在
  22. booltableIsExisted;
  23. sqlstr="SELEctcount(typE)fromsqlite_masterwheretype='table'andname='"+name+"'";
  24. result=sqlite3_exec(pDB,sqlstr.c_str(),isExisted,&tableIsExisted,&errMsg);
  25. returntableIsExisted;
  26. returnfalse;
  27. //在数据库中判断名为name的表示否存在,如果不存在则创建这张表
  28. //@示例语句Stringsqls="createtableuser(idInteger,usernametext,passwordtext)";
  29. voidDBUtil::createTable(Stringsql,StringName)
  30. {
  31. if(!tableIsExist(Name))
  32. //创建表,设置ID为主键,且自动增加
  33. result=sqlite3_exec(pDB,sql.c_str(),NULL,&errMsg);
  34. if(result!=@R_13_5607@OK)
  35. CCLog("创建表失败,错误码:%d错误原因:%s\n",errMsg);
  36. //删除表
  37. //@示例语句sqlstr="droptablename";
  38. voidDBUtil::deleteTable(Stringsql,StringName)
  39. if(tableIsExist(Name))
  40. //插入数
  41. //@示例语句sqlstr="inserTintomyTable_1(NAME)values('<atarget="_blank"style="color:#0000F0;display:inline;position:static;BACkground:none;"href="http://www.so.com/s?q=%E6%93%8E%E5%A4%A9%E6%9F%B1&ie=utf-8&src=se_lighten_f">擎天柱</a>')";
  42. voidDBUtil::insertData(Stringsql){
  43. CCLog("插入记录失败,错误码:%d错误原因:%s\n",0); BACkground-color:inherit">//删除数据
  44. //@示例语句sqlstr="deletefrommyTable_1wherEID=2";
  45. voidDBUtil::deleteData(Stringsql)
  46. //修改数据
  47. //@示例语句sqlstr="updatemyTable_1setname='威震天'wherEID=3";
  48. voidDBUtil::updateData(Stringsql)
  49. //getDataCount的回调函数
  50. intloadRecordCount(char**column_Name)
  51. int*count=(int*)para;
  52. *count=n_column;
  53. return0;
  54. //获取记录的条数
  55. //@示例语句Stringsqlsssss="SELEctcount(*)fromuser";
  56. //@示例语句取得表格字段的语句Stringsqlsssss="SELEct*fromuser";
  57. intDBUtil::getDataCount(Stringsql)
  58. intcount=0;
  59. sqlite3_exec(pDB,loadRecordCount,&count,153); BACkground-color:inherit; font-weight:bold">returncount;
  60. //getDataInfo的回调函数
  61. intloadRecord( CCLOG("n_column:%d",n_column);
  62. //TestVO*testVO=(TestVO*)para;
  63. //testVO->mId=atoi(column_value[0]);
  64. //testVO->level=atoi(column_value[1]);
  65. //testVO->lastscore=atoi(column_value[2]);
  66. //testVO->bestscore=atoi(column_value[3]);
  67. //testVO->star=atoi(column_value[4]);
  68. /*可能有5个字段*/
  69. //idlevellastscorebestscorestar
  70. //CCLOG("c[0]:%s,c[1]:%s,c[2]:%s,c[3]:%s,c[4]:%s",column_name[0],column_name[1],column_name[2],column_name[3],column_name[4]);
  71. //
  72. CCLog("id=%s,level=%s,lastscore=%s,bestscore=%s,star=%s",column_value[0],column_value[1],column_value[2],column_value[3],column_value[4]);
  73. //获取一条记录的信息其中的pSend是一个<atarget="_blank"style="color:#0000F0;display:inline;position:static;BACkground:none;"href="http://www.so.com/s?q=%E5%AE%9E%E4%BD%93%E7%B1%BB&ie=utf-8&src=se_lighten_f">实体类</a>我们以后可以自定义一个继承了CCObject的类来代替他保存数据库中取出来的数据
  74. /*
  75. *这里最好扩展下,让pSend是一个vector
  76. */
  77. voidDBUtil::getDataInfo(Stringsql,153); BACkground-color:inherit; font-weight:bold">void*pSend)
  78. //关闭数据库
  79. voidDBUtil::closeDB()
  80. sqlite3_close(pDB);
  81. }


测试:

copy
    //TestDatabase
  1. StringfullDBPath=CCFileUtils::sharedFileUtils()->getWriteablePath()+"save.db";
  2. CCLOG("fullPath:%s",fullDBPath.c_str());
  3. DBUtil::initDB(fullDBPath.c_str());
  4. StringcreateTableSql="createtablezuma(idIntegerprimaryKeyautoincrement,levelInteger,lastscoreInteger,bestscoreInteger,starInteger);";
  5. DBUtil::createTable(createTableSql.c_str(),"zuma");
  6. //向表格中插入数
  7. Stringsqlss="inserTintozuma(level,lastscore,bestscore,star)values(100,100,500,1)";
  8. /*插入一条数据*/
  9. DBUtil::insertData(sqlss);
  10. //更新
  11. StringupdateString="updatezumasetstar=5;";
  12. DBUtil::updateData(updateString);
  13. /*查询数据*/
  14. StringSELEctStr="SELEct*fromzuma";
  15. //CCObject*pp=newCCObject();
  16. //DBUtil::getDataInfo(SELEctStr,pp);
  17. TestVO*testVO=newTestVO();
  18. testVO->mId=1111;
  19. DBUtil::getDataInfo(SELEctStr,testVO);
  20. /*显示结果*/
  21. CCLOG("id:%d",testVO->mId);
  22. CCLOG("level:%d",testVO->level);
  23. CCLOG("lastscore:%d",testVO->lastscore);
  24. CCLOG("bestscore:%d",testVO->bestscore);
  25. CCLOG("star:%d",testVO->star);
  26. deletetestVO;
  27. /*不能忘记关闭数据库*/
  28. DBUtil::closeDB();

大佬总结

以上是大佬教程为你收集整理的Cocos2d-X 学习笔记 18 Cocos2dx 下对sqlite3 的简单封装全部内容,希望文章能够帮你解决Cocos2d-X 学习笔记 18 Cocos2dx 下对sqlite3 的简单封装所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:183cocoscocos2dcocos2dxddxsqlitesqlite3x学习封装笔记简单
猜你在找的Cocos2d-x相关文章
其他相关热搜词更多
phpJavaPython程序员load如何string使用参数jquery开发安装listlinuxiosandroid工具javascriptcap