DBUtil.h:
- classDBUtil{
-
-
- public:
-
-
- ************************************************************/
- //用来创建一个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:
sqlite3*pDB=NULL;
- char*errMsg=NULL;
- std::stringsqlstr;
- intresult;
- //创建数据库
- voidDBUtil::initDB(char*db)
- {
- //打开一个数据库,如果该数据库不存在,则创建一个数据库文件
- result=sqlite3_open(db,&pDB);
- if(result!=SQLITE_OK)
- CCLog("打开数据库失败,错误码:%d,错误原因:%sn",result,errMsg);
- }
- //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>
- 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,错误原因:%sn",errMsg);
- //删除表格
- //@示例语句sqlstr="droptablename";
- voidDBUtil::deleteTable(stringsql,stringname)
- if(tableIsExist(name))
- //插入数据
- //@示例语句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>')";
- voidDBUtil::insertData(stringsql){
- CCLog("插入记录失败,错误码:%d,错误原因:%sn",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"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的类来代替他保存数据库中取出来的数据
- /*
- *这里最好扩展下,让pSend是一个vector
- */
- voidDBUtil::getDataInfo(stringsql,153); background-color:inherit; font-weight:bold">void*pSend)
- //关闭数据库
- voidDBUtil::closeDB()
- sqlite3_close(pDB);
- }
测试:
- 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();
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|