我的桌子上有12列。其中最后添加了两列。我使用sqlite3数据库。如果我对除了最后创建的两个新列之外的任何其他列使用where子句,则会创建数据库并正确执行查询。最后两列返回NULL字符串,这会导致应用程序崩溃由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' * + [ NSString stringWithUTF8String:]:NULL cString' * *
在SQL Manager中执行查询时,我可以检索最后两列。我想在我的准备陈述中某处出了问题。
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) {
}
请帮我解决这个问题。我完全不知道最后两列已经消失了......:)
答案 0 :(得分:0)
您将NULL传递给stringWithUTF8String:方法,这是不允许的。您应该在实例化NSString对象之前检查从sqlite获得的值。
const char *ctext = sqlite3_column_text(compiledStatement, 2);
if (ctext) {
text = [NSString stringWithUTF8String:ctext];
}
添加新列时,所有现有行中此列的值都设置为NULL。