cocos2d-x sqlite视频讲解
相较于基础篇,本次内容的代码编写效率有了显著提升。在代码实现上,省去了 stmt 句柄,并且将 SQL 语句集成到 sqlite3_exec() 方法之中,使得代码更加简洁高效。
实用 C 语言函数
在开发过程中,我们还学习了 C 语言中两个强大的函数:
atof()函数:该函数能够直接将字符串转换为double类型,非常实用。sprintf()函数:可以将int类型转换为char类型。不过需要注意的是,在 Xcode 里,char *并不被支持。因此,在使用sprintf()方法时,请将char *sum改为char sum[n],否则会导致内存读取错误。
SQLite 使用注意事项
数据库打开问题
在使用 SQLite 时,若要在不同方法中调用修改数据的操作,一定要记得打开数据库,否则会出现相应的错误。
内存管理问题
打开数据库并完成数据操作之后,务必关闭数据库。若不关闭,会造成内存泄漏,影响程序的性能和稳定性。
查询 SQLite 表的数据返回
下面我们来看看查询 SQLite 表的数据返回情况。假设一个查询结果如下:
Name | Age
-----------------------
Alice | 43
Bob | 28
Cindy | 21
这里有两列(M == 2)和三行(N == 3),因此结果表共有 8 个条目。假设结果表存储在数组 azResult 中,那么 azResult 的内容如下:
azResult[0] = "Name";
azResult[1] = "Age";
azResult[2] = "Alice";
azResult[3] = "43";
azResult[4] = "Bob";
azResult[5] = "28";
azResult[6] = "Cindy";
azResult[7] = "21";
判断表是否存在
在开发过程中,我们常常需要查询表是否存在。我发现一些文章中的方法较为繁琐,而我自己的方法则更加巧妙。
原理分析
我们可以根据执行语句的返回值来判断表是否存在。定义 SQLITE_ERROR 为 1,表示 SQL 错误或缺少数据库。执行语句返回 1 有两种情况:数据库错误和 SQL 语句本身语法错误。当排除这两种错误后,若返回 1,则说明表不存在。
代码示例
// 假设 this->mySqlite 是已经打开的数据库指针
// 查询 myPrizeList 表
int result2 = sqlite3_exec(this->mySqlite, "select count(*) from myPrizeList", NULL, NULL, NULL);
CCLog("%d", result2);
// 若输出 1,排除其他错误后,说明表不存在
// 查询 myPrize 表
int result3 = sqlite3_exec(this->mySqlite, "select count(*) from myPrize", NULL, NULL, NULL);
CCLog("%d", result3);
// 若输出 0,说明表存在
完整代码示例
void HelloWorld::doTest()
{
// 1. 新建数据库 mySqlite
sqlite3 *mySqlite = NULL;
// sql 语句执行后的返回结果
int result;
// sql 操作语句
std::string sql;
// 数据库存放的地址,是在本地的 app 下面
std::string path;
// CCFileUtils::sharedFileUtils()->getWritablePath() 这个方法会取出本地存储路径,将我们的数据库存放到 app 下面
path = CCFileUtils::sharedFileUtils()->getWritablePath() + "mySqlite.db";
// 输出看下数据库的文件路径
CCLOG("%s", path.c_str());
// 后续可以继续添加数据库操作代码
}
以上就是关于 cocos2d-x 中使用 SQLite 的相关内容,希望对大家有所帮助。