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);
}