Sqlite3 数据库表无法在 XCode 4.2 中打开

Posted

技术标签:

【中文标题】Sqlite3 数据库表无法在 XCode 4.2 中打开【英文标题】:Sqlite3 database Table cannot open in XCode 4.2 【发布时间】:2012-02-03 11:49:05 【问题描述】:

我正在使用 XCode 4.2 创建和 iphone 应用程序。我正在为应用程序使用 sqlite3 数据库。当我遇到 XCode 4.2 问题时,我在 iPhone 3GS 和 XCode 3.2.5 上成功创建并运行了该应用程序。 db文件无法打开,这里是打开表的示例代码代码。当我使用 SQlite 管理器打开同一个 db 文件时,我可以看到该表。我不明白错误是什么。

static sqlite3 *database = nil;
static sqlite3_stmt *selectStmt = nil;

+ (void) getInitialDataToDisplay:(NSString *)dbPath 
    NSLog(@"Path: %@",dbPath);
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
        NSString *sqlStr = @"select * from Space";
        const char *sql = [sqlStr UTF8String];
        sqlite3_stmt *selectstmt;
        if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) 
            while(sqlite3_step(selectstmt) == SQLITE_ROW) 
                NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
                SpaceClass *spaceObj = [[SpaceClass alloc] initWithPrimaryKey:primaryKey];
                spaceObj.spacePK = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
                spaceObj.spName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 3)];
                spaceObj.spDescrptn = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 4)];               
                [appDelegate.spaceArray addObject:spaceObj];
                [spaceObj release];
            
        else
            NSLog(@"not ok");
    
    else
        sqlite3_close(database); //Even though the open call failed, close the database connection to release all the memory.

请帮忙,谢谢

【问题讨论】:

你能检查一下NSLog(@"Error=%s",sqlite3_errmsg(&db))给了什么吗? 【参考方案1】:

我认为你把 close 方法放在了错误的地方。我在 ios 中使用 SQLite3 已经 2 周了,我遇到了这个问题。我通过将SQLite3_close 方法放在if(open == ok) 的最后一行来解决它。

您的代码应如下所示:

if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK)
       
    if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) 
    
        while(sqlite3_step(selectstmt) == SQLITE_ROW) 
        

        
     
    else
    
        NSLog(@"not ok");
    
    //here you should close database, before exit from if open block
    sqlite3_close(database);

else

    //here is not needed because of database open failure
    //sqlite3_close(database);
    NSLog(@"not ok");

这应该可以解决您的问题,因为现在您每次打开数据库时都要关闭它。但是在您的代码中,您一次又一次地打开它而不关闭它!

【讨论】:

以上是关于Sqlite3 数据库表无法在 XCode 4.2 中打开的主要内容,如果未能解决你的问题,请参考以下文章

Xcode7.2使用sqlite3数据库的方法

Xcode7.2使用sqlite3数据库的方法

无法在 xcode 4.2 上构建我的项目

xcode 4.6 无法显示部署目标 4.2

xCode 4.2 核心数据如何在数据模型编辑器中使用 GUI 创建获取的属性?

升级到 Xcode 4.2 和 iOS5 后,应用程序无法在 iPhone 上运行