---使用说明
都是静态方法,直接用即可,如下:
sql::open("PopStar");sql::setInt(101,lv);sql::setString("starData",starData.c_str());sql::createtable("User","createtableUser(IDinteger,nametext)");sql::exec("deletefromUserwhereID=1");//增、删、改的语句可以直接使用这个方法sql::exec("select*fromUser",loadRecordForString,&get);//查找的语句需要加个回调来处理数据sql::close();
---sql.h
#ifndef_sql_H_#define_sql_H_#include"cocos2d.h"#pragmacomment(lib,"sqlite3")usingnamespacestd;classsql{public: staticvoIDopen(constchar*sqlname);//打开数据库,传入数据库名称 staticvoIDexec(stringsql);//执行SQL语句 staticvoIDexec(stringsql,int(*callback)(voID*,int,char**,char**),voID*arg);//执行SQL语句,有回调 staticvoIDclose();//关闭,最好在 *** 作完数据库后及时关闭 //---以下是一些简单常用的方法--- staticboolistableExist(stringtablename);//判断该表是否存在 staticvoIDcreatetable(stringtablename,stringsql);//在不存在该表的情况下创建该表,需要传入表名、创建表的SQL语句 staticbooldeletetable(stringtablename); staticintgetDataCount(stringtablename);//获取该表的行数 //---存一些简单的数据的时候,无需手动创建表,功能类似UserDefault--- staticvoIDsetInt(intkey,intvalue); staticintgetInt(intkey,intdefaultValue); staticvoIDsetString(stringkey,stringvalue); staticstringgetString(stringkey,stringdefaultValue);};#endif//_sql_H_
---sql.cpp
#include"sql.h"#include"sqlite3\include\sqlite3.h"#include<stdlib.h>#pragmacomment(lib,"sqlite3")USING_NS_CC;sqlite3*pDB=NulL;//数据库指针char*errMsg=NulL;//错误信息std::stringsqlstr;//sql指令intresult;//返回值constchar*simpletablenameInt="SimpletableInt";constchar*simpletablenameString="SimpletableString";//打开数据库voIDsql::open(constchar*sqlname){ //打开一个数据库,如果该数据库不存在,会自动创建一个 result=sqlite3_open(sqlname,&pDB); if(result!=sqlITE_OK){ cclOG("opensqlitefail,code:%d,cause:%s\n",result,errMsg); } else{ cclOG("opensqlitesuccess:%s",sqlname); } //目前只有int,之后会陆续优化改进 sqlstr=String::createWithFormat("createtable%s(keyinteger,valueinteger)",simpletablenameInt)->_string; createtable(simpletablenameInt,sqlstr); sqlstr=String::createWithFormat("createtable%s(keytext,valuetext)",simpletablenameString)->_string; createtable(simpletablenameString,sqlstr);}//执行SQL语句,示例如下://插入:insertintoMytable_1(name)values('擎天柱')//删除:deletefromMytable_1whereID=2//修改:updateMytable_1setname='威震天'whereID=3voIDsql::exec(std::stringsql){ result=sqlite3_exec(pDB,sql.c_str(),NulL,&errMsg); if(result!=sqlITE_OK){ cclOG("runsqlitefail:%s,errMsg); } else{ cclOG("runsqlitesuccess:%s",sql.c_str()); }}//执行SQL语句,有回调,一般用于查询语句voIDsql::exec(stringsql,voID*arg){ result=sqlite3_exec(pDB,callback,arg,sql.c_str()); }}//关闭数据库voIDsql::close(){ sqlite3_close(pDB);}//istableExist的回调函数intisExisted(voID*para,intn_column,char**column_value,char**column_name){ bool*isExisted_=(bool*)para; *isExisted_=(**column_value)!='0'; return0;}//该表是否存在boolsql::istableExist(std::stringtablename){ if(pDB!=NulL){ //判断表是否存在 boolistableExist; sqlstr="selectcount(type)fromsqlite_masterwheretype='table'andname='"+tablename+"'"; result=sqlite3_exec(pDB,sqlstr.c_str(),isExisted,&istableExist,&errMsg); returnistableExist; } returnfalse;}//创建一张表,如果已存在则不创建//示例:createtableuser(IDinteger,usernametext,passwordtext)voIDsql::createtable(std::stringtablename,std::stringsql){ if(!istableExist(tablename)){ result=sqlite3_exec(pDB,&errMsg); if(result!=sqlITE_OK){ cclOG("createsqlitetable%sfail,tablename,errMsg); } else{ cclOG("createsqlitetablesuccess:%s",tablename); } }}//删除一张表boolsql::deletetable(std::stringtablename){ if(istableExist(tablename)){//表存在的时候,执行删除语句 sqlstr="droptable"+tablename; result=sqlite3_exec(pDB,&errMsg); if(result!=sqlITE_OK){ cclOG("deletesqlitetable%sfail,errMsg); returnfalse; } } returntrue;//能执行到最后,就说明删除成功了}intloadRecordCount(voID*para,intn_col,char**col_value,char**col_name){ int*count=(int*)para; *count=n_col; return0;}//获取该表的行数intsql::getDataCount(std::stringtablename){ if(istableExist(tablename)){ sqlstr="selectcount(*)from"+tablename; intcount=0; result=sqlite3_exec(pDB,loadRecordCount,&count,&errMsg); if(result!=sqlITE_OK){ cclOG("getsqlitetabledatacountfail,errMsg); } returncount; } return0;}//存intvoIDsql::setInt(intkey,intvalue){ //先删除原先的数据 sqlstr=String::createWithFormat("deletefrom%swherekey=%d",simpletablenameInt,key)->_string; exec(sqlstr); //再插入 sqlstr=String::createWithFormat("insertinto%s(key,value)values(%d,%d)",key,value)->_string; exec(sqlstr);}intloadRecordForInt(voID*para,char**column_name){ int*value=(int*)para; *value=atoi(column_value[1]); return0;}//取intintsql::getInt(intkey,intdefaultValue){ intget=defaultValue; exec(String::createWithFormat("select*from%swherekey=%d",key)->_string,loadRecordForInt,&get); returnget;}//存stringvoIDsql::setString(std::stringkey,std::stringvalue){ //先删除原先的数据 sqlstr=String::createWithFormat("deletefrom%swherekey='%s'",simpletablenameString,key.c_str())->_string; exec(sqlstr); //再插入 sqlstr=String::createWithFormat("insertinto%s(key,value)values('%s','%s')",key.c_str(),value.c_str())->_string; exec(sqlstr);}intloadRecordForString(voID*para,char**column_name){ string*value=(string*)para; *value=column_value[1]; return0;}//取stringstringsql::getString(stringkey,stringdefaultValue){ stringget=defaultValue; exec(String::createWithFormat("select*from%swherekey='%s'",key.c_str())->_string,&get); returnget;}总结
以上是内存溢出为你收集整理的cocos2dx学习笔记:sqlite3封装的简单工具类全部内容,希望文章能够帮你解决cocos2dx学习笔记:sqlite3封装的简单工具类所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)