d:\dsa_PROJ\include\database\userDao.h
sqlite3 dao userchamanEiqbal
c_cpp
2 years ago
4.2 kB
8
Indexable
#ifndef USERDAO_H #define USERDAO_H #include <iostream> #include <sqlite3.h> #include "classes/User.h" class UserDAO { private: // Static member variable for the shared database connection static sqlite3 *db; public: // Constructor and destructor to open and close the database connection UserDAO() { if (db == nullptr) { int rc = sqlite3_open("D:\\dsa_PROJ\\resources\\database.db", &db); if (rc != SQLITE_OK) { std::cout << "Error opening the database." << std::endl; sqlite3_close(db); db = nullptr; // Set db to nullptr to avoid using an invalid connection } } } ~UserDAO() { if (db != nullptr) { sqlite3_close(db); db = nullptr; } } void insert(std::string username, std::string userpassword) { if (db == nullptr) { std::cout << "Error: Database connection is not open." << std::endl; return; } std::string query = "SELECT COUNT(*) FROM USERS"; sqlite3_stmt* statement; int rc = sqlite3_prepare_v2(db, query.c_str(), -1, &statement, nullptr); if(rc != SQLITE_OK) { std::cout << "Error preparing statement." << std::endl; return; } rc = sqlite3_step(statement); int count; if(rc == SQLITE_ROW) { count = sqlite3_column_int(statement, 0); } else if (rc != SQLITE_DONE) { std::cout << "Error executing the count query." << std::endl; } sqlite3_finalize(statement); std::string query_insert; if(count == 0) { query_insert = "INSERT INTO USERS (UserId, UserName, Password) VALUES (0, '" + username + "', '" + userpassword + "')"; } else { query_insert = "INSERT INTO USERS (UserId, UserName, Password) VALUES ((SELECT COALESCE(MAX(UserId), 0) + 1 FROM USERS), '" + username + "', '" + userpassword + "')"; } sqlite3_stmt* statement_insert; rc = sqlite3_prepare_v2(db, query_insert.c_str(), -1, &statement_insert, nullptr); if(rc != SQLITE_OK) { std::cout << "Error preparing insert statement." << std::endl; return; } rc = sqlite3_step(statement_insert); if(rc != SQLITE_DONE) { std::cout << "Error executing insert statement: " << sqlite3_errmsg(db) << std::endl; } else { std::cout << "User inserted successfully." << std::endl; } sqlite3_finalize(statement_insert); } bool is_unique(std::string username) { if (db == nullptr) { std::cout << "Error: Database connection is not open." << std::endl; return false; } std::string query = "SELECT COUNT(*) FROM USERS WHERE UserName = ' " + username + " '"; sqlite3_stmt* stmt_check; int rc = sqlite3_prepare_v2(db, query.c_str(), -1, &stmt_check, nullptr); if(rc != SQLITE_OK) { std::cout << "Error preparing check statement for unique." << std::endl; return false; } rc = sqlite3_step(stmt_check); if(rc == SQLITE_ROW) { int count = sqlite3_column_int(stmt_check, 0); if(count == 0) { std::cout << "Username is unique." << std::endl; return true; } else { std::cout << "Username is not unique." << std::endl; return false; } } else if(rc != SQLITE_DONE) { std::cout << "Error executing check query for unique." << std::endl; return false; } sqlite3_finalize(stmt_check); return false; } // Getter for the database connection static sqlite3* getDBConnection() { return db; } // Setter for the database connection static void setDBConnection(sqlite3* newDB) { db = newDB; } }; sqlite3* UserDAO::db = nullptr; #endif
Editor is loading...