`

Cocos2d-x中创建SQLite数据库

阅读更多

我们下边介绍如何通过SQLite3提供的API实现MyNotes数据库创建。创建数据库一般需要经过如下三个步骤。
(1) 使用sqlite3_open函数打开数据库。
(2) 使用sqlite3_exec函数执行Create Table语句,创建数据库表。
(3) 使用sqlite3_close函数释放资源。
在这个过程中,我们使用了三个SQLite3 API函数,它们都是纯C语言函数。在Cocos2d-x中通过C++调用C函数当然不是什么问题,NoteDAO.cpp中的NoteDAO::initDB()函数可以初始化数据库,它的相关代码如下:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. int NoteDAO::initDB()  
  2. {  
  3.     auto sharedFileUtils = FileUtils::getInstance();  
  4.   
  5.   
  6.     string path = dbDirectoryFile();                                            ①  
  7.   
  8.   
  9.     bool isExist = false;  
  10.     isExist = sharedFileUtils->isFileExist(path);                                    ②  
  11.     if (!isExist) {  
  12.         log("NotesList.sqlite3 doesn't exist.");  
  13.         return -1;  
  14.     }  
  15.   
  16.   
  17.     sqlite3* dbNULL;  
  18.     if (sqlite3_open(path.c_str(), &db) != SQLITE_OK) {                             ③  
  19.         sqlite3_close(db);                                                  ④  
  20.         CCASSERT(false, "DB open failure.");                                    ⑤  
  21.     } else {  
  22.         char *err;  
  23.         string createSQL = "CREATE TABLE IF NOT EXISTS   
  24.                                 Note (cdate TEXT PRIMARY KEY, content TEXT)";               ⑥  
  25.   
  26.   
  27.         if (sqlite3_exec(db,createSQL.c_str(),NULL,NULL,&err) != SQLITE_OK) {           ⑦  
  28.             sqlite3_close(db);                                              ⑧  
  29.             CCASSERT(false, "Create table failure.");                               ⑨  
  30.         }  
  31.         sqlite3_close(db);                                                  ⑩  
  32.     }  
  33.   
  34.   
  35.     return 0;  
  36. }  



上述代码initDB()函数是初始化数据库函数,通过这个函数创建数据库中的表等对象,每次对数据库进行CRUD操作时候都会调用它。这个函数中处理流程是先判断数据库文件NotesList.sqlite3是否存在,如果不存在就是初始化,如果已经存在则跳出该函数。其中代码第①行调用dbDirectoryFile()函数,该函数是我们自己封装的函数,用来获得可写入目录中数据库文件NotesList.sqlite3全路径。第②行代码是判断可写入目录中数据库文件NotesList.sqlite3是否存在,如果不存在程序跳出该函数。
第③行的代码是创建数据库,其中sqlite3_open函数的第一个参数是数据库文件的完整路径,需要注意的是在SQLite3函数中接受的是const char*类型数据,需要将string类型数据使用c_str()函数转换为const char*类型;第二个参数为sqlite3指针变量db的地址;返回值是int类型。在SQLite3中,我们定义了很多常量,如果返回值等于常量SQLITE_OK,则说明创建成功。如果打开数据库失败,我们需要使用第④行代码sqlite3_close(db)关闭数据库释放资源,类似的还有第⑧行和第⑩行代码。第⑤行代码使用CCASSERT断言宏,断言宏是判断第一个参数false情况下抛出异常,终止程序运行,并且输出把第二个参数作为日志内容输出。
第⑥行代码是编写建表SQL语句,代码如下:
CREATE TABLE IF NOT EXISTS Note (cdate TEXT PRIMARY KEY, content TEXT)
建表语句CREATE TABLE IF NOT EXISTS可以判断表是否存在,不存在则创建,存在则不创建。如果使用建表语句CREATE TABLE,在表存在的情况下,这会导致数据抛出异常。类似的还有第⑨行代码。
第⑦行代码是执行建表语句,其中语句sqlite3_exec(db,createSQL.c_str(),NULL,NULL,&err)执行第⑥行的建表SQL语句,sqlite3_exec函数的第一个参数是sqlite3指针变量db的地址,第二个参数是要执行的SQL语句,第三个参数是要回调的函数,第四个参数是要回调函数的参数,第五个参数是执行出错的错误信息。
为了能够调用NoteDAO中的初始化数据库函数initDB(),我们需要在HelloWorldScene场景中调用。HelloWorldScene.cpp主要代码如下:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. void HelloWorld::OnClickMenu1(cocos2d::Ref* pSender)  
  2. {  
  3.     NoteDAO::initDB();  
  4.     NoteDAO::create("2008-08-16 10:01:02", "初始化数据.");  
  5. }  



HelloWorld::OnClickMenu1函数是玩家点击Init DB菜单时候回调的函数,在该函数中通过NoteDAO::initDB()语句实现数据库的初始化。NoteDAO中initDB()函数是静态函数,需要实例化NoteDAO就可以直接调用。下面的NoteDAO::create("2008-08-16 10:01:02", "初始化数据.")语句是调用NoteDAO中的create函数在Note表中插入一条数据。

 

 

更多内容请关注最新Cocos图书《Cocos2d-x实战 C++卷》
本书交流讨论网站:http://www.cocoagame.net
更多精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com
欢迎加入Cocos2d-x技术讨论群:257760386


《Cocos2d-x实战 C++卷》现已上线,各大商店均已开售:

京东:http://item.jd.com/11584534.html

亚马逊:http://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

当当:http://product.dangdang.com/23606265.html

互动出版网:http://product.china-pub.com/3770734

 

《Cocos2d-x实战 C++卷》源码及样章下载地址:

源码下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1 

样章下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1

欢迎关注智捷iOS课堂微信公共平台
分享到:
评论

相关推荐

    Cocos2d-x 3.x游戏开发实战pdf含目录

    游戏数据存储方面,Cocos2d-x提供了SQLite数据库支持,用于本地数据存储。此外,还会讲解如何利用JSON或XML进行数据序列化和反序列化,便于游戏数据的读写和交换。 最后,本书可能会探讨性能优化技巧,如内存管理、...

    cocos2d-x游戏源码 三国策略游戏源码

    Tiled Map允许创建复杂的多层地图,并在cocos2d-x中轻松加载和渲染。 5. **事件处理与用户交互**:玩家的触摸或点击需要被正确处理以响应游戏命令。源码中会包含事件监听和处理机制,例如单位选择、指令下达等。 6...

    cocos2d-x数据库的使用demo

    在Cocos2d-x中,你需要在适当的地方(如初始化函数或游戏场景加载时)打开SQLite数据库。这可以通过调用`sqlite3_open()`函数实现,传入数据库文件路径作为参数。如果数据库文件不存在,SQLite会自动创建。 3. **...

    cocos2d-x 《保卫萝卜》源代码

    Cocos2d-x提供了UserDefault类用于存储用户偏好和游戏进度,或者开发者可能采用了SQLite数据库或JSON文件来保存更复杂的数据。 总的来说,《保卫萝卜》的源代码揭示了Cocos2d-x在2D游戏开发中的应用,涵盖了游戏...

    cocos2d-x封装的sqlite3开源库

    在cocos2d-x中,为了方便开发者处理数据存储,它封装了SQLite3这个轻量级的关系型数据库系统。SQLite3是一个嵌入式数据库,它不需要单独的服务器进程,并且能够直接与应用程序的代码集成。以下将详细讲解cocos2d-x...

    贪吃蛇cocos2d-x

    Cocos2d-x提供了UserDefault类来存储这类数据,或者你可以选择其他持久化技术如SQLite数据库。 9. **性能优化**:对于实时游戏,性能至关重要。在贪吃蛇示例中,你可以学习到如何避免不必要的计算,优化渲染效率,...

    cocos2d-x操作数据库

    本篇文章将深入探讨如何在Cocos2d-x中操作SQLite数据库。 首先,我们需要了解在Cocos2d-x中集成SQLite的基本步骤。这通常涉及到以下几个关键点: 1. **引入SQLite库**:Cocos2d-x并不直接支持SQLite,因此需要手动...

    Cocos2D-X开发学习笔记-游戏数据存储项目实例(上)

    2. **偏好设置(Prefrences)**:Cocos2D-X中的`UserDefault`类提供了类似手机系统偏好设置的功能,可以方便地存储键值对。例如,你可以用`UserDefault::getInstance()->setIntegerForKey()`存储整数,`UserDefault::...

    Cocos2D-x权威指南完整版

    9. **音频与视频支持**:如何在Cocos2D-x中播放音频文件,以及实现简单的视频播放功能。 10. **网络编程**:学习如何使用Cocos2D-x的网络模块进行数据交换,如HTTP请求、WebSocket通信等。 11. **持久化数据**:...

    精通COCOS2D-X游戏开发 进阶卷-565_14177674

    4. **动画与特效**:讲述Cocos2d-x中的动画系统,包括帧动画、骨骼动画的实现,以及粒子系统和过渡效果的应用。 5. **用户交互**:讲解如何处理触摸事件、键盘事件,实现游戏的输入控制,以及UI组件的创建和布局。 ...

    cocos2d-x 3.8 坦克大战

    在cocos2d-x中,这通常通过Sprite(精灵)类来实现,每个坦克是一个独立的精灵对象,通过设置其动作、旋转和位置,模拟坦克在屏幕上的移动。射击系统则通过创建和发射子弹精灵,配合物理引擎实现弹道计算,确保子弹...

    魔塔cocos2d-x源码

    1. **游戏场景管理**:Cocos2d-x中的Scene类代表游戏的一个屏幕或阶段,源码中会展示如何创建和切换不同的游戏场景,如主菜单、游戏地图、战斗界面等。 2. **精灵(Sprite)与图层(Layer)**:在游戏开发中,精灵...

    cocos2d-x 打飞机

    虽然这个“打飞机”游戏缺少数据库和文件写入操作,但cocos2d-x支持数据存储,例如使用UserDefault进行轻量级的本地数据保存,或者通过SQLite数据库进行更复杂的数据管理。如果游戏需要记录分数、等级等信息,可以...

    Cocos2D-x FlappyBird 代码及资源文件.zip

    1. **游戏对象和精灵(Sprites)**:Cocos2D-x中的精灵是游戏场景的基本元素,用来展示静态或动态的2D图像。FlappyBird中的主角小鸟、管道、地面等都是通过精灵来创建的。项目中的“images”文件夹包含了这些精灵的...

    cocos2d-x part4

    Sprite是cocos2d-x中的基本图像元素,可以进行移动、旋转、缩放等操作。通过组合多个Sprite,可以创建复杂的角色或物件。动画则通过SpriteFrameCache管理和Animation类实现,支持帧序列动画和骨骼动画,使得游戏对象...

    cocos2d-x魔塔源代码

    源码会展示如何在cocos2d-x中实现这些逻辑。 3. **数据结构与算法**:魔塔游戏中,地图、物品、敌人等信息通常需要通过数据结构(如数组、链表、图)进行存储和管理。理解这些数据结构的使用有助于分析源码的结构。...

    cocos2d-js 简陋的排行榜

    cocos2d-js 是一个强大的开源游戏开发框架,专为Web平台设计,它基于cocos2d-x引擎,并使用JavaScript进行编程。cocos2d-js 提供了丰富的API,使得开发者能够轻松地创建2D游戏、互动媒体以及应用。在描述中提到的...

    Cocos2D-X游戏开发技术精解

    《Cocos2D-X游戏开发技术精解》是一本深入探讨Cocos2D-X游戏引擎的专著,旨在帮助开发者掌握使用Cocos2D-X进行游戏制作的核心技术和实践技巧。Cocos2D-X是一个跨平台的游戏开发框架,支持iOS、Android、Windows等多...

    超级玛丽(cocos2d-x版)

    Cocos2d-x提供了UI组件,如按钮、文本框等,用于创建用户友好的界面。 9. **持久化数据**:保存玩家的进度、分数等信息,可能需要用到SQLite数据库或文件系统。 10. **多平台支持**:Cocos2d-x的一个重要优势是跨...

    cocos2d-x完整RPG游戏源代码

    《cocos2d-x完整RPG游戏源代码》是一份基于Cocos2d-x框架开发的角色扮演游戏(Role-Playing Game,RPG)的源代码集合。Cocos2d-x是一款跨平台的游戏开发库,它使用C++语言编写,支持iOS、Android、Windows等多个操作...

Global site tag (gtag.js) - Google Analytics