返回介绍

创建并打开数据库

发布于 2025-04-26 18:09:30 字数 1707 浏览 0 评论 0 收藏 0

在使用 SQLite3 之前,必须要先打开数据库。使用 sqlite3_open() 方法可以打开一个已存在的数据库。如果在当前位置没有任何数据库,那么就会自动创建一个。使用下面的代码可以打开一个数据库:

sqlite3 *database;
int result = sqlite3_open("/path/to/database/file", &database);

如果 result 与常量 SQLITE_OK 的值相等,那么说明数据库已经被成功打开了。注意,数据库文件的路径一定要使用 C 语言的字符串,而不能传递一个 NSString。因为 SQLite3 是用 C 语言写的,它根本无法处理 Objective-C 中的 NSString 类型。不过幸运的是,有个方法可以将 NSString 类型的实例转换成 C 语言的字符串:

const char *stringPath = [pathString UTF8String];

在 SQLite3 数据库上操作完毕后,记得关闭数据库:

sqlite3_close(database);

数据库中的所有数据都存储在数据表中。你可以通过写一个 SQL 的 CREATE 语句来创建一个新表,但是需要使用 sqlite3_exec 方法来执行。代码如下:

char *errorMsg;
const char *createSQL = "CREATE TABLE IF NOT EXISTS PEOPLE(ID
    INTEGER PRIMARY KEY AUTOINCREMENT, FIELD_DATA TEXT)";
int result = sqlite3_exec(database, createSQL, NULL, NULL, &
    errorMsg);

如上文那样,我们依然需要检查 result 的值来判断命令是否成功执行。如果没有执行成功,会抛出一个包含错误描述信息的 errorMsg。在 SQLite3 中,方法 sqlite3_exec 可以用来执行任何不返回结果集的命令,如 update、insert 和 delete 命令。如果要从数据库中返回检索结果,操作步骤要稍微复杂些。首先,我们需要准备好检索命令字符串,如下面的执行 SQL SELECT 命令:

NSString *query = @"SELECT ID, FIELD_DATA FROM FIELDS ORDER BY ROW
        ";
sqlite3_stmt *statement;
int result = sqlite3_prepare_v2(database, [query UTF8String],
    -1, &statement, nil);

如果 result 与 SQLITE_OK 值相等,说明查询已经准备就绪,现在可以遍历结果集了。下面的代码展示了如何遍历结果集,并从每条记录中分别获取一个 int 类型和一个 NSString 类型的数据:

while (sqlite3_step(statement) == SQLITE_ROW) {
    int rowNum = sqlite3_column_int(statement, 0);
    char *rowData = (char *)sqlite3_column_text(statement, 1);
    NSString *fieldValue = [[NSString alloc] initWithUTF8String:
        rowData];
    // 数据的后续操作


}
sqlite3_finalize(statement);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。