Android和IOS中的SQLite数据库之间的差异

时间:2013-02-09 23:08:58

标签: android ios sqlite porting

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

现在,我在iOS中也使用过SQLite。但是,我记得它比Android等效的工作要多得多。特别是在查询方面。

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

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

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

3 个答案:

答案 0 :(得分:2)

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

您应该查看sqlite文档以使用sqlite with C/C++

答案 1 :(得分:1)

Kekoa是对的。或者,你可以在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];  

答案 2 :(得分:1)

我一直致力于帮助在iOS(使用ARC)和Android上简单访问SQLite数据库。该工具接受sqlite数据库文件并自动生成基类和一些帮助程序类来处理CRUD查询。还有如何将其用于iOS和Android的示例。我希望这会有所帮助。 https://github.com/pl4u/flyingdb