How to read data from SQLite database? How to read data from SQLite database? sqlite sqlite

How to read data from SQLite database?


A example using sqlite read:

#include <stdio.h>#include <sqlite3.h>#include <string.h>int main(int argc, char** argv){    const char*          username = "satyam";    char                 q[999];    sqlite3*             db;    sqlite3_stmt*        stmt;    int                  row = 0;    int                  bytes;    const unsigned char* text;    if (2 == argc) {        username = argv[1];    }    q[sizeof q - 1] = '\0';    snprintf(        q,        sizeof q - 1,        "SELECT ipaddr FROM items WHERE username = '%s'",        username    );    if (sqlite3_open ("test.db", &db) != SQLITE_OK) {        fprintf(stderr, "Error opening database.\n");        return 2;    }    printf("Query: %s\n", q);    sqlite3_prepare(db, q, sizeof q, &stmt, NULL);    bool done = false;    while (!done) {        printf("In select while\n");        switch (sqlite3_step (stmt)) {        case SQLITE_ROW:            bytes = sqlite3_column_bytes(stmt, 0);            text  = sqlite3_column_text(stmt, 1);            printf ("count %d: %s (%d bytes)\n", row, text, bytes);            row++;            break;        case SQLITE_DONE:            done = true;            break;        default:            fprintf(stderr, "Failed.\n");            return 1;        }    }    sqlite3_finalize(stmt);    return 0;}


How about the 'An Introduction to Sqlite C/C++ Interface', and there is a whole C++ example here on CodeProject.

This is bits of the more full sample,

#include "CppSQLite.h"#include <ctime>#include <iostream>using namespace std;const char* gszFile = "C:\\test.db";int main(int argc, char** argv){    try    {        int i, fld;        time_t tmStart, tmEnd;        CppSQLiteDB db;        cout << "SQLite Version: " << db.SQLiteVersion() << endl;        db.open(gszFile);        cout << db.execScalar("select count(*) from emp;")                << " rows in emp table in ";        db.Close();    }    catch (CppSQLiteException& e)    {        cerr << e.errorCode() << ":" << e.errorMessage() << endl;    }}


One way to do it without additional wrappers

#include <stdio.h>#include <string>using std::string;#include <sstream>using std::stringstream;#include "sqlite3.h"bool find_employee(int _id){    bool found = false;    sqlite3* db;    sqlite3_stmt* stmt;    stringstream ss;    // create sql statement string    // if _id is not 0, search for id, otherwise print all IDs    // this can also be achieved with the default sqlite3_bind* utilities    if(_id) { ss << "select * from employees where id = " << _id << ";"; }    else { ss << "select * from employees;"; }    string sql(ss.str());    //the resulting sql statement    printf("sql: %s\n", sql.c_str());    //get link to database object    if(sqlite3_open("data/test.db", &db) != SQLITE_OK) {        printf("ERROR: can't open database: %s\n", sqlite3_errmsg(db));        sqlite3_close(db);        return found;    }    // compile sql statement to binary    if(sqlite3_prepare_v2(db, sql.c_str(), -1, &stmt, NULL) != SQLITE_OK) {        printf("ERROR: while compiling sql: %s\n", sqlite3_errmsg(db));        sqlite3_close(db);        sqlite3_finalize(stmt);        return found;    }    // execute sql statement, and while there are rows returned, print ID    int ret_code = 0;    while((ret_code = sqlite3_step(stmt)) == SQLITE_ROW) {        printf("TEST: ID = %d\n", sqlite3_column_int(stmt, 0));        found = true;    }    if(ret_code != SQLITE_DONE) {        //this error handling could be done better, but it works        printf("ERROR: while performing sql: %s\n", sqlite3_errmsg(db));        printf("ret_code = %d\n", ret_code);    }    printf("entry %s\n", found ? "found" : "not found");    //release resources    sqlite3_finalize(stmt);    sqlite3_close(db);    return found;}