#include #include "sqlite3.h" void createTable(sqlite3* DB); void insertDb(sqlite3* DB, const std::string& name); void readDb(sqlite3* DB); void updateDb(sqlite3* DB, int id, const std::string& newName); void deleteDb(sqlite3* DB, int id); int main() { sqlite3* DB; int exit = sqlite3_open("example.db", &DB); if (exit) { std::cerr << "Error opening DB: " << sqlite3_errmsg(DB) << std::endl; return -1; } std::cout << "Opened database successfully!" << std::endl; //createTable(DB); /*insertDb(DB, "Aung Win Htut"); insertDb(DB, "Ko Ko"); insertDb(DB, "Aye Aye");*/ readDb(DB); updateDb(DB, 1, "Green Hackers"); deleteDb(DB, 3); readDb(DB); sqlite3_close(DB); return 0; } void createTable(sqlite3* DB) { const char* sql = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT NOT NULL);"; char* errMsg; int exit = sqlite3_exec(DB, sql, nullptr, 0, &errMsg); if (exit != SQLITE_OK) { std::cerr << "Error creating table: " << errMsg << std::endl; sqlite3_free(errMsg); } else { std::cout << "Table created successfully!" << std::endl; } } void insertDb(sqlite3* DB, const std::string& name) { const char* sql = "INSERT INTO users (name) VALUES (?);"; sqlite3_stmt* stmt; int exit = sqlite3_prepare_v2(DB, sql, -1, &stmt, nullptr); if (exit != SQLITE_OK) { std::cerr << "Error preparing statement: " << sqlite3_errmsg(DB) << std::endl; return; } sqlite3_bind_text(stmt, 1, name.c_str(), -1, SQLITE_STATIC); exit = sqlite3_step(stmt); if (exit != SQLITE_DONE) { std::cerr << "Error inserting data: " << sqlite3_errmsg(DB) << std::endl; } sqlite3_finalize(stmt); } void readDb(sqlite3* DB) { const char* sql = "SELECT * FROM users;"; sqlite3_stmt* stmt; int exit = sqlite3_prepare_v2(DB, sql, -1, &stmt, nullptr); if (exit != SQLITE_OK) { std::cerr << "Error preparing statement: " << sqlite3_errmsg(DB) << std::endl; return; } while ((exit = sqlite3_step(stmt)) == SQLITE_ROW) { int id = sqlite3_column_int(stmt, 0); const unsigned char* name = sqlite3_column_text(stmt, 1); std::cout << "ID: " << id << ", Name: " << name << std::endl; } if (exit != SQLITE_DONE) { std::cerr << "Error reading data: " << sqlite3_errmsg(DB) << std::endl; } sqlite3_finalize(stmt); } void updateDb(sqlite3* DB, int id, const std::string& newName) { const char* sql = "UPDATE users SET name = ? WHERE id = ?;"; sqlite3_stmt* stmt; int exit = sqlite3_prepare_v2(DB, sql, -1, &stmt, nullptr); if (exit != SQLITE_OK) { std::cerr << "Error preparing statement: " << sqlite3_errmsg(DB) << std::endl; return; } sqlite3_bind_text(stmt, 1, newName.c_str(), -1, SQLITE_STATIC); sqlite3_bind_int(stmt, 2, id); exit = sqlite3_step(stmt); if (exit != SQLITE_DONE) { std::cerr << "Error updating data: " << sqlite3_errmsg(DB) << std::endl; } sqlite3_finalize(stmt); } void deleteDb(sqlite3* DB, int id) { const char* sql = "DELETE FROM users WHERE id = ?;"; sqlite3_stmt* stmt; int exit = sqlite3_prepare_v2(DB, sql, -1, &stmt, nullptr); if (exit != SQLITE_OK) { std::cerr << "Error preparing statement: " << sqlite3_errmsg(DB) << std::endl; return; } sqlite3_bind_int(stmt, 1, id); exit = sqlite3_step(stmt); if (exit != SQLITE_DONE) { std::cerr << "Error deleting data: " << sqlite3_errmsg(DB) << std::endl; } sqlite3_finalize(stmt); }