2011-07-27 12 views
1

オリジナルの質問は「私は新しいアプリケーションで使いたいsqlite 3 db(辞書)を持っています。 DB構造?SQLite3 dbをcoredataにリバースエンジニア

これは私が問題を解決した方法です。ネット全体にたくさんの助けがあります。

私はDBを単純化し、コアデータモデルの作成を非常に簡単にしました。

このgreat siteのPythonスクリプトを使用して変換を管理しました。次のように

スクリプトは次のとおりです。私は、データベースが構築された後は

import sqlite3; 

inConn = sqlite3.connect('dictold.sqlite') 
outConn = sqlite3.connect('dictnew.sqlite') 

inCursor = inConn.cursor() 
outCursor = outConn.cursor() 

maxId = 0 
inCursor.execute("select * from lexicon") 
for row in inCursor: 

    if row[0] > maxId: 
     maxId = row[0] 

    # Create ZLEXICONENTITY entry 
    vals = [] 
    vals.append(row[3]) # Z_PK 
    vals.append(1) # Z_OPT 
    vals.append(2) # Z_ENT 
    vals.append(row[0]) # ZIND 
    vals.append(row[1]) # ZENGLISH 
    vals.append(row[2]) # ZGREEK 
    outConn.execute("insert into ZLEXICONENTITY values(?, ?, ?, ?, ?, ?)", vals) 


outConn.execute("update Z_PRIMARYKEY set Z_MAX=?", [maxId]) 

outConn.commit() 

、私はコアデータモデルに接続する問題を抱えていました。私は "モデルはデータベースと一致しませんでした"というメッセージを受け取りました。

解決策は、Core Dataにモデルから空のデータベースを作成させ、Core Dataにデータ自体をインポートさせることです。

私は最初にsqliteデータベース(Pythonで作成)をsqlにエクスポートしてdb.sql(imaginative!)ファイルを呼び出しました。メタデータテーブルではなく、データテーブルと主キーテーブルのみをエクスポートしました。コマンドラインでもこれを行うことができます。私はSQLiteManagerというアプリを使いました。次のように

コアデータのすべてのコードは、永続ストアコントローラを扱う以外の株式のもの..です

このコードは次のとおりです。

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { 

    if (persistentStoreCoordinator_ != nil) { 
     return persistentStoreCoordinator_; 
    } 


    NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"db.sql"]; 

    // set up the backing store 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    // If the expected store doesn't exist, copy the default store. 
    if (![fileManager fileExistsAtPath:storePath]) { 
     NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"dict" ofType:@"sqlite"]; 
     if (defaultStorePath) { 
      [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL]; 
     } 
    } 

    NSURL *storeURL = [NSURL fileURLWithPath:storePath]; 

    NSError *error = nil; 
    persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { 

     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    }  

    return persistentStoreCoordinator_; 
} 

多くは、おそらく、このすべてを知っているが、私は厳しいしなければなりませんでしたそれは数日間それを出す。これを行う簡単な方法もあります。しかし、おそらくそれはあなたがモデルを作成し、自分で店を移行する必要があります、

コアデータは、既存のスキーマからモデルを推測することはできません

答えて

1

番..他人を助けるだろう。

+0

OK、ありがとうございました。 –

+0

最後に、sqlite dbを使い、プロジェクトに追加する方が簡単でした。 –

+0

データを移行してコアデータストアにデータを読み込む際に問題がありましたか?または、コアデータを使用せず、代わりにSQLiteを使用することを選択しましたか? – ImHuntingWabbits

関連する問題