Я пытаюсь использовать FMDB для вставки нескольких запросов в БД.
Когда я проверяю запрос на вставку, он говорит, что он вставляется.
Позже я смогу прочитать данные из таблиц.
Но происходит следующее: если я пытаюсь прочитать информацию из БД, она возвращается как нуль.
Когда я проверил БД в проекте Xcode, похоже, она не обновилась.
Это немного сбивает меня с толку. Любое предложение, в чем может быть проблема?
FMDB не вставляется в БД
Ответы (1)
Ваш код неверен. Это то, что я использую, чтобы написать:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"db.sqlite"];
FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
[db open];
[db executeUpdate:@"INSERT INTO foo (bar) VALUES (?)", bar];
[db close];
И читать:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"db.sqlite"];
FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
[db open];
NSMutableArray *bar = [[[NSMutableArray alloc] init] autorelease];
FMResultSet *s = [db executeQuery:@"select * from foo"];
while ([s next]) {
[bar addObject:[s stringForColumn:@"bar"]];
}
NSLog(@"%@", bar);
[db close];
Также проверьте, где я нашел файл db. Я думаю, что ваш способ будет работать на симуляторе, но не на устройстве из-за песочницы и всего остального.
Удачи!
РЕДАКТИРОВАТЬ:
Поместите это в свой делегат приложения:
- (void)createEditableCopyOfDatabaseIfNeeded {
// First, test for existence.
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"db.sqlite"];
success = [fileManager fileExistsAtPath:writableDBPath];
if (success) return;
// The writable database does not exist, so copy the default to the appropriate location.
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"db.sqlite"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if (!success) {
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
}
И запустите этот метод из application:didFinishLaunchingWithOptions
с помощью:
[self performSelector:@selector(createEditableCopyOfDatabaseIfNeeded) withObject:nil];
Убедитесь, что вы сначала поместили свою базу данных в дерево проектов.
person
Thomas K
schedule
13.08.2011
Спасибо, я попробую.
- person Mush; 13.08.2011
Да. Не вставляется в БД. Может ли это быть путь к моей БД? У меня в корневой папке.
- person Mush; 13.08.2011
db.traceExecution = YES
иdb.logsErrors
, чтобы проверить, что происходит? - person Thomas K   schedule 13.08.2011