• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Coco2dx中sqlite3的使用

    標簽: 游戲  cocos2dx

    當前cocos2dx版本3.17.2

    sqlite3

    大體上參考這位前輩https://blog.51cto.com/shahdza/1614851

    如果自己測試時報這種錯

    嚴重性    代碼    說明    項目    文件    行    禁止顯示狀態
    錯誤    LNK2019    無法解析的外部符號 "__declspec(dllimport) void __cdecl cocos2d::CCLog(char const *,...)" (__imp_?CCLog@cocos2d@@YAXPBDZZ),該符號在函數 "public: static void __cdecl DBHelper::openDB(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?openDB@DBHelper@@SAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 中被引用    cpp-empty-test    D:\Learning\GameCoding\cocos2d-x-3.17.2\tests\cpp-empty-test\proj.win32\DBHelper.obj    1    

     

    錯在我在數據庫操作類DBHelper中使用CCLOG()函數,原因不明,反正不用那個CCLog就無事。

    我自己的測試類(親測可行)

    DBHelper.h

    #pragma once
    #include "sqlite3.h"
    #include "cocos2d.h"
    using namespace  std;
    
    class DBHelper
    {
    public:
    	DBHelper(void);
    	~DBHelper(void);
    
    	static sqlite3 *pDB;//數據庫指針 
    	static char * errMsg;//錯誤信息 
    	static int result;//sqlite3_exec返回值 
    	static std::string path;//數據庫路徑
    	static std::string sql;//sql語句
    
    	static void openDB();//打開數據庫
    	static int addTest(int id,string name);//添加記錄
    	static int delTest(int id);//刪除記錄
    	static int updateTest(int id, string newname);//修改記錄
    	static vector<vector<string>> searchTest();//查詢記錄
    	static void closeBD();
    };
    

    DBHelper.cpp

    #include "DBHelper.h"
    
    sqlite3* DBHelper::pDB = NULL;
    char* DBHelper::errMsg;
    int DBHelper::result = 0;
    string DBHelper::path = "res/datas/test.db3";
    string DBHelper::sql = "";
    DBHelper::DBHelper(void)
    {
    
    
    }
    DBHelper::~DBHelper(void)
    {
    
    }
    
    void DBHelper::openDB()
    {
    	result = sqlite3_open(path.c_str(), &pDB);
    	//if (result != SQLITE_OK);
    		//CCLog("讀取數據庫失敗,錯誤碼:%d ,錯誤原因:%s\n", result, errMsg);
    }
    
    int DBHelper::addTest(int id, string name)
    {
    	openDB();
    	sql = "insert into test values(";
    	sql.append(to_string(id));
    	sql.append(",'");
    	sql.append(name);
    	sql.append("')");
    	result = sqlite3_exec(pDB, sql.c_str(), nullptr, nullptr, &errMsg);
    	closeBD();
    	return result;
    }
    
    int DBHelper::delTest(int id)
    {
    	openDB();
    	sql = "delete from test where ID=";
    	sql.append(to_string(id));
    	result = sqlite3_exec(pDB, sql.c_str(), nullptr, nullptr, &errMsg);
    	closeBD();
    	return result;
    }
    
    int DBHelper::updateTest(int id, string newname)
    {
    	openDB();
    	sql = "update test set NAME='";
    	sql.append(newname);
    	sql.append("' where ID=");
    	sql.append(to_string(id));
    	result = sqlite3_exec(pDB, sql.c_str(), nullptr, nullptr, &errMsg);
    	closeBD();
    	return result;
    }
    
    vector<vector<string>> DBHelper::searchTest()
    {
    	openDB();
    	char **table;
    	int r, c;//row,column
    	sql = "select * from test";
    	result = sqlite3_get_table(pDB, sql.c_str(), &table, &r, &c, &errMsg);
    	//結果總共r+1行,第0行(0,c-1)為字段名
    	//第1行(c,2*c-1)為第一條記錄
    	//我將結果保存在向量容器中
    	vector<vector<string>> rt(r+1, vector<string>(c));
    	for (int i = 0; i <= r; i++) {//行
    		for (int j = 0; j < c; j++) {//列
    			rt[i][j] = table[i*c + j];
    		}
    	}
    	//釋放查詢表
    	sqlite3_free_table(table);
    	closeBD();
    	return rt;
    }
    
    void DBHelper::closeBD()
    {
    	if (NULL != pDB) {
    		result = sqlite3_close(pDB);
    		pDB = NULL;
    	}
    }
    
    

    test.db里的表我用工具Navicat建立的,表名test,字段就倆:ID,NAME

    工具鏈接:https://www.navicat.com.cn/download/navicat-for-sqlite

    調用測試

    void MainGame::dbTest()
    {
    	auto a=DBHelper::addTest(1, "tom");
    	auto b=DBHelper::addTest(2, "jack");
    	auto c=DBHelper::delTest(1);
    	auto d=DBHelper::updateTest(2, "rose");
    	auto cont = DBHelper::searchTest();
    }

    請看效果(result=0表示結果正常)

    不知道是不是因為這個技術落后了?我看網上許多cocos2dx相關的文檔資料很少,找到的也是4,5年前的別人的回答。

    版權聲明:本文為almost_change_it原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/almost_change_it/article/details/105514208

    智能推薦

    使用sqlite3的一定總結

    從來沒有接觸過數據庫,因為最近的一個項目接觸了sqlite3,記錄一些經驗總結; 自學參考資料 sqlite3的相關文件,直接放在主程序的目錄內;(這樣不用額外設置路徑,項目小可以這樣做) 設置一下附加依賴項: 方式一:項目屬性—-鏈接器—-輸入—-添加”sqlite3.lib”(根據具體情況,有時需要添加附加庫目錄) 方式二:#prag...

    Python3:Flask的中安裝和使用SQLAlchemy操作sqlite3數據庫

    1.前言 由于前面大概學習了Flask框架,了解了具體對的操作,所以今天學習操作數據庫,使用flask-SQLAlchemy操作數據庫!(數據庫就使用sqlite3) 2.安裝當前的flask-SQLAlchemy 1.使用cmd方式執行pip install flask-sqlalchemy 結果如下: 2.查看是否安裝當前的flask-sqlalchmy成功 發現安裝成功!當前的Flask-S...

    三、Electron(Windows) sqlite3使用

    Electron(Windows) sqlite3使用 1、sqlite安裝 a、如果沒有安裝過編譯環境,需要安裝編譯環境 b、使用cd命令切換到工程所在目錄(eg、工程在D:\project\electron-update) c、切找到sqlite3的 node_modules 目錄 –target=寫當前用的electron 版本號 到此sqllite 安裝完在 3、封裝數據庫操作...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    猜你喜歡

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    精品国产乱码久久久久久蜜桃不卡