修改數據時,涉及的SQL語句有insert、update和delete語句,這3個SQL語句均可以帶參數。修改數據的具體步驟以下所示。
(1) 使用sqlite3_open函數打開數據庫。
(2) 使用sqlite3_prepare_v2函數預處理SQL語句。
(3) 使用sqlite3_bind_text函數綁定參數。
(4) 使用sqlite3_step函數執行SQL語句。
(5) 使用sqlite3_finalize和sqlite3_close函數釋放資源。
這與查詢數據少了提取字段數據這個步驟,其餘步驟是同樣的。下面咱們看看代碼部分。
一、插入備忘錄
html
[html] view plaincopysql
NoteDAO.cpp中的NoteDAO::create插入備忘錄的代碼以下: 數據庫
int NoteDAO::create(string pDate, string pContent) 微信
{ 函數
//初始化數據庫 測試
initDB(); 網站
sqlite3* db= NULL; spa
string path = dbDirectoryFile(); .net
if (sqlite3_open(path.c_str(), &db) != SQLITE_OK) { code
sqlite3_close(db);
CCASSERT(false, "DB open failure.");
} else {
string sqlStr = "INSERT OR REPLACE INTO note (cdate, content) VALUES (?,?)"; ①
sqlite3_stmt *statement;
//預處理過程
if (sqlite3_prepare_v2(db, sqlStr.c_str(), -1, &statement, NULL) == SQLITE_OK) {
//綁定參數開始
sqlite3_bind_text(statement, 1, pDate.c_str(), -1, NULL); ②
sqlite3_bind_text(statement, 2, pContent.c_str(), -1, NULL);
//執行插入
if (sqlite3_step(statement) != SQLITE_DONE) { ③
CCASSERT(false, "Insert Data failure.");
}
}
sqlite3_finalize(statement);
sqlite3_close(db);
}
return 0;
}
上述代碼第①行是插入數據的SQL語句,其中的問號(它是佔位符)就是要綁定的參數。第②行代碼sqlite3_bind_text(statement, 1, pDate.c_str(), -1, NULL)是綁定第一個參數。
第③行代碼中的sqlite3_step(statement)語句執行插入語句,常量SQLITE_DONE表示執行完成。
爲了可以調用NoteDAO中插入備忘錄函數create,咱們須要在HelloWorldScene場景中調用。HelloWorldScene.cpp主要代碼以下:
[html] view plaincopy
void HelloWorld::OnClickMenu2(cocos2d::Ref* pSender)
{
string currentTime = MyUtility::getCurrentTime();
log("%s",currentTime.c_str());
NoteDAO::create(currentTime, "歡迎使用MyNote.");
}
HelloWorld::OnClickMenu2函數是玩家點擊Insert Data菜單時候回調的函數。其中MyUtility::getCurrentTime()語句是得到當前時間。
提示 在Win32平臺,採用Visual Studio 進行編譯運行時候中文會有一些麻煩!咱們須要將源代碼文件另存爲Unicode(UTF-8無簽名)格式,能夠參考4.2.5一節解決方法,有的時候會有以下編譯錯誤:error C2001: 常量中有換行符。咱們須要在中文字符後面添加一些英文字符,或者「啊」等特殊的中文字符。例如:"歡迎使用MyNote。"這個字符串後面是中文句號「。」結尾,編譯的時候就會出現error C2001錯誤,本例中咱們採用英文句號「.」結尾,編譯就不會有錯誤,可是會有警告。這種問題只會出如今Win32平臺,其它平臺沒有問題。爲了省事咱們測試時候能夠不採用中文字符。
二、刪除備忘錄
NoteDAO.cpp中的NoteDAO::remove刪除備忘錄的代碼以下:
i
[html] view plaincopy
nt NoteDAO::remove(string pDate)
{
//初始化數據庫
initDB();
sqlite3* db= NULL;
string path = dbDirectoryFile();
if (sqlite3_open(path.c_str(), &db) != SQLITE_OK) {
sqlite3_close(db);
CCASSERT(false, "DB open failure.");
} else {
string sqlStr = "DELETE from note where cdate =?";
sqlite3_stmt *statement;
//預處理過程
if (sqlite3_prepare_v2(db, sqlStr.c_str(), -1, &statement, NULL) == SQLITE_OK) {
//綁定參數開始
sqlite3_bind_text(statement, 1, pDate.c_str(), -1, NULL);
//執行刪除
if (sqlite3_step(statement) != SQLITE_DONE) {
CCASSERT(false, "Delete Data failure.");
}
}
sqlite3_finalize(statement);
sqlite3_close(db);
}
return 0;
}
爲了可以調用NoteDAO中刪除備忘錄函數remove,咱們須要在HelloWorldScene場景中調用。HelloWorldScene.cpp主要代碼以下:
[html] view plaincopy
void HelloWorld::OnClickMenu3(cocos2d::Ref* pSender)
{
NoteDAO::remove("2008-08-16 10:01:02");
}
HelloWorld::OnClickMenu3函數是玩家點擊Delete Data菜單時候回調的函數。
三、修改備忘錄
NoteDAO.cpp中的NoteDAO::modify修改備忘錄的代碼以下:
[html] view plaincopy
int NoteDAO::modify(string pDate, string pContent)
{
//初始化數據庫
initDB();
sqlite3* db= NULL;
string path = dbDirectoryFile();
if (sqlite3_open(path.c_str(), &db) != SQLITE_OK) {
sqlite3_close(db);
CCASSERT(false, "DB open failure.");
} else {
string sqlStr = "UPDATE note set content=? where cdate =?";
sqlite3_stmt *statement;
//預處理過程
if (sqlite3_prepare_v2(db, sqlStr.c_str(), -1, &statement, NULL) == SQLITE_OK) {
//綁定參數開始
sqlite3_bind_text(statement, 1, pContent.c_str(), -1, NULL);
sqlite3_bind_text(statement, 2, pDate.c_str(), -1, NULL);
//執行修改數據
if (sqlite3_step(statement) != SQLITE_DONE) {
CCASSERT(false, "Upate Data failure.");
}
}
sqlite3_finalize(statement);
sqlite3_close(db);
}
return 0;
}
爲了可以調用NoteDAO中修改備忘錄函數modify,咱們須要在HelloWorldScene場景中調用。HelloWorldScene.cpp主要代碼以下:
[html] view plaincopy
void HelloWorld::OnClickMenu4(cocos2d::Ref* pSender)
{
NoteDAO::modify("2008-08-16 10:01:02", "修改數據。");
}
HelloWorld::OnClickMenu4函數是玩家點擊Update Data菜單時候回調的函數。
更多內容請關注國內第一本Cocos2d-x 3.2版本圖書《Cocos2d-x實戰:C++卷》
本書交流討論網站:http://www.cocoagame.net
更多精彩視頻課程請關注智捷課堂Cocos課程:http://v.51work6.com
歡迎加入Cocos2d-x技術討論羣:257760386
歡迎關注智捷iOS課堂微信公共平臺