我们下边介绍如何通过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()函数可以初始化数据库,它的相关代码如下:

  1. int NoteDAO::initDB()
  2. {
  3. auto sharedFileUtils = FileUtils::getInstance();
  4. string path = dbDirectoryFile();                                            ①
  5. bool isExist = false;
  6. isExist = sharedFileUtils->isFileExist(path);                                    ②
  7. if (!isExist) {
  8. log("NotesList.sqlite3 doesn't exist.");
  9. return -1;
  10. }
  11. sqlite3* db= NULL;
  12. if (sqlite3_open(path.c_str(), &db) != SQLITE_OK) {                             ③
  13. sqlite3_close(db);                                                  ④
  14. CCASSERT(false, "DB open failure.");                                    ⑤
  15. } else {
  16. char *err;
  17. string createSQL = "CREATE TABLE IF NOT EXISTS
  18. Note (cdate TEXT PRIMARY KEY, content TEXT)";               ⑥
  19. if (sqlite3_exec(db,createSQL.c_str(),NULL,NULL,&err) != SQLITE_OK) {           ⑦
  20. sqlite3_close(db);                                              ⑧
  21. CCASSERT(false, "Create table failure.");                               ⑨
  22. }
  23. sqlite3_close(db);                                                  ⑩
  24. }
  25. return 0;
  26. }

上述代码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主要代码如下:

  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表中插入一条数据。

更多内容请关注国内第一本Cocos2d-x 3.2版本图书《Cocos2d-x实战:C++卷》
本书交流讨论网站:http://www.cocoagame.net
更多精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com
欢迎加入Cocos2d-x技术讨论群:257760386
欢迎关注智捷iOS课堂微信公共平台

Cocos2d-x中创建SQLite数据库的更多相关文章

  1. 在项目中使用SQLite数据库小结

    ------------------------------------------------------------------------推荐: - VS2012 使用 1.0.84 版的库 - ...

  2. android中与SQLite数据库相关的类

    为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...

  3. Django中把SQLite数据库转换为Mysql数据库的配置方法

    我们在学习和开发Django的时候,一般是使用SQLite作为数据库.在正式讲网站部署上线是用MySQL数据库比较多.MySQL支持高并发的访问,而且相对于SQLite,MySQL性能更好.下面讲讲如 ...

  4. 在Android 开发中使用 SQLite 数据库笔记

    SQLite 介绍   SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PH ...

  5. Android 创建SQLite数据库(一)

    Android内置了轻量级的数据库SQLite,这里将自己理解作个记录,方便自己复习. 一.首先,创建SQLite数据库比较常见的方式是通过Android提供的SQLiteOpenHelper来实现, ...

  6. 在 Android 应用程序中使用 SQLite 数据库以及怎么用

    part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开 ...

  7. Android虚拟机中的sqlite数据库文件

    Android虚拟机中的sqlite数据库文件 ①

  8. 2014-08-01 ASP.NET中对SQLite数据库的操作——ADO.NET

    今天是在吾索实习的第18天.我主要学习了如何在ASP.NET中对SQLite数据库的操作,其基本操作如下: 添加引用System.Data.SQLite.dll(PS:在网页里面任意找到适合的.NET ...

  9. 在mysql数据库中创建Oracle数据库中的scott用户表

    在mysql数据库中创建Oracle数据库中的scott用户表 作者:Eric 微信:loveoracle11g create table DEPT ( DEPTNO int(2) not null, ...

随机推荐

  1. windows服务控制类

    /// <summary> /// 服务调用控制 /// </summary> public class WinServiceController { /// <summ ...

  2. Flash Builder 4.6 界面显示一半中文一半英文?

    Flash Builder 4.6 (简称 Flex 4.6 或 FB 4.6)启动后界面有时候会显示一半中文,一半英文(这种奇葩的情况一般发生在 FB 4.6 刚安装后或操作系统安装一个类似 SP1 ...

  3. 【M7】千万不要重载&&,||和,操作符

    1.C++对于真假值表达式采用“骤死式”评估方法,比如&&,||. if( p!=NULL && strlen(p)>10)   如果p为NULL,后面的strl ...

  4. Codeforces Beta Round #51 D. Beautiful numbers 数位dp

    D. Beautiful numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/55/p ...

  5. Codeforces Round #185 (Div. 2) C. The Closest Pair 构造

    C. The Closest Pair Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/312/p ...

  6. Codeforces Gym 100342D Problem D. Dinner Problem Dp+高精度

    Problem D. Dinner ProblemTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1003 ...

  7. Windows 窗体的.Net 框架绘图技术

    当编写一个典型的Windows 窗体程序时,窗体和控件的绘制.效果等操作是不需要特别加以考虑的.这是为什么呢?因为通过使用 .Net 框架,开发人员可以拖动一系列的控件到窗体上,并书写一些简单的与事件 ...

  8. 读《C# 和 Java 的比较》有感

    网上的一篇<C# 和 Java 的比较>(或者叫<Java 和 C# 的比较>)写的挺不错的,今天忽然搜索到. 自己刚刚接触C#,也不由自主地随时都拿来和Java做对比,所以就 ...

  9. iOS开发——动画篇Swift篇&常用动画总结

    UIView动画: UIView动画时最基本的动画,是直接对我们界面上控件进行简单的动画效果实现,如果你只需要用到一些简单的效果,那么这个很适合你,关于UIView动画实现恨简单, UIKit直接将动 ...

  10. C#_自动测试2_连连看外挂

    GUI自动化测试和做外挂的原理很相似,都是模拟用户的鼠标和键盘操作, 给自己的程序写自动化就是做测试,给别人的程序写自动化就是外挂了. 本文使用的技术也同样适用制作“对对碰”,"找茬&quo ...