Cocos2d-x   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了cocos2dx c++ 使用sqlite数据库大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。


官方文档教程:

点击打开链接


环境 windows7 64, cocos2dx3.2

1.下载sqlite包

下载地址:http://www.sqlite.org/download.html下载后,在项目中导入sqlite3.csqlite3.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 != @R_371_5607@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 != @R_371_5607@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 != @R_371_5607@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 != @R_371_5607@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(); 
}

大佬总结

以上是大佬教程为你收集整理的cocos2dx c++ 使用sqlite数据库全部内容,希望文章能够帮你解决cocos2dx c++ 使用sqlite数据库所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。