https://gitlab.synchro.net/main/sbbs/-/merge_requests/538#note_7220
see this example (from chatgpt sorry)
for INSERT/CREATE TABLE it-s use exec method
and for SELECT use prepare
Other libraries I remember, such as using MySQL for PHP, had db.exec() for queries that didn't return results, and db.query() for those that did return rows and iterate through them.
```c++
#include <stdio.h>
#include <sqlite3.h>
int main() {
sqlite3 *db;
char *errMsg = 0;
int rc;
// Abrir (o crear) la base de datos
rc = sqlite3_open("ejemplo.db", &db);
if (rc) {
fprintf(stderr, "No se puede abrir la base de datos: %s\n", sqlite3_errmsg(db));
return 1;
} else {
printf("Base de datos abierta exitosamente\n");
}
// Crear tabla
const char *sqlCreateTable = "CREATE TABLE IF NOT EXISTS personas (id INTEGER PRIMARY KEY, nombre TEXT);";
rc = sqlite3_exec(db, sqlCreateTable, 0, 0, &errMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "Error al crear tabla: %s\n", errMsg);
sqlite3_free(errMsg);
}
// Insertar datos
const char *sqlInsert = "INSERT INTO personas (nombre) VALUES ('Juan'), ('Ana');";
rc = sqlite3_exec(db, sqlInsert, 0, 0, &errMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "Error al insertar datos: %s\n", errMsg);
sqlite3_free(errMsg);
}
// Consultar datos
const char *sqlSelect = "SELECT id, nombre FROM personas;";
sqlite3_stmt *stmt;
rc = sqlite3_prepare_v2(db, sqlSelect, -1, &stmt, 0);
if (rc == SQLITE_OK) {
while (sqlite3_step(stmt) == SQLITE_ROW) {
int id = sqlite3_column_int(stmt, 0);
const unsigned char *nombre = sqlite3_column_text(stmt, 1);
printf("ID: %d, Nombre: %s\n", id, nombre);
}
} else {
fprintf(stderr, "Error al preparar la consulta: %s\n", sqlite3_errmsg(db));
}
sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}
```
---
■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net