FMDB에서 SQLite 데이터를 관리합니다.FMDB : 데이터를 미리 입력하십시오.
이 응용 프로그램에서는 데이터를 미리 넣으므로 sample.db
을 terminal
및 Lita
으로 미리 작성하고 복사 한 다음 프로젝트로 가져 왔습니다.
문제는 데이터베이스를 업데이트 할 수 없다는 것입니다.
saveData
이라고해도 title
열은 비어 있습니다.
데이터베이스를 업데이트하려면 어떻게 수정해야합니까?
· sample.db
에는 events
테이블이 있습니다.
테이블 events
스키마는 (id INTEGER PRIMARY KEY AUTOINCREMENT, day TEXT, title TEXT, time INTEGER);
입니다. Event
을 events
테이블에 추가합니다.
이제 saveData
메서드를 호출하고 "test"
을 events
에 입력합니다.
Event.h
@interface Event : NSObject
@property (nonatomic, assign) NSInteger eventId;
@property (nonatomic, copy) NSString* day;
@property (nonatomic, copy) NSString* title;
@property (nonatomic, assign) NSInteger time;
DetailViewController.m
- (void)saveData:(id)sender
{
Event* newEvent = [[Event alloc]init];
newEvent.title = @“test";
[self.delegate editEventDidFinish:self.event newEvent:newEvent];
@end
MasterViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
self.daoEvents = [[DaoEvents alloc] init];
}
- (void)editEventDidFinish:(Event *)oldEvent newEvent:(Event *)newEvent
{
[self.daoEvents update:newEvent];
[self.navigationController popViewControllerAnimated:YES];
}
- (void)removeOldEnent:(Event*)oldEvent
{
[self.daoEvents remove:oldEvent.eventId];
}
DaoEvents.m
#define DB_FILE_NAME @“sample.db"
#define SQL_UPDATE @"UPDATE events SET day = ?, title = ?, time = ? WHERE id = ?;”
#define SQL_DELETE @"DELETE FROM events WHERE id = ?;"
- (FMDatabase *)dbConnect
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* dir = [paths objectAtIndex:0];
return [FMDatabase databaseWithPath:[dir stringByAppendingPathComponent:DB_FILE_NAME]];
}
- (BOOL)update:(Event *)event
{
FMDatabase* db = [self dbConnect];
[db open];
BOOL success = [db executeUpdate:SQL_UPDATE, event.day, event.title, [NSNumber numberWithInt:event.time],[NSNumber numberWithInteger:event.eventId]];
[db close];
NSLog(@"%@", event.title); //correctly outputs “test"
return success;
}
- (BOOL)remove:(NSInteger)eventId
{
FMDatabase* db = [self dbConnect];
[db open];
BOOL isSucceeded = [db executeUpdate:SQL_DELETE, [NSNumber numberWithInteger:eventId]];
[db close];
return isSucceeded;
}
데이터베이스를 업데이트하려면 어떻게 수정해야합니까?
감사합니다.
업데이트를 시도하기 전에 바로 레코드를 삭제하려고합니다. 삭제 된 레코드가 업데이트하려는 'id'가있는 레코드입니까? 그렇다면 실제로 업데이트하려는 경우 'DELETE'를 제거하십시오. 새로운 레코드를 지우고 추가하려고한다면,'UPDATE'가 아닌'INSERT'를하십시오. – Rob