2011-10-27 16 views
7

SQLiteを永続ストアとして使用するCoreDataモデルがあります。各レコードに何らかの処理をした後、多数の行を挿入する必要があります。これらのコマンドをSQLiteに送信する方法はありますか?SQLiteとCoreDataの一括挿入

PRAGMA synchronous=OFF 
PRAGMA count_changes=OFF 
PRAGMA journal_mode=MEMORY 
PRAGMA temp_store=MEMORY 

完了には数時間かかるので、処理時間を短縮する必要があります。

ご了承ください。

おかげ

答えて

12

ストアコーディネータにお店を追加するときは、プラグマを指定することができます。

NSMutableDictionary *pragmaOptions = [NSMutableDictionary dictionary]; 
[pragmaOptions setObject:@"OFF" forKey:@"synchronous"]; 
[pragmaOptions setObject:@"OFF" forKey:@"count_changes"]; 
[pragmaOptions setObject:@"MEMORY" forKey:@"journal_mode"]; 
[pragmaOptions setObject:@"MEMORY" forKey:@"temp_store"]; 
NSDictionary *storeOptions = 
    [NSDictionary dictionaryWithObject:pragmaOptions forKey:NSSQLitePragmasOption]; 
NSPersistentStore *store; 
NSError *error = nil; 
store = [psc addPersistentStoreWithType:NSSQLiteStoreType 
      configuration: nil 
      URL:url 
      options:storeOptions 
      error:&error]; 

Persistent Store Featuresから適応)

私は強くも「効率的にデータのインポート」を読むことをお勧め。

関連資料: NSSQLitePragmasOption Efficiently Importing Data

+0

おかげで、あなたはこのjournal_modeメモリと私のベーコンを保存している!!!! – SpaceDog

+0

メモリモードの結果を知っておく必要があります。何らかの不具合(クラッシュ、例外、強制終了など)が発生した場合、インメモリジャーナルにあるデータが失われます。これがあなたの望むものなら:それに行きなさい。 –

+0

にはjournal_mode = OFFモードがありますか? – SpaceDog