は、誰もがこのコードスニペットで私を助けることができます:それはwhileループに入らないSQLiteでステートメントを更新できないのはなぜですか?
-(void) updateData:(NSString*)value1:(NSString*)value2
{
sqlite3* database;
databaseName = @"AppDB.sqlite";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
int databaseReturnCode = sqlite3_open([databasePath UTF8String], &database);
if(databaseReturnCode == SQLITE_OK) {
sqlite3_stmt *updateStmt;
const char *sql = "update PersonalInfo Set FirstName = ?,LastName = ? Where id = '1'";
//sqlite3_prepare_v2(database, sql, -1, &updateStmt, NULL);
sqlite3_prepare(database, sql, -1, &updateStmt,nil);
sqlite3_bind_text(updateStmt, 1, [value1 UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(updateStmt, 2, [value2 UTF8String], -1, SQLITE_TRANSIENT);
printf("Update PersonalInfo| error or not an error? : %s\n", sqlite3_errmsg(database));
while(sqlite3_step(updateStmt) == SQLITE_ROW)
{
NSString *aFirstName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(updateStmt, 1)];
NSString *aLastName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(updateStmt, 2)];
ProfileInfo *profile = [[ProfileInfo alloc]initWithFirstName:(NSString*)aFirstName LastName:(NSString*)aLastName];
[personalInfo addObject:profile];
[profile release];
}
sqlite3_reset(updateStmt);
sqlite3_finalize(updateStmt);
}
}
sqlite3_close(database);
}
。 しかし、私はwhileループを削除し、 try-catchブロック内のコードを囲み、私はこの例外を取得した場合:
+[NSString stringWithUTF8String:]: NULL cString
これは(または他の)問題の原因ではありませんが、 'sqlite3_finalize'で破壊する前に' sqlite3_reset'で文をリセットする必要はありません。 – Borodin