【问题标题】:Unable to retrieve data from SQLite database iOS6.0无法从 SQLite 数据库 iOS6.0 中检索数据
【发布时间】:2012-09-20 23:26:45
【问题描述】:

当我运行 build ios5.0 或更低版本时,Sqlite 响应正确并检索数据它工作正常,但是当在 ios6.0 上运行时,我试图从 my.sqlite 数据库中获取数据,但它没有执行我的 if 案例。它总是在 else 条件下进入。我在做什么错事?我无法执行我的 if 案例,即if(sqlite3_prepare_v2(database, sqlQuerry, -1, &querryStatement, NULL)==SQLITE_OK).

查看此代码以供参考。

NSLog(@"sqlite3_prepare_v2 = %d SQLITE_OK %d ",sqlite3_prepare_v2(sqlite, [strQuery UTF8String], -1, &compiledStatement, nil),SQLITE_OK);

    if(sqlite3_prepare_v2(sqlite, [strQuery UTF8String], -1, &compiledStatement, nil)==SQLITE_OK)
    {

        NSLog(@"sqlite3_step = %d SQLITE_ROW %d ",sqlite3_step(compiledStatement),SQLITE_ROW);
        while (sqlite3_step(compiledStatement)==SQLITE_ROW)
        {           if(sqlite3_column_text(compiledStatement, 2) != nil)
                modelObj.Name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];

        }
    }
    else
    {

    }

iOS6.0上的日志打印

 sqlite3_prepare_v2 = 1 SQLITE_OK 0   
 sqlite3_step = 21 SQLITE_ROW 100 

iOS5.0上的日志打印

sqlite3_prepare_v2 = 0 SQLITE_OK 0  
sqlite3_step = 100 SQLITE_ROW 100 

【问题讨论】:

  • 根据您提供的输出,它看起来根本不像进入 else 情况 - 在 iOS5 和 iOS6 中,我们都看到了日志消息。
  • 看到这个答案,你可能也有同样的问题:stackoverflow.com/a/6749033/73429

标签: iphone objective-c sqlite ios6


【解决方案1】:

放在 else this 中,这样我们就可以看到导致的错误..

if(sqlite3_prepare_v2(sqlite, [strQuery UTF8String], -1, &compiledStatement, nil)==SQLITE_OK)
{

    NSLog(@"sqlite3_step = %d SQLITE_ROW %d ",sqlite3_step(compiledStatement),SQLITE_ROW);
    while (sqlite3_step(compiledStatement)==SQLITE_ROW)
    {           if(sqlite3_column_text(compiledStatement, 2) != nil)
        modelObj.Name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];

    }
}
else{
    //error
    NSLog(@"Failed to open database. Error: %s",sqlite3_errmsg(database));
}

【讨论】:

    【解决方案2】:

    尝试从您的设备(或模拟器)中删除您的应用,然后清理并构建

    【讨论】:

    • 这么多次从设备中删除应用程序以及模拟器清理构建并尝试退出 xcode。但在 ios6.0 中不执行来自 sqlite 的数据
    • 查询是:SELECT * FROM Sites ORDER BY Title ASC
    • 您是否尝试在 iOS6 下而不是在 iOS5 下从模拟器中删除应用程序?
    【解决方案3】:

    我不是 100% 确定,但关于这一点: NULLvoid *nilid

    所以如果你能改变这个:

    if(sqlite3_prepare_v2(sqlite, [strQuery UTF8String], -1, &compiledStatement, nil)==SQLITE_OK)
    

    这个:

    if(sqlite3_prepare_v2(sqlite, [strQuery UTF8String], -1, &compiledStatement, NULL)==SQLITE_OK)
    

    我只是将 nil 更改为 NULL。同样不是 100% 确定,但我在您的代码中只看到了这一点。我总是使用 NULL :)

    希望对您有所帮助...

    【讨论】:

      猜你喜欢
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 2014-04-20
      相关资源
      最近更新 更多