2011-05-09 7 views
0

여기에서이 문제에 봉착했습니다. XML 파일을 읽는 응용 프로그램이 있습니다. 이 정보는 NSMutableDictionary에 올바르게 저장됩니다.이상한 SQLite3 오류 : 열을 찾을 수 없습니다.

다음으로하고 싶은 것은 해당 NSMutableDictionary의 모든 요소를 ​​SQLite3을 사용하여 데이터베이스에 추가하는 것입니다. 응용 프로그램의 위임에

, 내가 사용하여 데이터베이스를 만드는거야 :

NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO INCIDENTS (ID, SERIAL, CI, FAMILY, DEVICEDESCRIPTION, LOCATION, SUBLOCATION, UPDOWN, PROBLEMDESCRIPTION, ADDINFO, PROBLEMLOCATION, PROBLEMCATEGORY, CONTFIRSTNAME, CONTLASTNAME, CONTSALUTATION, CONTPHONENUMBER, LOCALCALL, CICATEGORY, STATUS) VALUES (\"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\")", [item objectForKey:@"ID"], [item objectForKey:@"Serial"], [item objectForKey:@"ConfigurationAlias"], [item objectForKey:@"Family"], [item objectForKey:@"DeviceDescription"], [item objectForKey:@"Location"], [item objectForKey:@"SubLocation"], [item objectForKey:@"UpDownIndicator"], [item objectForKey:@"ProblemDescription"], [item objectForKey:@"AdditionalInformation"], [item objectForKey:@"ProblemLocation"], [item objectForKey:@"ProblemCategory"], [item objectForKey:@"ContactPersonFirstName"], [item objectForKey:@"ContactPersonLastName"], [item objectForKey:@"ContactPersonSalutation"], [item objectForKey:@"ContactPersonPhoneNumber"], [item objectForKey:@"LocalCallNumber"], [item objectForKey:@"ConfigurationItemCategory"], [item objectForKey:@"Status"]]; 
const char *insert_stmt = [insertSQL UTF8String]; 
//NSLog(@"could not prepare statement: %s\n", sqlite3_errmsg(contactDB)); 
sqlite3_prepare_v2(contactDB, insert_stmt, -1, &statement, NULL); 
if(sqlite3_prepare_v2(contactDB, insert_stmt, -1, &statement, NULL) != SQLITE_DONE){ 
    NSLog(@"Error: Failed to prepare stmt with message '%s'", sqlite3_errmsg(contactDB)); 
} 
if (sqlite3_step(statement) == SQLITE_DONE) 
{ 
    NSLog(@"Succesfully added in DB"); 
} else { 
    NSLog(@"Failed to add incident in DB"); 
} 
sqlite3_finalize(statement); 
sqlite3_close(contactDB); 

내가 사용지고있어 오류 : 타 클래스에서

NSString *docsDir; 
NSArray *dirPaths; 

// Get the documents directory 
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

docsDir = [dirPaths objectAtIndex:0]; 

// Build the path to the database file 
databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"incidents.db"]]; 
NSFileManager *filemgr = [NSFileManager defaultManager]; 

if ([filemgr fileExistsAtPath: databasePath ] == NO) 
{ 
    const char *dbpath = [databasePath UTF8String]; 

    if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK) 
    { 
     char *errMsg; 
     const char *sql_stmt = "CREATE TABLE IF NOT EXISTS INCIDENTS (ID INTEGER PRIMARY KEY, SERIAL TEXT, CI TEXT, FAMILY TEXT, DEVICEDESCRIPTION TEXT, LOCATION TEXT, SUBLOCATION TEXT, UPDOWN TEXT, PROBLEMDESCRIPTION TEXT, ADDINFO TEXT, PROBLEMLOCATION TEXT, PROBLEMCATEGORY TEXT, CONTFIRSTNAME TEXT, CONTLASTNAME TEXT, CONTSALUTATION TEXT, CONTPHONENUMBER TEXT, LOCALCALL TEXT, CICATEGORY TEXT, STATUS TEXT)"; 

     if (sqlite3_exec(contactDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK) 
     { 
      NSLog(@"Failed to create table"); 
     } 

     sqlite3_close(contactDB); 

    } else { 
     NSLog(@"Failed to open/create database"); 
    } 
} 

[filemgr release]; 

을, 나는 코드를 사용하고 있습니다 sqlite3_errmsg 문은 다음과 같습니다. 2011-05-09 10:04:12.029 Fleet Manager[1053:207] Error: Failed to prepare stmt with message 'table INCIDENTS has no column named PROBLEMDESCRIPTION'

무슨 일이 벌어지고 있니?

EDIT : 추가 할 때 Problemdescription 부분을 제거하면 작동합니다. 여전히 문제가 있습니다. 빈 열을 남겨 둡니다.

답변

4

오류 메시지에서 SQLite3 데이터베이스의 테이블에 PROBLEMDESCRIPTION 열이없는 것은 확실합니다. 나는 어떤 점에서, 당신의 create 문이 철자법 실수를 가지고 있다고 생각할 것이다. 그것은 이미 존재한다면 테이블을 다시 만들지 않기 때문에 교정되지 않았다.

이 문제를 확인하려면 sqlite3 명령 줄 도구로 데이터베이스를 열고 .schema INCIDENTS 명령을 실행하십시오. 관련이없는 노트에


, 그것은 당신은 항상 예약 문자를 이스케이프해야하는 번거 로움을 피하기 위해 sqlite_bind*()를 사용해야합니다 -stringWithFormat:를 사용하여 행 데이터를 삽입하는 very bad idea입니다.

+0

그게 전부입니다. 데이터베이스가 다시 생성되지 않습니다! 도와 주셔서 감사합니다:) – Joetjah

관련 문제