2011-08-13 12 views
0


DB에 몇 가지 쿼리를 삽입하기 위해 FMDB를 사용하려고합니다.
삽입에 대한 쿼리를 확인할 때 삽입 중이라는 메시지가 나타납니다.
나중에 실제로 테이블에서 데이터를 읽을 수 있습니다.
하지만 DB에서 정보를 읽으려고하면 다시 null로 반환됩니다.
Xcode 프로젝트에서 DB를 검사했을 때 업데이트 된 것으로 보이지 않습니다.
나를 혼란스럽게합니다. 어떤 제안이 문제가 될 수 있을까요?FMDB가 DB에 삽입되지 않음

+1

무슨 일이 일어나는지'db.traceExecution = YES'와'db.logsErrors'를 사용합니까? –

+0

db.traceExecution과 db.logsErrors를 모두 확인했습니다. 오류를 표시하지 않고 트랜잭션을 표시합니다. – Mush

+0

DB에서 읽는 데 사용하는 코드를 게시 할 수 있습니까? –

답변

4

코드가 잘못되었습니다.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"db.sqlite"]; 

FMDatabase *db = [FMDatabase databaseWithPath:dbPath]; 
[db open]; 

[db executeUpdate:@"INSERT INTO foo (bar) VALUES (?)", bar]; 

[db close]; 

을 읽을 수 :

또한
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:@"db.sqlite"]; 

    FMDatabase *db = [FMDatabase databaseWithPath:dbPath]; 
    [db open]; 

    NSMutableArray *bar = [[[NSMutableArray alloc] init] autorelease]; 

    FMResultSet *s = [db executeQuery:@"select * from foo"]; 
    while ([s next]) { 

     [bar addObject:[s stringForColumn:@"bar"]]; 

    } 

    NSLog(@"%@", bar); 

    [db close]; 

체크 아웃을 내가 DB를 위치한 곳은 내가 작성하는 데 사용할 것입니다. 나는 당신의 방법을하는 것이 시뮬레이터에서 작동 할 것이지만 샌드 박스와 모든 장치 때문에 장치에서 작동하지 않을 것이라고 생각합니다.

행운을 빈다.

편집 :

- (void)createEditableCopyOfDatabaseIfNeeded { 


    // First, test for existence. 
    BOOL success; 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSError *error; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"db.sqlite"]; 
    success = [fileManager fileExistsAtPath:writableDBPath]; 
    if (success) return; 
    // The writable database does not exist, so copy the default to the appropriate location. 
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"db.sqlite"]; 
    success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; 
    if (!success) { 
     NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]); 
    } 
} 

그리고와 application:didFinishLaunchingWithOptions에서 그 방법을 실행합니다 : 당신이 먼저 projecttree에 데이터베이스를 넣어 있는지 확인

[self performSelector:@selector(createEditableCopyOfDatabaseIfNeeded) withObject:nil]; 

앱 위임에

넣어이 .

+0

감사합니다. 나는 이것을 줄 것이다. – Mush

+0

K 내가 어떻게되었는지 알려주십시오 :) –

+0

지금은주는 오류입니다. 그런 표는 없습니다. – Mush

관련 문제