0

私は最初のiOSアプリを開発しています。実は最近書いたAndroidアプリの移植版です。私は本当にデータベースの部分に出くわしました!

これは、行ごとにいくつかの文字列/intを格納する単純なデータベースです。Android上のSQLite3は簡単でした!

Core Data、Core Data Stack、SQLite3チュートリアルを学習してみました... XCodeの異なるバージョン用に書かれているので、ガベージコレクション、単純なタイプミス、またはあまりにもなじみのないものを使用しないでください。

10万を超えるデータを保存することは期待していません。代わりにXML/plistを使用する必要がありますか、それともCore Dataは時間投資の価値がありますか?

4

2 に答える 2

3

Fast solution is to use plain sqlite3 as you did earlier.

Core Data works great, but it requires deep understanding what are you doing, and how it works. It gives you some flexibility, auto migrations, and lots of another features. But it also contain a lot of places where you could shoot yourself in the leg.

I had troubles with many small things. For example auto migration from v.1 -> v.2 works well and v.2 -> v.3 works well too. but it can't migrate from v.1 -> v.3 itself.

于 2013-02-18T09:19:02.670 に答える
3

「sqlite データベースからデータを取得する」ために CoreData を使用しないでください。「sqlite データベースからデータを取得する」必要がある場合は、FMDBなどを使用します。FMDB は、iOS 用の sqlite3 のラッパーです。ステートメントをすぐにコピーselectして、FMDB にラップできるはずです。

CoreData を使用しても、SQL 言語で考えることは混乱を招くだけです。CoreData を使用する場合は、CoreData が永続ストレージとして sqlite db を使用しているという事実を無視し、SQL 言語について知っていることをすべて忘れてください。

CoreData は、データベース インターフェイスではなく、オブジェクト グラフ フレームワークです。デフォルトで sqlite db にデータを保存することがありますが、プログラマーの観点からはオブジェクトの使用法です。行やテーブルに関してではありません。

FMDBに戻ります。そこで、データベースが次のように開かれます。

FMDatabase *theDatabase = [FMDatabase databaseWithPath:pathToDB];

select格納された行は次のステートメントで取得されます。

FMResultSet *setOfRows = [db executeQuery:@"select * from tableName where attribute = ?", @"some criteria'"];

次に、次を使用して取得した行を反復処理しますwhile

while ([setOfRows next]) {
    NSLog(@"%d %@ %@ %f", // simply print to the console
          [rs intForColumn:@"integerColumn"],
          [rs stringForColumn:@"attribute"],
          [rs dateForColumn:@"dateColumn"],
          [rs doubleForColumn:@"doubleValue"]); 
}

Android でデータベース レイアウトを設計するために行ったすべての作業を保持できるはずです。アクセス部分を包むだけ。構文の詳細については、FMDBの github ページに適切な readme があります。

于 2013-02-18T10:41:56.313 に答える