0

我的表中有 12 列。其中最后两列是新添加的。我使用 sqlite3 数据库。如果我对除最后创建的两个新列之外的任何其他列使用 where 子句,则会创建数据库并正确执行查询。最后两列返回 NULL 字符串,这会使应用程序崩溃并由于未捕获的异常“NSInvalidArgumentException”而引发终止应用程序,原因:'* +[NSString stringWithUTF8String:]: NULL cString' * *

在 SQL 管理器中执行查询时,我可以检索最后两列。我想我的准备声明中有什么地方有问题。

    NSString *query = @"select * from tableName where lastColumn = 'Value'";
    const char *sqlStatement = [query UTF8String];
sqlite3_stmt *compiledStatement;
    NSLog(@"could not prepare statement: %s\n", sqlite3_errmsg(database));

if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
// Loop through the results and add them to the feeds array
while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
    }

请帮助我。我完全不知道最后两列去了哪里.. :)

4

1 回答 1

0

您将 NULL 传递给 stringWithUTF8String: 方法,这是不允许的。在实例化 NSString 对象之前,您应该检查从 sqlite 获得的值。

const char *ctext = sqlite3_column_text(compiledStatement, 2);
if (ctext) {
    text = [NSString stringWithUTF8String:ctext];
}

添加新列时,所有现有行中此列的值都设置为 NULL。

于 2012-06-15T19:53:38.273 回答