2012-06-19 4 views
1

저는 Ios 개발자이고 SQLite db 's 2 개를 연결하는 데 문제가 있습니다. 실행할 때 우리는이 오류를 얻고있다 :iOS 오류 2 SQLite 데이터베이스를 연결하려고합니다

Error calling sqlite3_step (1: SQL logic error or missing database) SQLITE_ERROR 
2012-06-19 11:10:19.658 °°°°°°°[453:707] DB Query: ATTACH DATABASE '/var/mobile/Applications/A05034A8-F5AF-45AA-B520-DF2BBEBB800B/Documents/Meals.db' AS mealDB 
2012-06-19 11:10:19.672 °°°°°°°[453:707] Err 1: no such table: Meal 
2012-06-19 11:10:19.680 °°°°°°°[453:707] Error calling sqlite3_step (1: SQL logic error or missing database) SQLITE_ERROR 
2012-06-19 11:10:19.684 °°°°°°°[453:707] DB Query: ATTACH DATABASE '/var/mobile/Applications/A05034A8-F5AF-45AA-B520-DF2BBEBB800B/Documents/Meals.db' AS mealDB 
2012-06-19 11:10:19.693 °°°°°°°[453:707] Err 1: no such table: MealItem 
2012-06-19 11:10:19.698 °°°°°°°[453:707] ERREUR 

을 우리가 데이터를 수집하기 위해 노력하고 부착 후. 그는 우리가 찾고있는 테이블을 찾지 못하고 있습니다. Err 1 : 그런 테이블이 없습니다. MealItem 또는 Err 1 : 테이블이 없습니다. 식사.

낯선 사람이됩니다! iOS 5.0이 설치된 Sim에서 동일한 코드를 테스트 할 때 작동합니다! 요청에서 데이터가 반환됩니다!

Error calling sqlite3_step (1: SQL logic error or missing database) SQLITE_ERROR 
2012-06-19 11:10:19.684 °°°°°°°[453:707] DB Query: ATTACH DATABASE '/var/mobile/Applications/A05034A8-F5AF-45AA-B520-DF2BBEBB800B/Documents/Meals.db' AS mealDB 

우리는 sqlight 관리자에서이 데이터베이스를 연결했는데, 이는 성공 : 아직도 생각이 오류를 몇 번 받고. 이 결과 데이터베이스는 응용 프로그램에서도 작동했습니다. iOS에 데이터베이스를 연결하는 데 문제가있는 것 같습니다. 또는 어딘가에서 오류가 발생했습니다.

우리는 지금까지 행운이없는 해결책을 찾고 있습니다. 여기에 몇 가지 코드

:

- (FMDatabase *) attachMealDatabase:(FMDatabase *) db { 


    if (![db open]) { 
     NSLog(@"Could not open db."); 
     return nil; 
    }else { 

    } 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentDirectory = [paths objectAtIndex:0]; 
    //const char * mainDBPath = [[documentDirectory stringByAppendingPathComponent:@"Main.db"] UTF8String]; 
    const char * mealDBPath = [[documentDirectory stringByAppendingPathComponent:@"Meals.db"] UTF8String]; 



    NSString *attachSQL = [NSString stringWithFormat: @"ATTACH DATABASE \'%s\' AS mealDB", mealDBPath]; 


    [db beginTransaction]; 

    [db executeUpdate:attachSQL]; 
    [db commit]; 
    //[db close]; 

    return db; 

} 

답변

3

대신 viewcontrollers의 FMDatabase 계층에서 데이터베이스를 연결하십시오 (FMDatabase API를 사용하여). 우리는 다음과 같은 함수를 호출하여 DB open 함수에 그것을했다 :이 당신을 위해 작동

-(void)attachDb{ 

    NSArray paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString documentDirectory = [paths objectAtIndex:0]; 
    const char secondDBPath = [[documentDirectory stringByAppendingPathComponent:@"Second.db"] UTF8String]; 

    if (sqlite3_open([databasePath UTF8String], &db) == SQLITE_OK) 
    { 
    NSString *strSQLAttach = [NSString stringWithFormat:@"ATTACH DATABASE \'%s\' AS SECOND", secondDBPath ]; 
    char *errorMessage; 

    if (sqlite3_exec(db, [strSQLAttach UTF8String], NULL, NULL, &errorMessage) == SQLITE_OK) 
    { 
     DLog(@"Great Success!"); 
    } 
    }  
} 

희망!

+0

예 그렇습니다 :) 아직도 다른 코드가 실패한 이유는 아직 알 수 없습니다. – user1466043

관련 문제