sqllite 數據加密以及轉換數據類型

在HelloWorld類中

添加函數

int isExisted( void * para, int n_column, char ** column_value, char ** column_name ) 
{ 
	bool *isExisted_=(bool*)para; 
	*isExisted_=(**column_value)!='0'; 
	return 0; 
}
在init()中

	//加密以及解密是用了himi的加密解密方法
	sqlite3 *pDB = NULL;            //數據庫指針    
	char * errMsg = NULL;           //錯誤信息  
	std::string sqlstr;             //SQL指令   
	int result;                     //sqlite3_exec返回值  
	bool isExisted_;                //判斷是否開始  
	char db[100]="";  
	std::string path = CCFileUtils::sharedFileUtils()->getWritablePath(); 
	strcpy(db, path.c_str());
	strcat(db,"save.db");
	char **bResult;
	int aa,b;
	result = sqlite3_open(db, &pDB);//如果不存在及新建數據庫,存在及打開  

	sqlstr="select count(type) from sqlite_master where type='table' and name='achievement_t'";
	sqlite3_exec( pDB, sqlstr.c_str() , ::isExisted, &isExisted_, &errMsg );
	result=sqlite3_exec( pDB, "create table achievement_t( id integer primary key autoincrement, stute string ) " , NULL, NULL, &errMsg );
	if(!isExisted_){
		result=sqlite3_exec( pDB, "create table achievement_t( id integer primary key autoincrement, stute string ) " , NULL, NULL, &errMsg );
	}
	char g[10];
	itoa(0,g,10);
	//加密
	std::string number=himiSaveData(g,10);	
	CCLOG("%s",number.c_str());
	sqlstr=" insert into achievement_t( stute) values (  '"+number+"') "; 
	for(int i=0;i<15;i++){
		result = sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg );
	}//獲得整個表的數據
	sqlite3_get_table(pDB,"select stute from achievement_t",&bResult,&aa,&b,&errMsg);
	CCLOG("%d",aa);
	for (int i=1;i<(aa+1)*b;i++)
	{
		//解密前
		CCLOG(bResult[i]);
		//解密
		std::string n=himiParseData(bResult[i]);
		int a =atoi(n.c_str());
	    //解密後
		CCLOG("%d,%d",i,a);
	}
	sqlite3_close(pDB);
可以輸出

表示成功了 
繼續寫數據庫查詢以及解密函數

如下

	sqlite3 *pDB = NULL;			//數據庫指針  
	char * errMsg = NULL;			//錯誤信息
	std::string sqlstr;				//SQL指令
	char db[100]="";
	strcpy(db, path.c_str());
	strcat(db,"save.db");
	sqlite3_open(db, &pDB);
	sqlstr="select tfive from history_t where id=1";
	sqlite3_exec( pDB, sqlstr.c_str() ,DataControl::queryCallBack, count, &errMsg );
	sqlite3_close(pDB);
	DataControl::row=0;
	std::string n=himiParseData(count->c_str());
	int num =atoi(n.c_str());
有個回調函數 ,我這裏是

//這裏的回調函數的void* para 與上面的count相同,付給para值等同於付給count 
//第一個數是可以回調給上面count的數值,第二個數是列數,第三個數是列的value數值,第三個數是列的名字
int DataControl::queryCallBack(void* para,int n_column,char** column_value,char** column_name)
{
	std::string *temp = (std::string*)para;
	*temp=(std::string)*column_value;
	return 0;
	//int *temp = (int*)para;
	//int count=0;
	//將char*類型轉化成int類型
	//下面這樣寫不是很好,而且這樣寫就是找出一列出來然後 就知道列第二個數就是要找的數值(除名稱 第一列是名稱)
	//最好用sscanf(*column_value,"%d",&count);可達到同樣效果,也比較合理,目的就是將column_value的值轉成int型付給count
	//sscanf(*(column_name+1),"%d",&count);
	//*temp=count;
	//return 0;
}
這樣就能解密出來,祝你成功

下載demo地址http://download.csdn.net/detail/five50/6801737

發佈了53 篇原創文章 · 獲贊 4 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章