2009-03-20 3 views
1

sqlite 데이터베이스가 있는데 새 단어를 추가하고 있습니다. 문제는 응용 프로그램을 다시 시작한 후에 만 ​​테이블에 추가 된 것을 볼 수 있다는 것입니다. "SELECT"문은 응용 프로그램을 다시 시작하기 전에 새로 추가 된 요소를 "보지"않습니다.SQLite 데이터베이스 - 업데이트를 볼 수 없습니다.

왜 이런 일이 발생할 수 있습니까?

나는 어떤 종류의 사전을 만들고 있습니다.

const char *sql_query = "INSERT INTO words(word) VALUES(?)"; 
     if(sqlite3_prepare_v2(database, sql_query, -1, &addWordsStmt, NULL) != SQLITE_OK) 
     { 
      return FALSE; 
     } 

sqlite3_bind_text(addWordsStmt, 1, [ word UTF8String], -1, SQLITE_TRANSIENT); 

    if(sqlite3_step(addWordsStmt) != SQLITE_DONE) 
     NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database)); 

sqlite3_reset(addWordsStmt); 


sqlite3_finalize(addWordsStmt); 

그리고 여기 내 검색 코드는 다음과 같습니다 : 여기에 내가 새 항목을 추가하는 방법입니다

const char *sql_query = "SELECT word FROM words WHERE id=?"; 

     if(sqlite3_prepare_v2(database, sql_query, -1, &getWordsStmt, NULL) != SQLITE_OK) 
     { 
      return; 
     } 

sqlite3_bind_int(getWordsStmt, 1, wordid); 

    if(sqlite3_step(getWordsStmt) != SQLITE_ROW) 
    { 
     NSLog(@"Error while getting data. '%s'", sqlite3_errmsg(database)); 
     sqlite3_reset(getWordsStmt); 
     return; 
    } 

    NSString *word = [NSString stringWithUTF8String:(char *)sqlite3_column_text(getWordsStmt, 0)]; 

sqlite3_reset(getWordsStmt); 

sqlite3_finalize(getWordsStmt); 
+0

단어를 어떻게 추가 하시겠습니까? 어떻게 그들을 찾고있어? 출처를 표시하십시오! –

+0

나는 모든 단일 sqlite3_ 호출의 결과를 NSLogging 해보고, 모든 것이 기대되는 것을 보았을 것이다. 검색 소스는 어떻게 생겼습니까? –

답변

1

내 생각 엔 거래중인 것 같습니다. 열기 및 닫기 루틴 중에 트랜잭션에서 호출을 랩핑하고 코드 조각에는 표시되지 않는 다른 호출이 있어야합니다.

응용 프로그램이 종료 될 때까지 새 단어가 표시되지 않는 이유입니다.

1

문제있다 :

const char *sql_query = "SELECT word FROM words WHERE id=?"; 

이것은 당신이 SQL을 사용하는 방법하지 않습니다가. 대신 SELECT word FROM words;을 사용해야하고 SQLITE_DONE이 될 때까지 SQLITE_ROW을 얻는 한 각 행을 스테핑해야합니다. 그것은 당신에게 당신의 모든 말을 줄 것입니다. 새롭게 추가 된 단어의 ID를 모를 때 어떻게 이드의 단어를 찾을 수 있습니까?

+0

고마워요,하지만 그게 내 문제인지는 잘 모르겠습니다. 나는 이드가 자동 증가하고 있다는 것을 알고있다. 그래서 테이블에 많은 양의 행이 있다면 나는 원하는 행을 얻을 수있다. 그건 내 문제에 관한 것이 아니다. 어떻게 변경 사항을 커밋 할 수 있습니까? –

+0

추가에 대한 sqlite3_finalize()가 훨씬 나중에 호출되지 않으면 이미 커밋되고있는 것입니다. 문제는 SQLite에서 데이터를 가져 오는 방법에 대한 오해입니다. 그 단어들을 어떻게 계산합니까? 예상 단어 수를 어떻게 업데이트합니까? –

+0

tewha는 정확하며 그의 설명은 다시 시작할 때 데이터를 "보는"이유를 설명합니다. 그의 설명에 기회를주십시오. – hyuan

관련 문제