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.