オリジナルの質問は「私は新しいアプリケーションで使いたい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_;
}
多くは、おそらく、このすべてを知っているが、私は厳しいしなければなりませんでしたそれは数日間それを出す。これを行う簡単な方法もあります。しかし、おそらくそれはあなたがモデルを作成し、自分で店を移行する必要があります、
コアデータは、既存のスキーマからモデルを推測することはできません
OK、ありがとうございました。 –
最後に、sqlite dbを使い、プロジェクトに追加する方が簡単でした。 –
データを移行してコアデータストアにデータを読み込む際に問題がありましたか?または、コアデータを使用せず、代わりにSQLiteを使用することを選択しましたか? – ImHuntingWabbits