官方文档教程:
环境 windows7 64, cocos2dx3.2
1.下载sqlite包
下载地址:http://www.sqlite.org/download.html下载后,在项目中导入sqlite3.c和sqlite3.h两个文件即可。
2.导入到工程(和AppDelegate.cpp 一个目录即可)
3 相关文件
新建数据库管理类 DataUtil.h
#ifndef _Data_Util_ #define _Data_Util_ #include <string> #include "cocos2d.h" using namespace std; class DataUtil { public: //用来创建一个db数据库 db为数据库的名字 static void initDB(const char *db); //用来判断表格是否存在 static bool tableIsExist(string name); //用来创建一个表名为name的表格,创建时会先匹配时否有该表的存在如果存在则不创建 static void createTable(string sql,string name); //用来删除一张表名为name的表格,删除时会先匹配是否有该表的存在如果不存在则不执行删除操作 static void deleteTable(string sql,string name); //用来向表中插入一条数据 static void insertData(string sql); //用来向表中删除一条数据 static void deleteData(string sql); //用来向表中修改一条数据 static void updateData(string sql); //获取一个记录的条数 static int getDataCount(string sql); //读取一条记录的信息 static void getDataInfo(string sql,cocos2d::CCObject *pSend); //关闭打开的数据库 static void closeDB(); protected: //int isExisted( void * para,int n_column,char ** column_value,char ** column_name ); private: }; #endif //_Data_Util_
DataUtil.cpp
#include "DataUtil.h" #include "sqlite3.h" USING_NS_CC; sqlite3 *pDB = NULL;//数据库指针 char * errMsg = NULL;//错误信息 std::string sqlstr;//sql指令 int result;//sqlite3_exec返回值 //创建数据库 void DataUtil::initDB(const char *db ) { //打开一个数据库,如果该数据库不存在,则创建一个数据库文件 result = sqlite3_open(db,&pDB); if( result != sqlITE_OK ) CCLog( "打开数据库失败,错误码:%d ,错误原因:%s\n",result,errMsg ); } //tableIsExist的回调函数 int isExisted( void * para,char ** column_name ) { bool *isExisted_=(bool*)para; *isExisted_=(**column_value)!='0'; return 0; } //判断表格是否存在 bool DataUtil::tableIsExist( string name ) { if (pDB!=NULL) { //判断表是否存在 bool tableIsExisted; sqlstr = "select count(type) from sqlite_master where type='table' and name ='"+name+"'"; result =sqlite3_exec(pDB,sqlstr.c_str(),isExisted,&tableIsExisted,&errMsg); return tableIsExisted; } return false; } //在数据库中判断名为name的表示否存在,如果不存在则创建这张表 //@示例语句string sqls = "create table user(id integer,username text,password text)"; void DataUtil::createTable( string sql,string name ) { if (!tableIsExist(name)) { //创建表,设置ID为主键,且自动增加 result = sqlite3_exec(pDB,sql.c_str(),NULL,&errMsg); if( result != sqlITE_OK ) CCLog( "创建表失败,错误码:%d ,错误原因:%s\n",errMsg ); } } //删除表格 //@示例语句sqlstr="drop table name"; void DataUtil::deleteTable( string sql,string name ) { if (tableIsExist(name)) { result = sqlite3_exec(pDB,errMsg ); } } //插入数据 //@示例语句sqlstr=" insert into MyTable_1( name ) values ( '擎天柱' ) "; void DataUtil::insertData( string sql ){ result = sqlite3_exec( pDB,&errMsg ); if(result != sqlITE_OK ) CCLog( "插入记录失败,错误码:%d ,错误原因:%s\n",errMsg ); } //删除数据 //@示例语句sqlstr="delete from MyTable_1 where ID = 2"; void DataUtil::deleteData( string sql ) { result=sqlite3_exec( pDB,&errMsg ); if(result != sqlITE_OK ) CCLog( "插入记录失败,错误码:%d ,错误原因:%s\n",errMsg ); } //修改数据 //@示例语句 sqlstr="update MyTable_1 set name='威震天' where ID = 3"; void DataUtil::updateData( string sql ) { result = sqlite3_exec( pDB,errMsg ); } //getDataCount的回调函数 int loadRecordCount( void * para,char ** column_name ) { int *count=(int*)para; *count=n_column; return 0; } //获取记录的条数 //@示例语句string sqlsssss = "select count(*) from user"; //@示例语句 取得表格字段的语句string sqlsssss = "select * from user"; int DataUtil::getDataCount( string sql ) { int count=0; sqlite3_exec( pDB,loadRecordCount,&count,&errMsg ); return count; } //getDataInfo的回调函数 int loadRecord( void * para,char ** column_name ) { CCLog("ID=%s,name=%s,password=%s,word=%s",column_value[0],column_value[1],column_value[2],column_value[3]); return 0; } //获取一条记录的信息 其中的pSend是一个实体类我们以后可以自定义一个继承了CCObject的类来代替他保存数据库中取出来的数据 void DataUtil::getDataInfo( string sql,cocos2d::CCObject *pSend ) { sqlite3_exec( pDB,loadRecord,&errMsg ); } //关闭数据库 void DataUtil::closeDB() { sqlite3_close(pDB); }
helloWorld.cpp
#include "HelloWorld.h" #include "sqlite3.h" #include "DataUtil.h" bool HelloWorld::init() { //创建数据库,如果数据库存在的话,就会打开数据库 DataUtil::initDB("ok.db"); //数据库中没有表格的话就先创建一个表格先 string sqlsss = "create table user(id integer PRIMARY KEY,password text,word text)"; DataUtil::createTable(sqlsss,"user"); //像表格中插入数据 string sqlss = "insert into user values(1,'我也是超级赛亚人','I am world','hello world')"; DataUtil::insertData(sqlss); /*string sqls = "delete from user where id=1"; DataUtil::deleteData(sqls);*/ /*string sqls = "update user set username='小猪猪猪猪' where id=1"; DataUtil::updateData(sqls);*/ /* string sqlssss = "drop table user"; DataUtil::deleteData(sqlssss); */ /*string sqlsssss = "select count(*) from user"; int a = DataUtil::getDataCount(sqlsssss);*/ string sqlssssss = "select * from user where id=1"; CCObject *pp = new CCObject(); DataUtil::getDataInfo(sqlssssss,pp); //最后别忘了关闭数据库哦 DataUtil::closeDB(); }