128 lines
2.6 KiB
C++
128 lines
2.6 KiB
C++
|
#include <iostream>
|
||
|
#include <string>
|
||
|
#include "sqlite3.h"
|
||
|
|
||
|
const char *DB_FILE_NAME = "example.sqlite";
|
||
|
|
||
|
sqlite3 *db = nullptr;
|
||
|
sqlite3_stmt *ins_log_stmt = nullptr;
|
||
|
|
||
|
int create_tables() {
|
||
|
char *err_msg = nullptr;
|
||
|
int rc = sqlite3_exec(
|
||
|
db,
|
||
|
"CREATE TABLE IF NOT EXISTS logs("\
|
||
|
"id INTEGER PRIMARY KEY AUTOINCREMENT,"\
|
||
|
"data TEXT,"\
|
||
|
"datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP"\
|
||
|
")",
|
||
|
NULL,
|
||
|
0,
|
||
|
&err_msg
|
||
|
);
|
||
|
if (rc) {
|
||
|
std::cout << "Error: " << err_msg << std::endl;
|
||
|
sqlite3_free(err_msg);
|
||
|
}
|
||
|
return rc;
|
||
|
}
|
||
|
|
||
|
int prepare_statements() {
|
||
|
std::string sql = "INSERT INTO logs (data) VALUES (?);";
|
||
|
return sqlite3_prepare_v2(
|
||
|
db,
|
||
|
sql.c_str(),
|
||
|
sql.length(),
|
||
|
&ins_log_stmt,
|
||
|
nullptr
|
||
|
);
|
||
|
}
|
||
|
|
||
|
static int logs_callback(void *data, int argc, char **argv, char **azColName){
|
||
|
if (argc == 3) {
|
||
|
std::cout << argv[0] << ". (" << argv[2] << ") " << argv[1] << std::endl;
|
||
|
} else {
|
||
|
std::cout << "Error: Expected 3 columns, got " << argc << std::endl;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int list_logs() {
|
||
|
char *err_msg = nullptr;
|
||
|
std::string sql = "SELECT id, data, datetime FROM logs";
|
||
|
int rc = sqlite3_exec(db, sql.c_str(), logs_callback, NULL, &err_msg);
|
||
|
if (rc != SQLITE_OK) {
|
||
|
std::cout << "Error: " << err_msg << std::endl;
|
||
|
sqlite3_free(err_msg);
|
||
|
}
|
||
|
return rc;
|
||
|
}
|
||
|
|
||
|
int insert_log(std::string data) {
|
||
|
int rc = sqlite3_bind_text(
|
||
|
ins_log_stmt,
|
||
|
1,
|
||
|
data.c_str(),
|
||
|
data.length(),
|
||
|
SQLITE_STATIC
|
||
|
);
|
||
|
if (rc) {
|
||
|
return rc;
|
||
|
}
|
||
|
|
||
|
rc = sqlite3_step(ins_log_stmt);
|
||
|
if (rc != SQLITE_DONE) {
|
||
|
return rc;
|
||
|
}
|
||
|
|
||
|
rc = sqlite3_reset(ins_log_stmt);
|
||
|
if (rc) {
|
||
|
return rc;
|
||
|
}
|
||
|
|
||
|
return rc;
|
||
|
}
|
||
|
|
||
|
int main() {
|
||
|
int rc = sqlite3_open(DB_FILE_NAME, &db);
|
||
|
if (rc) {
|
||
|
std::cout << "Error code: " << rc << std::endl;
|
||
|
return rc;
|
||
|
}
|
||
|
|
||
|
rc = create_tables();
|
||
|
if (rc) {
|
||
|
std::cout << "Error code: " << rc << std::endl;
|
||
|
return rc;
|
||
|
}
|
||
|
|
||
|
rc = prepare_statements();
|
||
|
if (rc) {
|
||
|
std::cout << "Error code: " << rc << std::endl;
|
||
|
return rc;
|
||
|
}
|
||
|
|
||
|
rc = list_logs();
|
||
|
if (rc) {
|
||
|
std::cout << "Error code: " << rc << std::endl;
|
||
|
return rc;
|
||
|
}
|
||
|
|
||
|
rc = insert_log("wolf (test log)");
|
||
|
if (rc) {
|
||
|
std::cout << "Error code123: " << rc << std::endl;
|
||
|
return rc;
|
||
|
}
|
||
|
|
||
|
rc = insert_log("lion (test log2)");
|
||
|
if (rc) {
|
||
|
std::cout << "Error code: " << rc << std::endl;
|
||
|
return rc;
|
||
|
}
|
||
|
|
||
|
sqlite3_close(db);
|
||
|
|
||
|
return 0;
|
||
|
}
|