Я скопировал базу данных sqlite, предварительно заполненную из пакета, в путь библиотеки. Теперь, когда я пытаюсь выполнить запрос, он не читает базу данных.Я не могу прочитать мою ранее существовавшую базу данных sqlite
Код для копирования базы данных:
-(void)createDatabase
{
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
NSString *targetPath = [libraryPath stringByAppendingPathComponent:@"gre.db"];
if (![[NSFileManager defaultManager] fileExistsAtPath:targetPath]) {
// database doesn't exist in your library path... copy it from the bundle
NSString *sourcePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"gre.db"];
NSError *error = nil;
if (![[NSFileManager defaultManager] copyItemAtPath:sourcePath toPath:targetPath error:&error]) {
NSLog(@"Error: %@", error);
}
}
}
Я называю это из моих applicationDidFinishLaunchLaunchingWithOptions и база данных копируется
Это мой запрос, чтобы прочитать базу данных:
-(void)readDatabase
{
wordlist = [[NSMutableArray alloc] init];
NSString *query =[NSString stringWithFormat:@"SELECT word FROM words WHERE word LIKE '%@%%'",selectedWord];
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, [query UTF8String],-1, &statement, nil) == SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
char *id1 = (char *)sqlite3_column_text(statement, 0);
[wordlist addObject:[NSString stringWithFormat:@"%s",id1]];
}
}
sqlite3_finalize(statement);
NSLog(@"%@",wordlist);
}
Теперь управление не входит в цикл *while (sqlite3_step(statement) == SQLITE_ROW)*
Следовательно, данные не отображаются.
В базе данных DocumentDirectory пусто? – Yashesh
Вы пытались вытащить данные с устройства (или посмотреть на него в симуляторе), чтобы проверить, действительно ли содержимое было скопировано? – gaige
№. База данных правильно скопирована в путь к библиотеке. Но он не вводит .... while (sqlite3_step (statement) == SQLITE_ROW)! – Chiran