【问题标题】:SQLite3 selection works on simulator but it does not on deviceSQLite3 选择适用于模拟器,但不适用于设备
【发布时间】:2012-11-02 22:42:40
【问题描述】:

我将一组值存储在一个包含几列不同类型的表中,当我在 iPhone 模拟器上运行应用程序时,插入和选择工作正常。但是,在真实设备上运行并选择数据时,似乎无法获取表的某些文本列(其余列似乎已正确检索)。我应该看到一个带有字符串的对话框,但我没有,我得到一个空对话框,而带有字符串的对话框在模拟器上正确显示。

这是插入的代码sn-p:

if(sqlite3_prepare_v2(database, sqlStatement,
                          -1, &compiledStatement, NULL) == SQLITE_OK)
    {
        sqlite3_bind_int(compiledStatement, 1, userData.ID);
        sqlite3_bind_double(compiledStatement, 2, userData.Location.Lat);
        sqlite3_bind_double(compiledStatement, 3, userData.Location.Lon);
        sqlite3_bind_text(compiledStatement, 4, [userData.Name UTF8String], -1, SQLITE_TRANSIENT);
        sqlite3_bind_text(compiledStatement, 5, [userData.Surname UTF8String], -1, SQLITE_TRANSIENT);
    }

    if(sqlite3_step(compiledStatement) == SQLITE_DONE) {
        sqlite3_finalize(compiledStatement);
    }
    else {
        NSLog(@"%d",sqlite3_step(compiledStatement));
    }
}
sqlite3_close(database);

这是选择:

if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
        while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
            UserData *userData = [[UserData alloc] init];

            userData.ID = sqlite3_column_int(compiledStatement, 0);

            char *name = sqlite3_column_text(compiledStatement, 1);
            if (name == nil)
                userData.Name = @"";
            else
                userData.Name = [NSString stringWithUTF8String: name];

            [list addObject:userData];
        }
    }
    sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);

我完全不知道为什么数据库数据管理在模拟器中表现良好(我有 SQLite 管理器插件并且数据被正确存储和检索),但它不是在真正的 iPhone 中。我如何检查设备上发生了什么?有人遇到过类似的事情吗?

谢谢!

【问题讨论】:

  • 第二个 sn-p 代码有两个开括号 "{" 和三个闭括号 "}" ,所以我不确定它是如何连接的。无论如何,这是我的代码的 sn-p 工作正常。 char *localityChars = (char *)sqlite3_column_text(statement, 1);如果 (localityChars ==NULL) 返回 FALSE; , , 至于绑定文本,你的做法与我的应用程序不同:sqlite3_bind_text(stmt, 4, [myString UTF8String], -1,NULL);

标签: iphone ios ios5 sqlite ios-simulator


【解决方案1】:

我认为问题可能是由空记录引起的,而您的 if nil 没有帮助,请尝试使用 NULL 代替:

if ((char *)sqlite3_column_text(compiledStatement, 1) == NULL)
 userData.Name = @"";

【讨论】:

  • 奇怪,奇怪..尝试在设备中删除/重新安装您的应用程序,再次检查表名和字段名(在设备上区分大小写)。让我们知道..进展。祝你好运!
【解决方案2】:

按照您的所有建议,我终于让它工作了,我认为最终解决问题的是区分大小写的事情。谢谢大家

【讨论】:

  • 我很高兴听到我是对的,我正在等待投票……甚至 :)
猜你喜欢
  • 1970-01-01
  • 2012-11-01
  • 2011-03-08
  • 2015-02-13
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多