sqlite_demo/main.cpp
2021-06-15 12:25:32 +03:00

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