程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> cocos2d-x學習筆記17:記錄存儲2:SQLite基本使用

cocos2d-x學習筆記17:記錄存儲2:SQLite基本使用

編輯:關於C語言

 cocos2d-x學習筆記17:記錄存儲2:SQLite基本使用


一、安裝與配置 SQLite是使用非常廣泛的嵌入式數據庫,它有著0配置,占用資源少等特點。從大型游戲《魔獸世界》到android上的很多游戲和軟件google提供了一個java語言的綁定。)
在cocos2d-x中,我們使用它的C語言綁定。 為了方便和簡化篇幅,我們直接使用它的源代碼。下載地址: http://www.sqlite.org/sqlite-amalgamation-3071000.zip  
  將其解壓到cocos2d-x引擎目錄下,得到一個“sqlite-amalgamation-3071000”文件夾,裡面有四個源文件。
在VC中新建一個項目,起名叫Save。
然後,右鍵點項目-》屬性-》配置屬性-》C++-》常規-》附加包含目錄 添加剛才的解壓的源代碼路徑。
  下一步,右鍵點項目-》添加-》現有項,選擇那四個源代碼文件。然後SQLite就配置好了。

二、初步使用
在HelloworldScene中,添加
  1. #include "sqlite3.h" 
然後在init函數中編寫代碼
  1. sqlite3 *pDB = NULL;//數據庫指針 
  2. char * errMsg = NULL;//錯誤信息 
  3. std::string sqlstr;//SQL指令 
  4. int result;//sqlite3_exec返回值 
  5.  
  6. //打開一個數據庫,如果該數據庫不存在,則創建一個數據庫文件 
  7. result = sqlite3_open("save.db", &pDB); 
  8. if( result != SQLITE_OK ) 
  9.       CCLog( "打開數據庫失敗,錯誤碼:%d ,錯誤原因:%s\n" , result, errMsg ); 
  10.   
  11.  //創建表,設置ID為主鍵,且自動增加 
  12. result=sqlite3_exec( pDB, "create table MyTable_1( ID integer primary key autoincrement, name nvarchar(32) ) " , NULL, NULL, &errMsg ); 
  13. if( result != SQLITE_OK ) 
  14.       CCLog( "創建表失敗,錯誤碼:%d ,錯誤原因:%s\n" , result, errMsg ); 
  15.  
  16. //插入數據 
  17. sqlstr=" insert into MyTable_1( name ) values ( '克塞' ) "; 
  18. result = sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg ); 
  19. if(result != SQLITE_OK ) 
  20.       CCLog( "插入記錄失敗,錯誤碼:%d ,錯誤原因:%s\n" , result, errMsg ); 
  21.  
  22. //插入數據 
  23. sqlstr=" insert into MyTable_1( name ) values ( '葫蘆娃' ) "; 
  24. result = sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg ); 
  25. if(result != SQLITE_OK ) 
  26.       CCLog( "插入記錄失敗,錯誤碼:%d ,錯誤原因:%s\n" , result, errMsg ); 
  27.  
  28. //插入數據 
  29. sqlstr=" insert into MyTable_1( name ) values ( '擎天柱' ) "; 
  30. result = sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg ); 
  31. if(result != SQLITE_OK ) 
  32.       CCLog( "插入記錄失敗,錯誤碼:%d ,錯誤原因:%s\n" , result, errMsg ); 
  33.  
  34.  //關閉數據庫 
  35. sqlite3_close(pDB); 


然後執行項目,你看不到什麼東西,因為只是操作了數據庫。
三、SQLite數據庫管理工具
SQLite Database Browser是一個用Qt編寫的跨平台SQLite數據庫管理工具。這個工具的特點是非常簡單易用, 甚至很多人拿這個修改SQLite游戲存檔。哈哈哈,關於SQLite加密問題,我們以後會講。) 這裡附上他的下載地址: http://sourceforge.net/projects/sqlitebrowser/files/latest/download?source=files
然後,我們用這個工具,打開項目目錄中Resources目錄下的save.db,就可以看到剛才生成的數據庫數據了。
  一共三個標簽頁,DataBase Structure、Browse Data,Execute SQL……意思一目了然,不用多說。是不是很好用啊,哈哈哈。

四、其他常見SQLite操作舉例
還是以上面的表舉例,直接給出操作代碼。具體接口解釋可以參考官方文檔:http://www.sqlite.org/docs.html 為了突出主要內容,刪掉了一些調試信息。
1)更新記錄 把第三條改成威震天 
  1. sqlstr="update MyTable_1 set name='威震天' where ID = 3"; 
  2.  sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg ); 

2)刪除記錄 把第二條葫蘆娃刪了 
  1. sqlstr="delete from MyTable_1 where ID = 2"; 
  2.  sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg ); 

3)判斷表是否存在 判斷表MyTable_1是否存在,保存在isExisted_中。
  1. bool isExisted_; 
  2. sqlstr="select count(type) from sqlite_master where type='table' and name='MyTable_1'"; 
  3. sqlite3_exec( pDB, sqlstr.c_str() , isExisted, &isExisted_, &errMsg ); 

這裡用到了一個回調函數isExisted,他的定義如下:
  1. int isExisted( void * para, int n_column, char ** column_value, char ** column_name ) 
  2.             bool *isExisted_=(bool*)para; 
  3.             *isExisted_=(**column_value)!='0'; 
  4.             return 0; 

4)判斷記錄是否存在 判斷ID=2的記錄是否存在,保存在isExisted_中。
  1.  bool isExisted_; 
  2. sqlstr="select count(*) from MyTable_1 where ID = 2"; 
  3. sqlite3_exec( pDB, sqlstr.c_str() , isExisted, &isExisted_, &errMsg ); 
回調函數isExisted的定義,在3)已給出,不再贅述。
5)獲得記錄條數 獲得表MyTable_1的記錄條數,保存在count中。 
  1. int count; 
  2.  sqlstr="select * from MyTable_1"; 
  3.  sqlite3_exec( pDB, sqlstr.c_str() , loadRecordCount, &count, &errMsg ); 

這裡用到了一個回調函數loadRecordCount,他的定義如下:
  1. int loadRecordCount( void * para, int n_column, char ** column_value, char ** column_name ) 
  2.             int *count=(int*)para; 
  3.             *count=n_column; 
  4.             return 0; 
  6)讀取一條記錄 讀取表MyTable_1中ID=3的記錄,並打印
  1. sqlstr="select * from MyTable_1 where ID=3"; 
  2. sqlite3_exec( pDB, sqlstr.c_str() , loadRecord, NULL, &errMsg ); 

這裡用到了一個回調函數loadRecord,他的定義如下:
  1. int loadRecord( void * para, int n_column, char ** column_value, char ** column_name ) 
  2.             CCLog("ID=%s,name=%s",column_value[0],column_value[1]); 
  3.             return 0; 

本文出自 “老G的小屋” 博客,請務必保留此出處http://4137613.blog.51cto.com/4127613/772518

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved