119 lines
3.0 KiB
C++
119 lines
3.0 KiB
C++
#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<QVariantList> 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<QVariantList> 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<QVariantList> 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<QVariantList> 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;
|
||
}
|