Iphone Sqlite准备语句

Iphone Sqlite准备语句,iphone,objective-c,sqlite,prepared-statement,Iphone,Objective C,Sqlite,Prepared Statement,我的表中有12列。其中最后两列是新添加的。我使用sqlite3数据库。若我对除最后创建的两个新列以外的任何其他列使用where子句,则会创建数据库并正确执行查询。最后两列返回空字符串,这使得应用程序由于未捕获的异常“NSInvalidArgumentException”而崩溃并终止应用程序,原因:“*+[NSString stringWithUTF8String:::NULL cString”** 在SQL Manager中执行查询时,我可以检索最后两列。我想我的陈述中有什么地方不对劲

我的表中有12列。其中最后两列是新添加的。我使用sqlite3数据库。若我对除最后创建的两个新列以外的任何其他列使用where子句,则会创建数据库并正确执行查询。最后两列返回空字符串,这使得应用程序由于未捕获的异常“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) {
    }

请帮我做这个。我完全不知道最后两个专栏去了哪里

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

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

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

但是,它不会进入prepare语句循环来检查字符串是否为NULL。你想让我在准备语句之前执行这个吗?如果我没有在prepare语句中执行,如何循环数据库?您得到的错误与prepare语句完全无关。您的错误是关于NSString的,sqlite只是普通的C api,它不分配NSString。如果我使用最后两列中的任何一列作为WHERE子句的值,它甚至不会进入prepare语句循环。如果我使用除最后两列以外的任何其他列值作为WHERE子句值,它将进入prepare语句循环,并且当我尝试检索最后两列值时,应用程序将抛出NSINVALIDARGUENTEXCEPTION。这是我的问题。对不起,之前没有给你明确的想法。。