Small. Fast. Reliable.
Choose any three.
This sample code was contributed by Dennis Cote in the sqlite-users mailing list on 2009-03-25 00:23:23

   /*************************************************************/
   /** This code is equivalent to the very old callback style  **/
   /** code shown at http://www.sqlite.org/quickstart.html.    **/
   /**                                                         **/
   /** It should provide the same results using the newer      **/
   /** prepare/step/finalize set of calls that are             **/
   /** discussed at http://www.sqlite.org/cintro.html.         **/
   /**                                                         **/
   /** Hopefully it provides a complete, if somewhat basic,    **/
   /** intro to the use of the preferred C API functions.      **/
   /*************************************************************/

   #include <stdio.h>
   #include <sqlite3.h>

   int main(int argc, const char *argv[]){
     sqlite3 *db;
     sqlite3_stmt *stmt;
     int rc = 0;
     int col, cols;

     if( argc!=3 ){
       fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
     }else{
       // open the database file
       rc = sqlite3_open(argv[1], &db);
       if( rc ){
         fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
       }else{
         // prepare the SQL statement from the command line
         rc = sqlite3_prepare_v2(db, argv[2], -1, &stmt, 0);
         if( rc ){
           fprintf(stderr, "SQL error: %d : %s\n", rc, sqlite3_errmsg(db));
         }else{
           cols = sqlite3_column_count(stmt);
           // execute the statement
           do{
             rc = sqlite3_step(stmt);
             switch( rc ){
               case SQLITE_DONE:
                 break;
               case SQLITE_ROW:
                 // print results for this row
                 for( col=0; col<cols; col++){
                   const char *txt = (const char*)sqlite3_column_text(stmt,
   col);
                   printf("%s = %s\n", sqlite3_column_name(stmt, col), txt
   ? txt : "NULL");
                 }
                 break;
               default:
                 fprintf(stderr, "Error: %d : %s\n",  rc, sqlite3_errmsg(db));
                 break;
             }
           }while( rc==SQLITE_ROW );
           // finalize the statement to release resources
           sqlite3_finalize(stmt);
         }
         // close the database file
         sqlite3_close(db);
       }
     }
     return rc!=SQLITE_DONE;
   }