#include "databasemanager.h" // Singleton instance DatabaseManager& DatabaseManager::instance() { static DatabaseManager instance; return instance; } // Конструктор: создаем подключение DatabaseManager::DatabaseManager() { db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("mydatabase.db"); if (!db.open()) { qDebug() << "Ошибка открытия БД:" << db.lastError().text(); } else { qDebug() << "База данных успешно открыта"; } } // Деструктор: закрываем подключение DatabaseManager::~DatabaseManager() { if (db.isOpen()) { db.close(); } } // Возвращает ссылку на объект БД QSqlDatabase& DatabaseManager::database() { return db; } // Выполняет SQL-запрос (без параметров) bool DatabaseManager::executeQuery(const QString& query) { QSqlQuery q; if (!q.exec(query)) { qDebug() << "Ошибка выполнения запроса:" << q.lastError().text(); return false; } return true; } // Выполняет подготовленный SQL-запрос с параметрами bool DatabaseManager::executePreparedQuery(const QString& query, const QStringList& values) { QSqlQuery q; q.prepare(query); for (const auto& value : values) q.addBindValue(value); if (!q.exec()) { qDebug() << "Ошибка выполнения подготовленного запроса:" << q.lastError().text(); return false; } return true; } QList DatabaseManager::executeSelectQuery(const QString& query, const QStringList& values) { QSqlQuery q; q.prepare(query); for (const auto& value : values) q.addBindValue(value); if (!q.exec()) { qDebug() << "Ошибка выполнения SELECT запроса:" << q.lastError().text(); return {}; } QList results; while (q.next()) { QVariantList row; for (int i = 0; i < q.record().count(); ++i) row.append(q.value(i)); results.append(row); } return results; } QList DatabaseManager::executeSelect(const SelectBuilder& selectBuilder) { const auto queryString = selectBuilder.getSelect(); qDebug() << "Подготовленный запрос: " << queryString; QSqlQuery q; if (!q.prepare(queryString)) qDebug() << "Ошибка при подготовке запроса:" << q.lastError().text(); if (!q.exec()) qDebug() << "Ошибка при выполнении запроса:" << q.lastError().text(); QList results; while (q.next()) // Проходимся по строкам { QVariantList row; for (int i = 0; i < q.record().count(); ++i) // Проходимся по столбцам row.append(q.value(i)); results.append(row); } return results; }