database.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #include "database.h"
  2. #include "DataHelper.h"
  3. #include "QSqlQuery"
  4. #include "QSqlError"
  5. #include "QVector"
  6. #include "QVariant"
  7. #include "QFile"
  8. #include "QMessageBox"
  9. //#include "QDebug"
  10. DataBase::DataBase(){ }
  11. QSqlDatabase DataBase::db;
  12. QVector<Group*> *DataBase::groups;
  13. void DataBase::init(QString *dbFile)
  14. {
  15. if(db.databaseName().length() == 0)
  16. db = QSqlDatabase::addDatabase("QSQLITE");
  17. db.setDatabaseName(*dbFile);
  18. }
  19. void DataBase::selectTasks(QVector<Task*> *tasks){
  20. int rowCount = 0;
  21. db.open();
  22. QSqlQuery query("SELECT Count(*) FROM data");
  23. if(query.lastError().text().length() > 0)
  24. {
  25. db.close();
  26. QMessageBox::information(nullptr, "Ошибка открытия базы данных", query.lastError().text() + "\nубедитесь, что вы закрыли miniPoster перед тем, как открывать базу данных");
  27. return;
  28. }
  29. query.next();
  30. rowCount = query.value(0).toInt();
  31. if(rowCount == 0)
  32. return;
  33. if(tasks->count() > 0)
  34. tasks->clear();
  35. tasks->reserve(rowCount);
  36. int index = 1;
  37. //CREATE TABLE data (id INTEGER PRIMARY KEY AUTOINCREMENT, id_group INTEGER, name VARCHAR (50) UNIQUE, Timer INT, Status BOOLEAN);
  38. query.exec("SELECT * FROM data;");
  39. while (query.next()) {
  40. Task *t = new Task;
  41. t->id = index++;
  42. t->group = groupById(query.value(1).toInt());
  43. t->timer = query.value(3).toInt();
  44. t->status = query.value(4).toBool();
  45. t->name = new QString(query.value(2).toString());
  46. t->firstName = t->name;
  47. tasks->append(t);
  48. }
  49. db.close();
  50. }
  51. void DataBase::selectGroups(QVector<Group*> *groups){
  52. db.open();
  53. int rowCount = 0;
  54. DataBase::groups = groups;
  55. QSqlQuery query("SELECT Count(*) FROM groupName");
  56. query.next();
  57. rowCount = query.value(0).toInt();
  58. if(rowCount == 0)
  59. return;
  60. if(groups->count() > 0)
  61. groups->clear();
  62. groups->reserve(rowCount);
  63. //CREATE TABLE groupName (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR (50) UNIQUE, color VARCHAR(15))
  64. if(query.exec("SELECT * FROM groupName;")){
  65. while (query.next()) {
  66. Group *g = new Group;
  67. g->id = query.value(0).toInt();
  68. g->name = new QString(query.value(1).toString());
  69. g->color = QColor(query.value(2).toString());
  70. groups->append(g);
  71. }
  72. }
  73. db.close();
  74. }
  75. void DataBase::saveTasks(QVector<Task*> *tasks){
  76. db.open();
  77. QSqlQuery query;
  78. query.exec("DELETE FROM data;");
  79. query.exec("VACUUM;");
  80. int index = 1;
  81. //CREATE TABLE data (id INTEGER PRIMARY KEY AUTOINCREMENT, id_group INTEGER, name VARCHAR (50) UNIQUE, Timer INT,Status BOOLEAN);
  82. for(auto &task : *tasks){
  83. query.exec(QString("INSERT INTO data (id,id_group,name,Timer,Status) \
  84. VALUES (%1,%2,'%3',%4,%5)")
  85. .arg(index++)
  86. .arg(task->group->id)
  87. .arg(*task->name)
  88. .arg(task->timer)
  89. .arg(task->status));
  90. }
  91. db.close();
  92. }
  93. void DataBase::saveGroups(QVector<Group*> *groups){
  94. db.open();
  95. QSqlQuery query;
  96. query.exec("DELETE FROM groupName;");
  97. query.exec("VACUUM;");
  98. //CREATE TABLE groupName (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR (50) UNIQUE, color VARCHAR(15))
  99. for(auto &group : *groups){
  100. query.exec(QString("INSERT INTO groupName (id,name,color) \
  101. VALUES (%1,'%2','%3')")
  102. .arg(QString::number(group->id), *group->name, group->color.name())
  103. );
  104. }
  105. db.close();
  106. }
  107. Group* DataBase::groupById(int id){
  108. for(auto &group : *groups){
  109. if(group->id == id)
  110. return group;
  111. }
  112. return new Group;
  113. }