테스트 iOS 응용 프로그램에서 Update 문을 사용하기 위해이 로그를 사용하면 로그에 'Success'가 출력되지만 데이터베이스에는 변경 사항이 없습니다. 누구든지 올바른 방향으로 나를 가리킬 수 있을까요? 대단히 감사하겠습니다.iOS SQLite 업데이트 실행
나는 이것에 아주 새로운 제품이므로 제 작성법에 어쩌면 쓸만한 코드를 용서해주십시오.
@try {
NSFileManager *fileMgr = [NSFileManager defaultManager];
NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"chars.sqlite3"];
BOOL success = [fileMgr fileExistsAtPath:dbPath];
if(!success)
{
NSLog(@"Cannot locate database file '%@'.", dbPath);
}
if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK))
{
NSLog(@"An error has occured: %s", sqlite3_errmsg(db));
}
const char *sql = "UPDATE characters SET level = 'testing' WHERE id='1'";
sqlite3_stmt *sqlStatement;
if(sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK)
{
NSLog(@"Problem with prepare statement: %s", sqlite3_errmsg(db));
}else{
if (sqlite3_step(sqlStatement) == SQLITE_DONE){
NSLog(@"Success");
}
}
sqlite3_finalize(sqlStatement);
}
@catch (NSException *exception) {
NSLog(@"Problem with prepare statement: %s", sqlite3_errmsg(db));
}
@finally {
sqlite3_close(db);
}
방어막 프로그래밍 기술을 사용하지 않으려는 것은 아니지만 코드 조각은 오류가 발생하면 SQLite가 예외를 throw한다고 가정합니다. 그건 그렇지 않을거야. 따라서 예외 처리기에서'sqlite3_errmsg'를 검사한다는 개념은 의미가 없습니다. 다른 프로그래밍 언어와 달리 Objective-C try-catch-finally 블록은 예기치 않은 프로그래머 오류와 같은 예외적 인 상황에만 사용됩니다. 그리고 코드에서 많은 예외 처리를 수행하는 경우 일반적으로 오류를 감지하는 잘못된 기술을 사용합니다. – Rob
감사합니다. 정말로 조언에 감사드립니다. – user2672330