原始問題是「我有一個sqlite 3分貝(一個詞典),我想用在一個新的應用程序。是否有捷徑創建核心數據關係模型,基於數據庫結構?「反向工程SQLite3數據庫到coredata
這就是我解決問題的方法 - 在網上有很多幫助。
我簡化了數據庫,這使得編寫核心數據模型非常容易。
我用這個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創建)導出到調用文件db.sql(imaginative!)的sql中。我只導出了數據表和主鍵表,而不是元數據表。您也可以在命令行執行此操作。我使用了一個名爲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_;
}
許多可能已經知道了這一切,但我不得不艱難它出來了幾天。也有可能更簡單的方法來做到這一點。但也許這將幫助別人..
好的,謝謝你讓我知道.. –
最後,我發現簡單地使用sqlite數據庫並將其添加到項目中更簡單。 –
您是否在遷移數據和填充Core Data存儲時遇到問題?或者你選擇不使用Core Data,而是直接使用SQLite? – ImHuntingWabbits