cocos2dx学习笔记:sqlite3封装的简单工具类

cocos2dx学习笔记:sqlite3封装的简单工具类,第1张

概述---使用说明 都是静态方法,直接用即可,如下: Sql::open("PopStar");Sql::setInt(101,lv);Sql::setString("starData",starData.c_str());Sql::createTable("User", "create table User(id integer,name text)");Sql::exec("delete 

---使用说明

都是静态方法,直接用即可,如下:

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封装的简单工具类所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1055540.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存