Извлечение данных с помощью sqlite - PullRequest
1 голос
/ 25 сентября 2019

Я пытался использовать учебник по SQLite здесь , чтобы узнать, как использовать SQLite в C. У меня были проблемы с выяснением, как именно его использовать, поскольку в нем упоминается только sqlite3_exec, которыйкажется невероятно не интуитивным, чтобы использовать для базовых запросов (он использует обратный вызов для всего).Затем я наткнулся на этот ответ https://stackoverflow.com/a/31168999/11954200,, который решает ту же проблему и предлагает использовать различные четыре оператора sqlite, которые по существу объединены в сокращенную форму sqlite3_exec.Вот мое понимание до сих пор:

// Query to get the rows

// Part1 -- Prepare the query: cursor.execute()
// http://www.sqlite.org/c3ref/prepare.html
sqlite3_stmt *stmt; // this is the prepared statement that the sqlite3_prepare writes to
rc = sqlite3_prepare(db, "SELECT * FROM mytable LIMIT 20", -1, &stmt, NULL);
if (rc != SQLITE_OK) {
    printf("error: %s", sqlite3_errmsg(db));
    return 0;
}


// Part2 -- equivalent of cursor.fetchone()
// http://www.sqlite.org/c3ref/step.html
int rownum=1;
while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) {

    // Part3 -- reference the values from the row
    // http://www.sqlite.org/c3ref/column_blob.html
    int id                       = sqlite3_column_int(stmt, 0);
    const unsigned char * date   = sqlite3_column_text(stmt, 1);
    printf("Row: %d | ID: %d | Date: %s\n", rownum, id, date);
    rownum++;
}

// Part4 -- equivalent of cursor.close()
// http://www.sqlite.org/c3ref/finalize.html
sqlite3_finalize(stmt);

Другими словами, на более высоком языке:

  • sqlite3_prepare(...) работает как cursor.execute(...)
  • sqlite3_step(...) работает как cursor.fetchone(...)
  • sqlite3_finalize(...) работает как cursor.close(...);

Является ли это точной оценкой того, как эти операторы работают в sqlite?Будет ли sqlite3_exec когда-либо использоваться при получении результатов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...