#include <iostream>
#include <sqlite3.h>
using namespace std;
class Database {
public:
Database(const string& dbName);
~Database();
void createTable();
void insertData(const string& playerName, int score);
void displayData();
private:
sqlite3* db;
string dbName;
static int callback(void* NotUsed, int argc, char** argv, char** azColName);
void executeSQL(const string& sql);
};
Database::Database(const string& dbName) : db(nullptr), dbName(dbName) {
if (sqlite3_open(dbName.c_str(), &db)) {
cerr << "Can't open database: " << sqlite3_errmsg(db) << endl;
exit(1);
} else {
cout << "Opened database successfully" << endl;
}
}
Database::~Database() {
if (db) {
sqlite3_close(db);
cout << "Closed database successfully" << endl;
}
}
void Database::createTable() {
string sql = "CREATE TABLE IF NOT EXISTS SCORES("
"ID INTEGER PRIMARY KEY AUTOINCREMENT,"
"PLAYER_NAME TEXT NOT NULL,"
"SCORE INT NOT NULL);";
executeSQL(sql);
cout << "Table created successfully" << endl;
}
void Database::insertData(const string& playerName, int score) {
string sql = "INSERT INTO SCORES (PLAYER_NAME, SCORE) VALUES ('" + playerName + "', " + to_string(score) + ");";
executeSQL(sql);
cout << "Data inserted successfully" << endl;
}
void Database::displayData() {
string sql = "SELECT * FROM SCORES;";
executeSQL(sql);
}
int Database::callback(void* NotUsed, int argc, char** argv, char** azColName) {
for (int i = 0; i < argc; i++) {
cout << azColName[i] << ": " << (argv[i] ? argv[i] : "NULL") << endl;
}
cout << endl;
return 0;
}
void Database::executeSQL(const string& sql) {
char* errMsg = 0;
int rc = sqlite3_exec(db, sql.c_str(), callback, 0, &errMsg);
if (rc != SQLITE_OK) {
cerr << "SQL error: " << errMsg << endl;
sqlite3_free(errMsg);
}
}
int main() {
Database db("game_scores.db");
db.createTable();
db.insertData("Player1", 100);
db.insertData("Player2", 150);
db.insertData("Player3", 200);
cout << "Displaying data:" << endl;
db.displayData();
return 0;
}