Szukaj…


Uwagi

oficjalna dokumentacja: Prepared Statement Object

Wykonanie wyciągu

Instrukcja jest zbudowana z funkcją taką jak sqlite3_prepare_v2 () .

Przygotowany obiekt instrukcji musi zostać wyczyszczony za pomocą narzędzia sqlite3_finalize () . Nie zapomnij tego w przypadku błędu.

Jeśli parametry są używane, ustaw ich wartości za pomocą funkcji sqlite3_bind_xxx () .

Rzeczywiste wykonanie ma miejsce po wywołaniu funkcji sqlite3_step () .

const char *sql = "INSERT INTO MyTable(ID, Name) VALUES (?, ?)";
sqlite3_stmt *stmt;
int err;

err = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (err != SQLITE_OK) {
    printf("prepare failed: %s\n", sqlite3_errmsg(db));
    return /* failure */;
}

sqlite3_bind_int (stmt, 1, 42);                          /* ID */
sqlite3_bind_text(stmt, 2, "Bob", -1, SQLITE_TRANSIENT); /* name */

err = sqlite3_step(stmt);
if (err != SQLITE_DONE) {
    printf("execution failed: %s\n", sqlite3_errmsg(db));
    sqlite3_finalize(stmt);
    return /* failure */;
}

sqlite3_finalize(stmt);
return /* success */;

Odczytywanie danych z kursora

Zapytanie SELECT jest wykonywane jak każda inna instrukcja. Aby odczytać zwrócone dane, wywołaj funkcję sqlite3_step () w pętli. Zwraca:

  • SQLITE_ROW: jeśli dane dla następnego wiersza są dostępne, lub
  • SQLITE_DONE: jeśli nie ma już wierszy, lub
  • dowolny kod błędu.

Jeśli zapytanie nie zwraca żadnych wierszy, pierwszy krok zwraca SQLITE_DONE.

Aby odczytać dane z bieżącego wiersza, wywołaj funkcje sqlite3_column_xxx () :

const char *sql = "SELECT ID, Name FROM MyTable";
sqlite3_stmt *stmt;
int err;

err = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (err != SQLITE_OK) {
    printf("prepare failed: %s\n", sqlite3_errmsg(db));
    return /* failure */;
}

for (;;) {
    err = sqlite3_step(stmt);
    if (err != SQLITE_ROW)
        break;

    int         id   = sqlite3_column_int (stmt, 0);
    const char *name = sqlite3_column_text(stmt, 1);
    if (name == NULL)
        name = "(NULL)";
    printf("ID: %d, Name: %s\n", id, name);
}

if (err != SQLITE_DONE) {
    printf("execution failed: %s\n", sqlite3_errmsg(db));
    sqlite3_finalize(stmt);
    return /* failure */;
}

sqlite3_finalize(stmt);
return /* success */;

Wykonywanie przygotowanego wyciągu wiele razy

Po oświadczenie zostało zrealizowane , wywołanie sqlite3_reset () przynosi go z powrotem do pierwotnego stanu tak, że może on być ponownie wykonane.

Zazwyczaj podczas gdy sama instrukcja pozostaje taka sama, parametry są zmieniane:

const char *sql = "INSERT INTO MyTable(ID, Name) VALUES (?, ?)";
sqlite3_stmt *stmt;
int err;

err = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (err != SQLITE_OK) {
    printf("prepare failed: %s\n", sqlite3_errmsg(db));
    return /* failure */;
}

for (...) {
    sqlite3_bind_int (stmt, 1, ...);   /* ID */
    sqlite3_bind_text(stmt, 2, ...);   /* name */

    err = sqlite3_step(stmt);
    if (err != SQLITE_DONE) {
        printf("execution failed: %s\n", sqlite3_errmsg(db));
        sqlite3_finalize(stmt);
        return /* failure */;
    }

    sqlite3_reset(stmt);
}

sqlite3_finalize(stmt);
return /* success */;


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow