2010-04-14 3 views
1

나는 사용자가 사용한 무게와 "reps"수를 기록 할 연습용 앱을 만들고 있는데, 7 일 동안 하루에 4 세트의 " 진행.Sqlite3 INSERT INTO 질문 × 377

나는 ROWFIELD_DATA의 두 열로 FIELDS이라는 데이터베이스 테이블을 만들었으며 아래 코드를 사용하여 데이터를 db로로드 할 수 있습니다.

INSERT INTO FIELDS (ROW, FIELD_DATA)VALUES (%d, '%@'); 

아무런 변화가 없습니다 :하지만 코드는 내가로 한 Statment을 변경라는 SQL 문을,

INSERT OR REPLACE INTO FIELDS (ROW, FIELD_DATA)VALUES (%d, '%@'); 

있습니다. 그것은 데이터가 db에 기록되지 않습니다.

#define kFilname @"StData.sqlite3" 

- (NSString *)dataFilePath 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains 
    (NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    return [documentsDirectory stringByAppendingPathComponent:kFilname]; 
} 

-(IBAction)saveData:(id)sender; 
{ 

    for (int i = 1; i <= 8; i++) 
    { 
    NSString *fieldName = [[NSString alloc]initWithFormat:@"field%d", i]; 
    UITextField *field = [self valueForKey:fieldName]; 
    [fieldName release]; 

    NSString *insert = [[NSString alloc] initWithFormat: 
     @"INSERT OR REPLACE INTO FIELDS (ROW, FIELD_DATA) 
      VALUES (%d, '%@');",i, field.text]; 
    // sqlite3_stmt *stmt; 

    char *errorMsg; 

    if (sqlite3_exec (database, [insert UTF8String], 
     NULL, NULL, &errorMsg) != SQLITE_OK) 
    { 
     // NSAssert1(0, @"Error updating table: %s", errorMsg); 
     sqlite3_free(errorMsg); 
    } 
    } 
    sqlite3_close(database);  
} 

그래서 어떻게 내가 원하는 것을 할 수있는 코드를 수정 않습니다 아래

코드인가? 처음에는 단순한 SQL 문 변경과 같았지만 분명히 더 많은 것이 있어야합니다. 나는 Objective-C와 iPhone 프로그래밍이 처음이다. 몇 년 동안 ASP에서 웹 앱을 만들면서 SQL 문을 처음 사용하는 것은 새로운 것이 아닙니다.

도움을 주시면 대단히 감사하겠습니다.

+0

데이터 모델에 대한 간단한 설명을 제공해 주시겠습니까? 이미 데이터를 저장하는 방식에 문제가 있다고 생각합니다. – Zento

답변

0

제안 : 삽입이

  • 당신의 파일 이름에는 경로가없는 작동하는 경우
    • 은보고 하드 코드 된 값을 삽입 문을 작성합니다. 실행될 때 현재 디렉토리를 가정합니까? 실행중인 디렉토리는 무엇입니까?
    • 가능한 경우 값을 확인하려면 가능한 경우 화면에 메시지를 작성하십시오. 그들은 맞습니까?
  • +0

    답장을 보내 주셔서 감사합니다. FireFox 플러그인 SQLite Manager를 사용하여 데이터가 입력되었는지 확인했습니다. REPLACE와 함께 SQL 문을 사용하면 데이터가 데이터베이스의 이전 데이터를 완벽하게 대체합니다. OR REPLACE를 제거하면 표의 데이터가 변경되지 않습니다. 응용 프로그램이 Documents에서 실행 중입니다. 데이터베이스는/Users/dave/Library/Application Support/iPhone Simulator/User/Applications/32A716E5-F .../Documents/StData.sqlite3 (번호가 매겨진 폴더가 변경됨)에 있습니다. db를 Xcode로 가져 와서 Documents로 복사했지만 여전히 위의 경로로 이동합니다. 하지만 삽입하지 않습니다. – user316717

    +0

    나는 그 옵션이 무엇을하는지 오해한다고 생각합니다. 다른 일치하는 레코드가 존재하면 'or replace'옵션을 추가하지 않으면 삽입되지 않습니다. 그것을 설명하는 sqlite.org에 관한 꽤 좋은 문서가있다. – Jay

    관련 문제