DBUtil.h:
[cpp] view plain copy classDBUtil{ public: /************************************************************ 封装<atarget="_blank"href="http://www.so.com/s?q=sqlite3&IE=utf-8&src=se_lighten_f">sqlite3</a> *** 作 ************************************************************/ //用来创建一个db数据库db为数据库的名字 //打开数据库 staticvoIDinitDB(constchar*db); //用来判断表格是否存在 //name:表示表名 staticbooltableIsExist(stringname); //用来创建一个表名为name的表格,创建时会先匹配时否有该表的存在如果存在则不创建 //创建表 voIDcreatetable(stringsql,stringname); //用来删除一张表名为name的表格,删除时会先匹配是否有该表的存在如果不存在则不执行删除 *** 作 //删除表名 voIDdeletetable(stringsql,0); background-color:inherit">//用来向表中插入一条数据 //插入一条数据 voIDinsertData(stringsql); //用来向表中删除一条数据 //删除一条数据 voIDdeleteData(stringsql); //用来向表中修改一条数据 //修改一条数据 voIDupdateData(stringsql); //获取一个记录的条数 //获得记录的条数 intgetDataCount(stringsql); //读取一条记录的信息 /* *此方法是查询方法,相当之重要,pSender最好是个vector */ voIDgetDataInfo(stringsql,voID*pSend); //关闭打开的数据库 voIDcloseDB(); };
DBUtil.cpp:
copy sqlite3*pDB=NulL;//数据库指针 char*errMsg=NulL;//错误信息 std::stringsqlstr;//sql指令 intresult;//sqlite3_exec返回值 //创建数据库 voIDDBUtil::initDB(char*db) { //打开一个数据库,如果该数据库不存在,则创建一个数据库文件 result=sqlite3_open(db,&pDB); if(result!=sqlITE_OK) cclog("打开数据库失败,错误码:%d,错误原因:%s\n",result,errMsg); } //tableIsExist的<atarget="_blank"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> 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) bool*isExisted_=(bool*)para; *isExisted_=(**column_value)!='0'; return0; } //判断表格是否存在 boolDBUtil::tableIsExist(stringname) if(pDB!=NulL) //判断表是否存在 booltableIsExisted; sqlstr="selectcount(type)fromsqlite_masterwheretype='table'andname='"+name+"'"; result=sqlite3_exec(pDB,sqlstr.c_str(),isExisted,&tableIsExisted,&errMsg); returntableIsExisted; returnfalse; //在数据库中判断名为name的表示否存在,如果不存在则创建这张表 //@示例语句stringsqls="createtableuser(IDinteger,usernametext,passwordtext)"; voIDDBUtil::createtable(stringsql,stringname) { if(!tableIsExist(name)) //创建表,设置ID为主键,且自动增加 result=sqlite3_exec(pDB,sql.c_str(),NulL,&errMsg); if(result!=sqlITE_OK) cclog("创建表失败,错误码:%d,错误原因:%s\n",errMsg); //删除表格 //@示例语句sqlstr="droptablename"; voIDDBUtil::deletetable(stringsql,stringname) if(tableIsExist(name)) //插入数据 //@示例语句sqlstr="insertintoMytable_1(name)values('<atarget="_blank"href="http://www.so.com/s?q=%E6%93%8E%E5%A4%A9%E6%9F%B1&IE=utf-8&src=se_lighten_f">擎天柱</a>')"; voIDDBUtil::insertData(stringsql){ cclog("插入记录失败,错误码:%d,错误原因:%s\n",0); background-color:inherit">//删除数据 //@示例语句sqlstr="deletefromMytable_1whereID=2"; voIDDBUtil::deleteData(stringsql) //修改数据 //@示例语句sqlstr="updateMytable_1setname='威震天'whereID=3"; voIDDBUtil::updateData(stringsql) //getDataCount的回调函数 intloadRecordCount(char**column_name) int*count=(int*)para; *count=n_column; return0; //获取记录的条数 //@示例语句stringsqlsssss="selectcount(*)fromuser"; //@示例语句取得表格字段的语句stringsqlsssss="select*fromuser"; intDBUtil::getDataCount(stringsql) intcount=0; sqlite3_exec(pDB,loadRecordCount,&count,153); background-color:inherit; Font-weight:bold">returncount; //getDataInfo的回调函数 intloadRecord( cclOG("n_column:%d",n_column); //TestVO*testVO=(TestVO*)para; //testVO->mID=atoi(column_value[0]); //testVO->level=atoi(column_value[1]); //testVO->lastscore=atoi(column_value[2]); //testVO->bestscore=atoi(column_value[3]); //testVO->star=atoi(column_value[4]); /*可能有5个字段*/ //IDlevellastscorebestscorestar //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]); // 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]); //获取一条记录的信息其中的pSend是一个<atarget="_blank"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的类来代替他保存数据库中取出来的数据 /* *这里最好扩展下,让pSend是一个vector */ voIDDBUtil::getDataInfo(stringsql,153); background-color:inherit; Font-weight:bold">voID*pSend) //关闭数据库 voIDDBUtil::closeDB() sqlite3_close(pDB); }
测试:
copy //TestDatabase stringfullDBPath=CCfileUtils::sharedfileUtils()->getWriteablePath()+"save.db"; cclOG("fullPath:%s",fullDBPath.c_str()); DBUtil::initDB(fullDBPath.c_str()); stringcreatetablesql="createtablezuma(IDintegerprimarykeyautoincrement,levelinteger,lastscoreinteger,bestscoreinteger,starinteger);"; DBUtil::createtable(createtablesql.c_str(),"zuma"); //向表格中插入数据 stringsqlss="insertintozuma(level,lastscore,bestscore,star)values(100,100,500,1)"; /*插入一条数据*/ DBUtil::insertData(sqlss); //更新 stringupdateString="updatezumasetstar=5;"; DBUtil::updateData(updateString); /*查询数据*/ stringselectStr="select*fromzuma"; //CCObject*pp=newCCObject(); //DBUtil::getDataInfo(selectStr,pp); TestVO*testVO=newTestVO(); testVO->mID=1111; DBUtil::getDataInfo(selectStr,testVO); /*显示结果*/ cclOG("ID:%d",testVO->mID); cclOG("level:%d",testVO->level); cclOG("lastscore:%d",testVO->lastscore); cclOG("bestscore:%d",testVO->bestscore); cclOG("star:%d",testVO->star); deletetestVO; /*不能忘记关闭数据库*/ DBUtil::closeDB(); 总结
以上是内存溢出为你收集整理的Cocos2d-X 学习笔记 18 Cocos2dx 下对sqlite3 的简单封装全部内容,希望文章能够帮你解决Cocos2d-X 学习笔记 18 Cocos2dx 下对sqlite3 的简单封装所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)