事前設定された 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)*
ループに入らないため、データは表示されません。