0

SQLite データベースが埋め込まれた iOS アプリを作成しています。そこで、チュートリアルにあるように、SQLite 管理者で DB を作成し、それを Xcode プロジェクトにドラッグします。データベースを開こうとすると、「メモリ不足」というエラーが表示されます。それが SQLite のバグなのかどうかはわかりませんが、私のファイルは非常に小さいため、メモリの問題が発生します。

これは、データベースを初期化するための私のコードです:

- (id)initWithPath:(NSString *)path {
if (self = [super init]) {
    BOOL success;
    NSError *error;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"SoundLib_DB.sqlite"];

    if ([fileManager fileExistsAtPath:dbPath] == NO) {
        NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"SoundLib_DB" ofType:@"sqlite"];
        [fileManager copyItemAtPath:resourcePath toPath:dbPath error:&error];
    }

    success = [fileManager fileExistsAtPath:dbPath];
    if(!success)
    {
        NSLog(@"Cannot locate database file '%@'.", dbPath);
    }
    sqlite3 *dbConnection;
//Here is when I get the error, at trying to open the DB
    if (sqlite3_open_v2("SoundLib", &dbConnection, SQLITE_OPEN_READWRITE, NULL) != SQLITE_OK) {
        NSLog(@"[SQLITE] Unable to open database!");
        NSLog(@"%s Prepare failure '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(database), sqlite3_errcode(database));
        return nil;
    }
    database = dbConnection;
}
return self;

}

4

2 に答える 2

5

databasepath を として渡す必要があるため、エラーが発生する可能性がありますUTF8String。「SoundLib」を渡しているようです。そのように直接渡すことはできません。

 if (sqlite3_open([dbPath UTF8String], &databaseHandle) == SQLITE_OK)
{
   //dbPath is your full database path you getting above
}

PSも持ってdbpathいますconst char

const char *dbpath
于 2013-01-23T16:21:22.997 に答える
3

このように開くようにオープニングプロセスを変更します...それは私にとってはうまくいきます;)あなたの主な間違いはあなたがUTF8Stringを忘れたことだと思います...。

sqlite3 *database;
int result = sqlite3_open([dbPath UTF8String], &database);
if (result != SQLITE_OK) {
    sqlite3_close(database);
    NSLog(@"Error opening databse");
    return;
}
于 2013-01-23T16:25:21.410 に答える