2017-10-21 2 views
0

내 sqlite 함수는 다음과 같습니다.sqlite3_exec는 출력을 반환하지 않습니다.

static int callback(void *not_used, int row_num, char **row, char **col_name) 
{ 
    for(int i = 0; i < row_num; ++i) 
    { 
     printf("%s = %s\n", col_name[i], row[i] ? row[i] : "NULL"); 
    } 
    return 0; 
} 

int query(const char *statement) 
{ 
    result = sqlite3_exec(database, statement, callback, 0, &message); 
    if(result != SQLITE_OK) 
    { 
     print_error(sqlite3_errmsg(database)); 
    } 
    return result; 
} 

그러나 내 쿼리에는 값이 표시되지 않습니다.

SQL 쿼리는 대소 문자 오류를 누군가 는 실수를하면 내가 빈 집합을 반환하는 코드를 변경하려면 어떻게

"select * from app_list where name='evince'" // it should be Evince 

이 (내가 콜백 또는 쿼리를 수정해야하는 부분) 나는 변경하는 tryied 콜백

if(row_num >0) 
{ 
    for() ... 
} 
else 
{ 
    printf("Empty set\n"); 
} 

하지만 그 밖의 것은 실행되지 않습니다.

sqlite3_exec()는 대/소문자 구분 오류가 발생하더라도 SQLite_OK를 반환합니다.

+0

카운트하지 않고 내 문제를 해결했다. 나중에 확인하십시오. 커서 인터페이스를 사용하는 것이 좋습니다. –

답변

0

글쎄, 나는 sqlite3_exec 및 콜백 많은 행이 반환 된 방법

int query(const char *statement) 
{ 
    sqlite3_stmt *stmt = NULL; 
    result = sqlite3_prepare_v2(database, statement, -1, &stmt, NULL); 
    if(result != SQLITE_OK) 
    { 
     print_error(sqlite3_errmsg(database)); 
     return result; 
    } 

    int row_count = 0; 
    result = sqlite3_step(stmt); 
    while(result == SQLITE_ROW) 
    { 
     row_count++; 
     printf("Line %d\n", row_count); 
     int col_count = sqlite3_column_count(stmt); 
     for (int col_i = 0; col_i < col_count; ++col_i) 
     { 
      int type = sqlite3_column_type(stmt, col_i); 
      printf("%s\t", sqlite3_column_name(stmt, col_i)); 
      if (type == SQLITE_INTEGER) 
      { 
       printf("%d\n", sqlite3_column_int(stmt, col_i)); 
      } 
      else if (type == SQLITE_FLOAT) 
      { 
       printf("%f\n", sqlite3_column_double(stmt, col_i)); 
      } 
      else if (type == SQLITE_TEXT) 
      { 
       printf("%s", sqlite3_column_text(stmt, col_i)); 
      } 
      else if (type == SQLITE_BLOB) 
      { 
       printf("BLOB\n"); 
      } 
      else if (type == SQLITE_NULL) 
      { 
       printf("NULL\n"); 
      } 
     } 
     result = sqlite3_step(stmt); 
    } 

    if(row_count == 0) 
    { 
     printf("Empty set.\n"); 
    } 

    result = sqlite3_finalize(stmt); 
    return result; 
}