Coco2dx中sqlite3的使用
當前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年前的別人的回答。
智能推薦
使用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、封裝數據庫操作...
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 以上述例子,判斷一個生產出...