2014-04-27 3 views
0

수는 3 열을 갖기 때문에 3을 반환합니다. 하지만 이름을 게시하려고하면 1 행만 반환합니다.Sqlite는 항상 1 행만 반환합니다.

제 코드를 참조하십시오.

sqlite3_stmt *statement; 
const char *dbpath = [_databasePath UTF8String]; 
if (sqlite3_open(dbpath, &_chatDB) == SQLITE_OK) 
{ 
    NSString *querySQL = [NSString stringWithFormat: 
          @"SELECT MESSAGE from CHATCOMPLETE"]; 
    const char *query_stmt = [querySQL UTF8String]; 
    if (sqlite3_prepare_v2(_chatDB, 
          query_stmt, -1, &statement, NULL) == SQLITE_OK) 
    { 
     if (sqlite3_step(statement) == SQLITE_ROW) 
     { 
      NSString *name = [[NSString alloc] initWithUTF8String: 
           (const char *) sqlite3_column_text(statement, 0)]; 
          NSLog(@"Name is %@",name); 
      } 

     } 
     else{ 
      NSLog(@"Not found"); 
     // return nil; 
     } 
     sqlite3_reset(statement); 
    } 
} 
+0

귀하의 질문과 관련이 없지만'sqlite3_reset' 대신 'sqlite3_finalize'를 사용하고 싶습니다. 'sqlite3_reset'은 새로운 변수를 SQL의'? '자리 표시 자에 바인드하고 다시 실행하기 때문에 (여기서는 해당되지 않음),'sqlite3_finalize'는 명령문을 준비함으로써 소비 된 메모리를 해제합니다. 또한'sqlite3_prepare_v2'가 실패하면'sqlite3_errmsg (_chatDB)'를 로깅 할 것을 제안합니다. – Rob

답변

3
는 모든 행을 단계별로 당신의 if/else while로 변경

:

while (sqlite3_step(statement) == SQLITE_ROW) { 
     NSString *name = [[NSString alloc] initWithUTF8String: 
          (const char *) sqlite3_column_text(statement, 0)]; 
         NSLog(@"Name is %@",name); 
} 

그런 다음 당신이 모든 결과를 처리 할 수 ​​있습니다.

sqlite3_resetsqlite3_finalize으로 변경해야합니다. 그리고 데이터베이스도 닫는 것을 잊지 마십시오.

+0

고맙습니다, 그것이 문제였습니다. – Iman

+1

@rob Rob, 고맙습니다.하지만 7 분을 기다려달라고 부탁했습니다.하지만 다시 한번 감사드립니다. – Iman

+0

@ user1286300 불량! 감사! – Rob

관련 문제