2

我的任务是将几个月前构建的 Android 应用程序移植到 iOS 上。

现在,我过去也曾在 iOS 中使用过 SQLite。但是,我记得它比 Android 同类产品要多得多。特别是在查询方面。

在 Android 中,我能够使用以下命令(见下文)执行查询,其中db是 SQLite 的实例,dbName()是返回数据库名称的方法,getFieldNames()返回字段名称字符串的数组where包含 where 子句

Cursor result = db.query(dbName(), getDBFieldNames() , where,null,null,null,null);

我想在 SQLite3 的 iOS 版本中使用这样一个漂亮而干净的db.query命令。但是,它(或类似的东西)是否存在,因为我找不到它?

4

3 回答 3

2

不同之处在于您将使用用于 sqlite 的 C api,它比 Java 更难使用。它肯定是非常不同的,所以不要指望它会以相同的方式工作。

您应该查看 sqlite 文档,了解如何将sqlite 与 C/C++ 结合使用。

于 2013-02-09T23:34:09.210 回答
1

可可亚是对的。或者,您可以在 iOS 中使用FMDB,它为您提供了一个很好(但仍然非常轻量级)的 SQLite 包装器。该 API 将与您熟悉的 API 略有不同,但 FMDB 可让您摆脱 SQLite C 接口的杂草。


因此,在 FMDB 中,您可以使用以下命令打开数据库:

FMDatabase *db = [FMDatabase databaseWithPath:dbPath];

您可以像这样打开您的记录集:

FMResultSet *rs = [db executeQuery:@"select rowid,* from test where a = ?", @"hi'"];

您可以像这样遍历结果集的行:

while ([rs next]) {
    // just print out what we've got in a number of formats.
    NSLog(@"%d %@ %@ %@ %@ %f %f",
          [rs intForColumn:@"c"],
          [rs stringForColumn:@"b"],
          [rs stringForColumn:@"a"],
          [rs stringForColumn:@"rowid"],
          [rs dateForColumn:@"d"],
          [rs doubleForColumn:@"d"],
          [rs doubleForColumn:@"e"]);
}

您可以像这样关闭结果集:

[rs close];  
于 2013-02-10T03:06:07.210 回答
1

我一直在开发一种工具来帮助在 iOS(使用 ARC)和 Android 上轻松访问 SQLite 数据库。该工具接收一个 sqlite 数据库文件并自动生成基类和一些帮助类来处理 CRUD 查询。还有一些关于如何在 iOS 和 Android 上使用它的示例。我希望这会有所帮助。 https://github.com/pl4u/flyingdb

于 2014-04-05T19:03:02.963 回答