mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-28 19:55:48 +03:00
Создание БД из кода. Требуется рефакт.
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include <QSqlDriver>
|
||||
#include <QMessageBox>
|
||||
#include <QDomDocument>
|
||||
#include <QProcess>
|
||||
|
||||
const QString DataBaseLMS::TypeUserDBInstructor = "instructor";
|
||||
const QString DataBaseLMS::TypeUserDBTrainee = "trainee";
|
||||
@@ -28,6 +29,225 @@ void DataBaseLMS::slot_LanguageChanged(QString language)
|
||||
QCoreApplication::installTranslator(&qtLanguageTranslator);
|
||||
}
|
||||
|
||||
bool DataBaseLMS::checkDriverQPSQLavailable()
|
||||
{
|
||||
return QSqlDatabase::isDriverAvailable("QPSQL");
|
||||
}
|
||||
|
||||
bool DataBaseLMS::checkUserLMSexist()
|
||||
{
|
||||
DataBaseSettings dbSett = getDataBaseSettings();
|
||||
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
|
||||
|
||||
dbCheck.setUserName("postgres");
|
||||
dbCheck.setPassword("12345678");
|
||||
dbCheck.setHostName(dbSett.dbHostName);
|
||||
dbCheck.setPort(dbSett.dbPort);
|
||||
|
||||
if (dbCheck.open())
|
||||
{
|
||||
QSqlQuery query = QSqlQuery(dbCheck);
|
||||
query.prepare("SELECT 1 FROM pg_roles WHERE rolname = :username");
|
||||
query.bindValue(":username", dbSett.dbUserName);
|
||||
|
||||
if (query.exec() && query.next())
|
||||
{
|
||||
qDebug() << "Пользователь существует.";
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "Пользователь не существует.";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "Ошибка подключения к PostreSQL.";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool DataBaseLMS::checkDataBaseLMSexist()
|
||||
{
|
||||
DataBaseSettings dbSett = getDataBaseSettings();
|
||||
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
|
||||
|
||||
bool flDBexist = false;
|
||||
|
||||
dbCheck.setUserName("postgres");
|
||||
dbCheck.setPassword("12345678");
|
||||
dbCheck.setHostName(dbSett.dbHostName);
|
||||
dbCheck.setPort(dbSett.dbPort);
|
||||
|
||||
if (dbCheck.open())
|
||||
{
|
||||
QString queryStr = QString("SELECT datname FROM pg_database");
|
||||
QSqlQuery query = QSqlQuery(dbCheck);
|
||||
|
||||
if(queryExec(queryStr, &query))
|
||||
{
|
||||
while (query.next())
|
||||
{//Инструктор
|
||||
QString nameDB = "";
|
||||
nameDB = query.value(0).toString();
|
||||
if(nameDB == dbSettings.dbName)
|
||||
{
|
||||
flDBexist = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "Ошибка подключения к PostreSQL.";
|
||||
return false;
|
||||
}
|
||||
return flDBexist;
|
||||
}
|
||||
|
||||
bool DataBaseLMS::createUser(QString name)
|
||||
{
|
||||
DataBaseSettings dbSett = getDataBaseSettings();
|
||||
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
|
||||
|
||||
dbCheck.setUserName("postgres");
|
||||
dbCheck.setPassword("12345678");
|
||||
dbCheck.setHostName(dbSett.dbHostName);
|
||||
dbCheck.setPort(dbSett.dbPort);
|
||||
|
||||
if (dbCheck.open())
|
||||
{
|
||||
QString queryStr = QString("CREATE USER %1 WITH ENCRYPTED PASSWORD '%2'").arg(dbSett.dbUserName, dbSett.dbPassword);
|
||||
QSqlQuery query = QSqlQuery(dbCheck);
|
||||
|
||||
if(queryExec(queryStr, &query))
|
||||
{
|
||||
qDebug() << "Пользователь создан.";
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "Пользователь не создан.";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "Ошибка подключения к PostreSQL.";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool DataBaseLMS::createDB(QString name)
|
||||
{
|
||||
DataBaseSettings dbSett = getDataBaseSettings();
|
||||
QSqlDatabase dbCheck = QSqlDatabase::addDatabase("QPSQL");
|
||||
|
||||
dbCheck.setUserName("postgres");
|
||||
dbCheck.setPassword("12345678");
|
||||
dbCheck.setHostName(dbSett.dbHostName);
|
||||
dbCheck.setPort(dbSett.dbPort);
|
||||
|
||||
if (dbCheck.open())
|
||||
{
|
||||
//Создание БД
|
||||
QString queryStr = QString("CREATE DATABASE %1").arg(dbSett.dbName);
|
||||
QSqlQuery query = QSqlQuery(dbCheck);
|
||||
|
||||
if(queryExec(queryStr, &query))
|
||||
{
|
||||
qDebug() << "БД создана.";
|
||||
|
||||
//Залитие БД
|
||||
|
||||
QProcess process;
|
||||
//QString pgRestorePath = "C:\\restoreDB.bat"; // Замените на актуальный путь
|
||||
QString pgRestorePath = "restoreDB.bat"; // Замените на актуальный путь
|
||||
|
||||
/*
|
||||
QString dbName = "databaselms2";
|
||||
QString user = "postgres";
|
||||
QString backupFile = "C:\\DBLMS_EMPTY_30_09_2025.backup";
|
||||
|
||||
QStringList arguments;
|
||||
arguments << "-d" << dbName;
|
||||
arguments << "-U" << user;
|
||||
arguments << backupFile;
|
||||
*/
|
||||
|
||||
process.start("cmd /C " + pgRestorePath);
|
||||
process.waitForFinished(-1); // Ждать бесконечно, пока процесс не завершится
|
||||
|
||||
|
||||
//Назначение владельца
|
||||
QString queryStr = QString("ALTER DATABASE %1 OWNER TO %2").arg(dbSett.dbName, dbSett.dbUserName);
|
||||
QSqlQuery query = QSqlQuery(dbCheck);
|
||||
if(queryExec(queryStr, &query))
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
||||
|
||||
|
||||
//return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "БД не создана.";
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "Ошибка подключения к PostreSQL.";
|
||||
return false;
|
||||
}
|
||||
|
||||
dbCheck.close();
|
||||
|
||||
QSqlDatabase dbCheck2 = QSqlDatabase::addDatabase("QPSQL");
|
||||
|
||||
dbCheck2.setUserName("postgres");
|
||||
dbCheck2.setPassword("12345678");
|
||||
dbCheck2.setHostName(dbSett.dbHostName);
|
||||
dbCheck2.setPort(dbSett.dbPort);
|
||||
dbCheck2.setDatabaseName(dbSett.dbName);
|
||||
|
||||
if (dbCheck2.open())
|
||||
{
|
||||
QString newOwner = dbSett.dbUserName;
|
||||
|
||||
// Получаем список таблиц
|
||||
QSqlQuery query(dbCheck2);
|
||||
query.exec("SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = 'public';");
|
||||
|
||||
while (query.next())
|
||||
{
|
||||
QString tableName = query.value(0).toString();
|
||||
QString alterQuery = QString("ALTER TABLE %1 OWNER TO %2;").arg(tableName).arg(newOwner);
|
||||
qDebug() << "Executing: " << alterQuery;
|
||||
dbCheck2.exec(alterQuery);
|
||||
/*
|
||||
if (dbCheck2.exec(alterQuery))
|
||||
{
|
||||
qDebug() << "Error changing owner for table " << tableName << ":" << dbCheck2.lastError().text();
|
||||
return false;
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DataBaseLMS::createConnection()
|
||||
{
|
||||
dbSettings = getDataBaseSettings();
|
||||
@@ -36,34 +256,6 @@ bool DataBaseLMS::createConnection()
|
||||
|
||||
db = new QSqlDatabase(QSqlDatabase::addDatabase(dbSettings.dbType, dbSettings.connectionName));
|
||||
|
||||
/*
|
||||
db->setUserName(dbSettings.dbUserName);
|
||||
db->setPassword(dbSettings.dbPassword);
|
||||
//db->setHostName(dbSettings.dbHostName);
|
||||
//db->setPort(dbSettings.dbPort);
|
||||
bool res1 = db->open();
|
||||
|
||||
//Проверка наличия БД
|
||||
QString queryStr = QString("SELECT datname FROM pg_database");
|
||||
QSqlQuery query = QSqlQuery(*db);
|
||||
bool flExist = false;
|
||||
if(queryExec(queryStr, &query))
|
||||
{
|
||||
while (query.next())
|
||||
{//Инструктор
|
||||
QString nameDB = "";
|
||||
nameDB = query.value(0).toString();
|
||||
if(nameDB == dbSettings.dbName)
|
||||
flExist = true;
|
||||
|
||||
nameDB = query.value(1).toString();
|
||||
nameDB = query.value(2).toString();
|
||||
nameDB = query.value(3).toString();
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
db->setDatabaseName(dbSettings.dbName);
|
||||
db->setUserName(dbSettings.dbUserName);
|
||||
db->setPassword(dbSettings.dbPassword);
|
||||
|
||||
Reference in New Issue
Block a user