Listing 2: C API example.
#include <stdlib.h> #include <stdio.h> #include <sqlite.h> typedef struct sqlite_vm sqlite_vm; int main() { const char* db_name = "db"; sqlite *db; /* The database handle */ char *sql = "select projectname_full as name, rating, license " "from project order by rating desc limit 10"; const char *tail; /* Points to next SQL statement to process, if any. */ char *err_msg; /* Last error message, if any. */ sqlite_vm *pvm; /* Virtual machine for executing query. */ db = sqlite_open(db_name, 0, &err_msg); if(db==0) { fprintf(stderr, "Can't open database: %s\n", err_msg); exit(1); } /* Compile SQL, allocate a virtual machine for processing. */ int ret = sqlite_compile(db,sql,&tail,&pvm,&err_msg); if(ret != SQLITE_OK) { fprintf(stderr, "Compile failed: %s\n", err_msg); sqlite_freemem(err_msg); exit(1); } int i, ncols; const char** fields; const char** col_defs; ret = sqlite_step(pvm, &ncols, &fields, &col_defs); /* Print Column Names */ printf("%35s %5s %40s\n\n", col_defs[0], col_defs[1], col_defs[2]); /* Print Column Datatypes */ printf("%35s %5s %40s\n\n", col_defs[3], col_defs[4], col_defs[5]); /* Print Result Set */ while(ret == SQLITE_ROW) { printf("%35s %5s %40s\n", fields[0], fields[1], fields[2]); ret = sqlite_step(pvm, &ncols, &fields, &col_defs); } ret = sqlite_finalize(pvm, &err_msg); if(ret != SQLITE_OK) { fprintf(stderr, "Finalize failed: %s\n", err_msg); sqlite_freemem(err_msg); exit(1); } sqlite_close(db); }