SQLite C example: bind data

This is a simple example of selecting a column from an SQLite database using the C interface, with a bind statement.

The database has one table, called "t", with one column, called "xyz". See SQLite C example: insert data for creating the table and inserting data, as well as the macros in "mysqlite.h" given there.

The main program selects whatever is in the table "xyz" and then prints out each row:

#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
#include <string.h>
#include "mysqlite.h"

int main (int argc, char ** argv)
{
    sqlite3 * db;
    char * sql;
    sqlite3_stmt * stmt;
    int nrecs;
    char * errmsg;
    int i;
    int row = 0;
    int arg;

    CALL_SQLITE (open ("/home/ben/test.db", & db));
    sql = "SELECT * FROM t WHERE xyz = ?";
    CALL_SQLITE (prepare_v2 (db, sql, strlen (sql) + 1, & stmt, NULL));

    for (arg = 1; arg < argc; arg++) {
        CALL_SQLITE (bind_text (stmt,
                                1, /* The number of the argument. */
                                argv[arg],
                                strlen (argv[arg]),
                                0 /* The callback. */
                                ));
        while (1) {
            int s;

            s = sqlite3_step (stmt);
            if (s == SQLITE_ROW) {
                int bytes;
                const unsigned char * text;
                bytes = sqlite3_column_bytes(stmt, 0);
                text  = sqlite3_column_text (stmt, 0);
                printf ("%d: %s\n", row, text);
                row++;
            }
            else if (s == SQLITE_DONE) {
                break;
            }
            else {
                fprintf (stderr, "Failed.\n");
                exit (1);
            }
        }
        CALL_SQLITE (reset (stmt));
        CALL_SQLITE (clear_bindings (stmt));
    }
    return 0;
}

Download it here.

Web links

Ask and answer questions on C in the new C forum

Copyright © Ben Bullock 2009-2012. All rights reserved. For comments, questions, and corrections, please email Ben Bullock (ben.bullock@lemoda.net) / Privacy / Disclaimer