Sqlite准备声明

时间:2012-06-15 15:01:00

标签: iphone objective-c sqlite prepared-statement

我的桌子上有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) {
    }

请帮我解决这个问题。我完全不知道最后两列已经消失了......:)

1 个答案:

答案 0 :(得分:0)

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

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

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