#include #include #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; }