Alfredo, this simple example may may help

/*These global definitions are the uncompiled SQL for accessing the
database.*/
static char         *dbst_cart_wt_in_ins =
   "INSERT INTO CART_WT_IN VALUES (?, ?, ?, ?)";
static sqlite3_stmt *dbcmp_cart_wt_in_ins;
static const char   *dbend_cart_wt_in_ins;

static char         *dbst_cart_wt_in_sel =
   "SELECT * FROM CART_WT_IN WHERE cart_id = ?";
static sqlite3_stmt *dbcmp_cart_wt_in_sel;
static const char   *dbend_cart_wt_in_sel;

static char         *dbst_cart_wt_in_del =
   "DELETE FROM CART_WT_IN WHERE cart_id = ?";
static sqlite3_stmt *dbcmp_cart_wt_in_del;
static const char   *dbend_cart_wt_in_del;

/*-- db_prep ---------------------------------------------------
Prepare the SQL statements.*/
BOOLEAN db_prep (void) {

  if (sqlite3_prepare(db, dbst_cart_wt_in_ins,
                      -1,
                      &dbcmp_cart_wt_in_ins,
                      &dbend_cart_wt_in_ins) != SQLITE_OK) {
    errormet("908", (char *)sqlite3_errmsg(db)); /*Fatal DB Error.*/
    return(TRUE);
  }  /*if*/

  if (sqlite3_prepare(db, dbst_cart_wt_in_sel,
                      -1,
                      &dbcmp_cart_wt_in_sel,
                      &dbend_cart_wt_in_sel) != SQLITE_OK) {
    errormet("908",  (char *)sqlite3_errmsg(db)); /*Fatal DB Error.*/
    return(TRUE);
  }  /*if*/

  if (sqlite3_prepare(db, dbst_cart_wt_in_del,
                      -1,
                      &dbcmp_cart_wt_in_del,
                      &dbend_cart_wt_in_del) != SQLITE_OK) {
    errormet("908", (char *)sqlite3_errmsg(db)); /*Fatal DB Error.*/
    return(TRUE);
  }  /*if*/

  return(FALSE);
}    /*db_prep*/
.....
/*-- db_add_cart_weight ---------------------------------------
Ad a record of CARTID, TIME, DATE and WEIGHT to database.
This function uses pre-compiled SQL statements and binds the
incoming variables.*/
BOOLEAN db_add_cart_weight (CART_WT_IN *cartr) {

  int  busy_count;
  int  rc;
  char strg[256];

  /*First we bind the variables.  The -1 length specifies the
  actual string length.*/
  if (sqlite3_bind_text(dbcmp_cart_wt_in_ins, 1,
                        cartr->cart_id, -1,
                        SQLITE_STATIC) != SQLITE_OK) {
        errormet("908", (char *)sqlite3_errmsg(db)); /*Fatal DB Error.*/
    return(TRUE);
  }  /*if*/

  if (sqlite3_bind_text(dbcmp_cart_wt_in_ins, 2,
                        cartr->wt, -1,
                        SQLITE_STATIC) != SQLITE_OK) {
        errormet("908", (char *)sqlite3_errmsg(db));  /*Fatal DB Error.*/
    return(TRUE);
  }  /*if*/

  if (sqlite3_bind_text(dbcmp_cart_wt_in_ins, 3,
                        cartr->tm, -1,
                        SQLITE_STATIC) != SQLITE_OK) {
        errormet("908", (char *)sqlite3_errmsg(db));  /*Fatal DB Error.*/
    return(TRUE);
  }  /*if*/

  if (sqlite3_bind_text(dbcmp_cart_wt_in_ins, 4,
                        cartr->dt, -1,
                        SQLITE_STATIC) != SQLITE_OK) {
        errormet("908", (char *)sqlite3_errmsg(db));  /*Fatal DB Error.*/
    return(TRUE);
  }  /*if*/

  /*Now we execute the SQL statement.  Handle the possibility that
  sqlite is busy, but drop out after a number of attempts.*/
  busy_count = 0;
  while (TRUE) {
    rc = sqlite3_step(dbcmp_cart_wt_in_ins);

    switch (rc) {
      case SQLITE_BUSY:    /*We must try again, but not forever.*/
        if (busy_count++ > MAX_BUSY_TRIES) {
          sqlite3_reset(dbcmp_cart_wt_in_ins);
          errormet("908", "DB locked busy");
          return(TRUE);
        }  /*if*/
        sleep(0);  /*For a gentler poll.*/
        break;
      case SQLITE_DONE:    /*Success.*/
        sqlite3_reset(dbcmp_cart_wt_in_ins); /*Ready for next step.*/
        return(FALSE);
      case SQLITE_ROW:     /*A row is ready.  Should never happen.*/
        sqlite3_reset(dbcmp_cart_wt_in_ins);
        return(TRUE);
        break;
      case SQLITE_ERROR:   /*Run time error, discard the VM.*/
        sqlite3_reset(dbcmp_cart_wt_in_ins);
        sprintf(strg, "SQL INSERT error: %s", sqlite3_errmsg(db));
        errormet("908", strg);   /*Fatal Error.*/
        return(TRUE);
      case SQLITE_MISUSE:  /*VM should not have been used.*/
        sqlite3_reset(dbcmp_cart_wt_in_ins);
                errormet("908", "SQLITE_MISUSE");  /*Fatal DB Error.*/
        return(TRUE);
        break;
      default:
        sqlite3_reset(dbcmp_cart_wt_in_ins);
        errormet("908", "Unexpected return from sqlite3_step");
        return(TRUE);
    }  /*switch*/
  }    /*while*/

  return(FALSE);
}    /*db_add_cart_weight*/


Alfredo Cole wrote:
Hi:

I have searched, but have not found samples of actual uses of sqlite_compile, sqlite_step and sqlite_finalize. Could anybody point the way to where I can find samples with source code to use these functions?

Thank you.


Reply via email to