AlbumDao.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include "AlbumDao.h"
  2. #include <QSqlDatabase>
  3. #include <QSqlQuery>
  4. #include <QVariant>
  5. #include <QVector>
  6. using namespace std;
  7. AlbumDao::AlbumDao(QSqlDatabase& database) : mDatabase(database) {}
  8. /**
  9. * @brief AlbumDao::init 初始化
  10. */
  11. void AlbumDao::init() const {
  12. if (!mDatabase.tables().contains("albums")) {
  13. QSqlQuery query(mDatabase);
  14. query.exec(
  15. "CREATE TABLE albums(id INTEGER PRIMARY KEY AUTOINCRMENT, name TEXT)");
  16. }
  17. }
  18. /**
  19. * @brief AlbumDao::addAlbum 新增
  20. * @param album
  21. */
  22. void AlbumDao::addAlbum(Album& album) const {
  23. QSqlQuery query(mDatabase);
  24. query.prepare("INSERT INTO albums(name) VALUES(:name)");
  25. query.bindValue(":name", album.name());
  26. query.exec();
  27. album.setId(query.lastInsertId().toInt());
  28. }
  29. void AlbumDao::updateAlbum(const Album& album) const {
  30. QSqlQuery query(mDatabase);
  31. query.prepare("UPDATE albums SET name=:name WHERE id=:id");
  32. query.bindValue(":name", album.name());
  33. query.bindValue(":id", album.id());
  34. query.exec();
  35. }
  36. void AlbumDao::removeAlbum(int id) const {
  37. QSqlQuery query(mDatabase);
  38. query.prepare("DELETE FROM albums WHERE id=:id");
  39. query.bindValue(":id", id);
  40. query.exec();
  41. }
  42. unique_ptr<vector<unique_ptr<Album>>> AlbumDao::albums() const {
  43. QSqlQuery query("SELECT * FROM albums", mDatabase);
  44. query.exec();
  45. unique_ptr<vector<unique_ptr<Album>>> list(new vector<unique_ptr<Album>>);
  46. while (query.next()) {
  47. unique_ptr<Album> album(new Album());
  48. album->setId(query.value("id").toInt());
  49. album->setName(query.value("name").toString());
  50. list->push_back(std::move(album));
  51. }
  52. return list;
  53. }