Required Header File
sqlite3.h
Compilation Command
gcc program.c -lsqlite3
Programming Workflow
- Open database connection
- Perform operations (insert, update, delete, select)
- Close database connection
Opening a Database Connection
int sqlite3_open(const char *filename, sqlite3 **ppDb);
- Purpose: Establishes connection to SQLite data base file
- Parameters:
filename: Path to database fileppDb: Pointer to database handle
- Returns: SQLITE_OK (0) on success, error code on failure
Closing a Database Connection
int sqlite3_close(sqlite3 *db);
- Purpose: Releases database resources
- Parameter: Database handle to close
- Returns: SQLITE_OK (0) on success
Querying Data
int sqlite3_exec(
sqlite3 *db,
const char *sql,
int (*callback)(void*,int,char**,char**),
void *arg,
char **errmsg
);
Example implementation:
#include <stdio.h>
#include <sqlite3.h>
int auth_callback(void* param, int col_count, char** values, char** columns) {
int* auth_flag = (int*)param;
*auth_flag = 1;
return 0;
}
int main() {
sqlite3 *db_conn;
int status = sqlite3_open("users.db", &db_conn);
if (status != SQLITE_OK) {
fprintf(stderr, "Connection error: %s\n", sqlite3_errmsg(db_conn));
sqlite3_close(db_conn);
return 1;
}
char query[256];
snprintf(query, sizeof(query),
"SELECT * FROM accounts WHERE username='%s' AND password='%s';",
"admin", "secret123");
char *error_msg = NULL;
int auth_result = 0;
status = sqlite3_exec(db_conn, query, auth_callback, &auth_result, &error_msg);
if (status != SQLITE_OK) {
fprintf(stderr, "Query error: %s\n", error_msg);
sqlite3_free(error_msg);
} else if (auth_result) {
printf("Authentication successful\n");
} else {
printf("Invalid credentials\n");
}
sqlite3_close(db_conn);
return 0;
}
Executing Non-Query Statements
#include <stdio.h>
#include <sqlite3.h>
int main() {
sqlite3 *db_handle;
int rc = sqlite3_open("inventory.db", &db_handle);
if (rc != SQLITE_OK) {
fprintf(stderr, "Database error: %s\n", sqlite3_errmsg(db_handle));
sqlite3_close(db_handle);
return 1;
}
const char *insert_stmt = "INSERT INTO products VALUES(101, 'Laptop', 999.99);";
char *err_msg = NULL;
rc = sqlite3_exec(db_handle, insert_stmt, NULL, NULL, &err_msg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", err_msg);
sqlite3_free(err_msg);
} else {
printf("Record inserted successfully\n");
}
sqlite3_close(db_handle);
return 0;
}
Callback Function Signature
int callback(void *user_data, int column_count, char **column_values, char **column_names);
user_data: Custom data passed from sqlite3_execcolumn_count: Number of columns in resultcolumn_values: Array of field valuescolumn_names: Array of field names- Returns: 0 to continue processing, non-zero to abort