· 3 months ago · Jun 18, 2025, 01:30 PM
1#include <iostream>
2#include "sqlite3.h"
3void createTable(sqlite3* DB);
4void insertDb(sqlite3* DB, const std::string& name);
5void readDb(sqlite3* DB);
6void updateDb(sqlite3* DB, int id, const std::string& newName);
7void deleteDb(sqlite3* DB, int id);
8int main() {
9 sqlite3* DB;
10 int exit = sqlite3_open("example.db", &DB);
11
12 if (exit) {
13 std::cerr << "Error opening DB: " << sqlite3_errmsg(DB) << std::endl;
14 return -1;
15 }
16 std::cout << "Opened database successfully!" << std::endl;
17
18 //createTable(DB);
19 /*insertDb(DB, "Aung Win Htut");
20 insertDb(DB, "Ko Ko");
21 insertDb(DB, "Aye Aye");*/
22 readDb(DB);
23 updateDb(DB, 1, "Green Hackers");
24 deleteDb(DB, 3);
25 readDb(DB);
26 sqlite3_close(DB);
27
28 return 0;
29}
30
31void createTable(sqlite3* DB) {
32 const char* sql = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT NOT NULL);";
33 char* errMsg;
34 int exit = sqlite3_exec(DB, sql, nullptr, 0, &errMsg);
35 if (exit != SQLITE_OK) {
36 std::cerr << "Error creating table: " << errMsg << std::endl;
37 sqlite3_free(errMsg);
38 }
39 else {
40 std::cout << "Table created successfully!" << std::endl;
41 }
42}
43
44void insertDb(sqlite3* DB, const std::string& name) {
45 const char* sql = "INSERT INTO users (name) VALUES (?);";
46 sqlite3_stmt* stmt;
47 int exit = sqlite3_prepare_v2(DB, sql, -1, &stmt, nullptr);
48 if (exit != SQLITE_OK) {
49 std::cerr << "Error preparing statement: " << sqlite3_errmsg(DB) << std::endl;
50 return;
51 }
52 sqlite3_bind_text(stmt, 1, name.c_str(), -1, SQLITE_STATIC);
53 exit = sqlite3_step(stmt);
54 if (exit != SQLITE_DONE) {
55 std::cerr << "Error inserting data: " << sqlite3_errmsg(DB) << std::endl;
56 }
57 sqlite3_finalize(stmt);
58}
59
60void readDb(sqlite3* DB) {
61 const char* sql = "SELECT * FROM users;";
62 sqlite3_stmt* stmt;
63 int exit = sqlite3_prepare_v2(DB, sql, -1, &stmt, nullptr);
64 if (exit != SQLITE_OK) {
65 std::cerr << "Error preparing statement: " << sqlite3_errmsg(DB) << std::endl;
66 return;
67 }
68 while ((exit = sqlite3_step(stmt)) == SQLITE_ROW) {
69 int id = sqlite3_column_int(stmt, 0);
70 const unsigned char* name = sqlite3_column_text(stmt, 1);
71 std::cout << "ID: " << id << ", Name: " << name << std::endl;
72 }
73 if (exit != SQLITE_DONE) {
74 std::cerr << "Error reading data: " << sqlite3_errmsg(DB) << std::endl;
75 }
76 sqlite3_finalize(stmt);
77}
78
79void updateDb(sqlite3* DB, int id, const std::string& newName) {
80 const char* sql = "UPDATE users SET name = ? WHERE id = ?;";
81 sqlite3_stmt* stmt;
82 int exit = sqlite3_prepare_v2(DB, sql, -1, &stmt, nullptr);
83 if (exit != SQLITE_OK) {
84 std::cerr << "Error preparing statement: " << sqlite3_errmsg(DB) << std::endl;
85 return;
86 }
87 sqlite3_bind_text(stmt, 1, newName.c_str(), -1, SQLITE_STATIC);
88 sqlite3_bind_int(stmt, 2, id);
89 exit = sqlite3_step(stmt);
90 if (exit != SQLITE_DONE) {
91 std::cerr << "Error updating data: " << sqlite3_errmsg(DB) << std::endl;
92 }
93 sqlite3_finalize(stmt);
94}
95
96void deleteDb(sqlite3* DB, int id) {
97 const char* sql = "DELETE FROM users WHERE id = ?;";
98 sqlite3_stmt* stmt;
99 int exit = sqlite3_prepare_v2(DB, sql, -1, &stmt, nullptr);
100 if (exit != SQLITE_OK) {
101 std::cerr << "Error preparing statement: " << sqlite3_errmsg(DB) << std::endl;
102 return;
103 }
104 sqlite3_bind_int(stmt, 1, id);
105 exit = sqlite3_step(stmt);
106 if (exit != SQLITE_DONE) {
107 std::cerr << "Error deleting data: " << sqlite3_errmsg(DB) << std::endl;
108 }
109 sqlite3_finalize(stmt);
110}