sqlitewrapper.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #include "sqlitewrapper.h"
  2. SqliteWrapper::SqliteWrapper(QObject *parent) : QObject(parent) { }
  3. SqliteWrapper::SqliteWrapper(QString fileName, QString dbName)
  4. {
  5. this->fileName = fileName;
  6. this->dbName = dbName;
  7. }
  8. void SqliteWrapper::setFileName(QString fileName)
  9. {
  10. this->fileName = fileName;
  11. }
  12. void SqliteWrapper::setDbName(QString dbName)
  13. {
  14. this->dbName = dbName;
  15. }
  16. void SqliteWrapper::open()
  17. {
  18. QSqlDatabase db;
  19. if (QSqlDatabase::contains(dbName)) {
  20. database = QSqlDatabase::database(dbName);
  21. } else {
  22. database = QSqlDatabase::addDatabase("QSQLITE", dbName);
  23. database.setDatabaseName(fileName);
  24. }
  25. if (database.isOpen()) {
  26. opened = true;
  27. } else {
  28. opened = database.open();
  29. }
  30. }
  31. void SqliteWrapper::close()
  32. {
  33. database.close();
  34. opened = false;
  35. }
  36. bool SqliteWrapper::isOpened()
  37. {
  38. return opened;
  39. }
  40. void SqliteWrapper::select(QString sql, QStandardItemModel *model)
  41. {
  42. model->removeRows(0, model->rowCount());
  43. QSqlQuery qry(sql, database);
  44. while (qry.next()) {
  45. QList<QStandardItem *> items;
  46. for (int i = 0; i < qry.record().count(); i++) {
  47. QStandardItem *item = new QStandardItem();
  48. item->setText(qry.value(i).toString());
  49. items.append(item);
  50. }
  51. model->appendRow(items);
  52. }
  53. }
  54. void SqliteWrapper::select(QString sql, QSqlQuery &qry)
  55. {
  56. qry = QSqlQuery(database);
  57. qry.exec(sql);
  58. }
  59. void SqliteWrapper::selectToTreeView(QString sql, int pid, QStandardItemModel *model)
  60. {
  61. QSqlQuery qry(database);
  62. bool ret = qry.exec(sql);
  63. if (!ret) {
  64. qDebug() << sql;
  65. return;
  66. }
  67. QList<TreeviewData> items;
  68. while (qry.next()) {
  69. TreeviewData data;
  70. data.pid = qry.value(0).toInt();
  71. data.id = qry.value(1).toInt();
  72. data.text = qry.value(2).toString();
  73. for (int i = 0; i < qry.record().count(); i++) {
  74. data.values << qry.value(i).toString();
  75. }
  76. items << data;
  77. }
  78. model->clear();
  79. loadItemData(pid, model, nullptr, items);
  80. }
  81. void SqliteWrapper::loadItemData(int pid, QStandardItemModel *model, QStandardItem *parentItem,
  82. QList<TreeviewData> &items)
  83. {
  84. for (int i = 0; i < items.count(); i++) {
  85. TreeviewData data = items.at(i);
  86. if (pid == data.pid) {
  87. QStandardItem *item = new QStandardItem();
  88. item->setText(data.text);
  89. for (int j = 0; j < data.values.count(); j++) {
  90. item->setData(data.values[j], Qt::UserRole + j + 1);
  91. }
  92. if (parentItem == nullptr) {
  93. model->appendRow(item);
  94. } else {
  95. parentItem->appendRow(item);
  96. }
  97. loadItemData(data.id, model, item, items);
  98. }
  99. }
  100. }
  101. int SqliteWrapper::findId(QString tableName, QString fieldName, QString fieldValue)
  102. {
  103. QString sql = QString("select id from %1 where %2='%3'").arg(tableName).arg(fieldName).arg(fieldValue);
  104. QSqlQuery qry(database);
  105. bool ret = qry.exec(sql);
  106. if (!ret) { qDebug() << sql; }
  107. if (qry.next()) {
  108. return qry.value(0).toInt();
  109. } else {
  110. return -1;
  111. }
  112. }
  113. bool SqliteWrapper::execute(QString sql)
  114. {
  115. QSqlQuery qry(database);
  116. bool ret = qry.exec(sql);
  117. if (!ret) {
  118. qDebug() << sql;
  119. qDebug() << qry.lastError().text();
  120. }
  121. return ret;
  122. }
  123. void SqliteWrapper::truncateTables(QStringList &tables)
  124. {
  125. for (int i = 0; i < tables.count(); i++) {
  126. QString sql = "delete from " + tables[i];
  127. execute(sql);
  128. sql = "DELETE FROM sqlite_sequence WHERE name = '" + tables[i] + "'";
  129. execute(sql);
  130. }
  131. }
  132. QSqlDatabase &SqliteWrapper::getDataBase()
  133. {
  134. return database;
  135. }
  136. int SqliteWrapper::getMaxId(QString tableName)
  137. {
  138. QString sql = "select max(id) from " + tableName;
  139. QSqlQuery qry;
  140. select(sql, qry);
  141. if (qry.next()) { return qry.value(0).toInt(); }
  142. return 0;
  143. }
  144. void SqliteWrapper::prepare(QString sql, QSqlQuery &qry)
  145. {
  146. qry = QSqlQuery(database);
  147. qry.prepare(sql);
  148. }