我的ios sqlite3数据库没有被创建

时间:2011-11-16 06:34:23

标签: ios sqlite

我正在尝试创建一个类来从我的业务逻辑等中抽象出我的SQLite方法。但是,我似乎无法访问我的数据库,因为它似乎永远不会被创建。请参阅下面的代码。我在指定的路径上打开数据库。然后我稍后关闭它。关闭后,我使用终端来检查我的Documents目录(在应用程序内)。此时没有我指定的文件。它是否仅在我将数据插入数据库时​​创建文件?或者我没有正确创建数据库?

#import "SQLController.h"

@implementation SQLController
@synthesize database;

-(id)initWithDefaultDB {    
    return [self initWithDBPath:[self dbFilePath]];
}

-(id)initWithDBPath:(NSString *)dbPath {
    self = [super init];
    if(self) {
        sqlite3 *db;    
        const char *dbPathCString = [dbPath UTF8String];
        int result = sqlite3_open(dbPath, &db);
        if (result != SQLITE_OK) {
            NSString *errorTag = @"Failed to open database at ";
            NSString *errorMessage = [errorTag stringByAppendingString:dbPath];
            NSLog(errorMessage);
            sqlite3_close(db);
        } else {
            const char *createQuery = "CREATE TABLE IF NOT EXISTS items (title TEXT, details TEXT, category TEXT);";
            self.database = db;
            char *error;
            if (sqlite3_exec(self.database, createQuery, NULL, NULL, &error) != SQLITE_OK) {
                sqlite3_close(self.database);
                NSLog(@"Failed to create table");
                NSAssert(0,@"Error creating table: %s", error);
            }
        }
    }
    return self;
}

-(NSString *)dbFilePath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingPathComponent:@"testdb.sqlite"];
}


@end

2 个答案:

答案 0 :(得分:1)

您可能对使用FMBD感兴趣,而不是重新发明轮子(尽可能多的乐趣,相信我,我知道!)。它是SQLITE访问的Objective-c包装器。

答案 1 :(得分:1)

在关闭数据库之前,您是否曾写过数据库? Sqlite是懒惰的 - 它在第一次写入之前不会创建数据库。

要看的另一件事是你创建C字符串(dbPathCString)但是没有将它传递给open(你正在传递dbPath)。

-(id)initWithDBPath:(NSString *)dbPath {
self = [super init];
if(self) {
    sqlite3 *db;    
    const char *dbPathCString = [dbPath UTF8String];
    int result = sqlite3_open(dbPath, &db);