iOS SQLite与Android SQLite等效

时间:2014-06-26 15:48:47

标签: android ios sqlite

我是Objective-C的新程序员。我创建了一个Android应用程序,并且我已经集成了SQLite。我想在iOS中构建相同的应用程序。在Android for SQLite操作中,我创建了一个从Content Provider扩展的类:

public class MyCProvider extends ContentProvider {
...
...
}

我也覆盖了这种方法: boolean onCreate()方法:

@Override
    public boolean onCreate() {
        dbHelper = new MySQLiteOpenHelper(getContext(), MySQLiteOpenHelper.DATABASE_NAME, null, MySQLiteOpenHelper.DATABASE_VERSION);
        return dbHelper != null;
    }



@Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
...
}



 @Override
        public String getType(Uri uri) {
...
}

@Override
    public Uri insert(Uri uri, ContentValues values) {
        SQLiteDatabase db = dbHelper.getWritableDatabase();

        String nullColumnHack = null;

        long id = -1;
        Uri contentURI = null;

        switch (uriMatcher.match(uri)) {
            case GROUP_ALL_ROWS:
                contentURI = GROUP_CONTENT_URI;
                id = db.insert(USEFUL_NUMBER_GROUP_TABLE_NAME, nullColumnHack, values);
                break;
...
...
}

我想知道Objective-C中的这种方法等价。 有什么想法吗?

1 个答案:

答案 0 :(得分:3)

SQLite直接与iOS一起提供,您只需使用其native C API。 Apple没有提供任何包装。

态度似乎是你可以直接使用SQLite,或者你可以使用Core Data,这实际上是一个非常不同的东西 - 它是一个可查询的对象图,它隐含地依赖于一个不透明的存储方法,它可以是一个基于SQLite的关系数据库,如果你喜欢,但核心数据显然不是关系数据库。您可以而且应该针对下面的SQL存储进行优化,如果这是您选择的存储,但数据库本身具有私有模式,并且不会直接查询。

因此,没有等同于SQLiteOpenHelper。如果你想使用SQLite,那么你需要为自己做开放,创建,迁移等工作。

iOS也没有等同于ContentProvider,因为这是一个允许在应用程序之间共享数据的形式化模型结构,但iOS在这种意义上并不真正在应用程序之间共享数据。来自同一开发人员的应用程序可以共享磁盘存储,所有应用程序可以通过URL架构等相互打开,但是您无法编写不同应用程序可以与之交互的代码。因此,您只需构建您认为最合适的任何类型的模型对象,其生命周期和界面将是您明确决定的任何内容。