-
Notifications
You must be signed in to change notification settings - Fork 2
/
database.cpp
117 lines (101 loc) · 3.15 KB
/
database.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include "database.h"
#include <QSqlDatabase>
#include <QSqlDriver>
#include <QStandardPaths>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlResult>
#include <QDateTime>
DataBase::DataBase(QObject *parent) : QObject(parent)
{
auto locs = QStandardPaths::standardLocations(QStandardPaths::AppLocalDataLocation);
if (locs.length() == 0){
throw std::runtime_error("Can't find AppDataLocatoin");
}
db = QSqlDatabase::addDatabase("QSQLITE");
for (auto &loc : locs){
loc.append("/editor.db");
db.setDatabaseName(loc);
if(!db.open()) {
continue;
}else {
break;
}
}
if(!db.open()) {
std::string error = "Db not Opened! : ";
error.append(db.lastError().text().toUtf8().data());
throw std::runtime_error(error);
}
QSqlQuery query;
query.prepare(
"\
CREATE TABLE IF NOT EXISTS editor (\
idx INTEGER PRIMARY KEY AUTOINCREMENT,\
title TEXT,\
content TEXT,\
abstract_content TEXT,\
date, TEXT)"
);
query.exec();
}
void DataBase::loadArticles(QList<Article> &articles) {
QSqlQuery query;
bool excuteStatus = query.exec("\
SELECT idx, title, abstract_content, date \
FROM editor"
);
if(!excuteStatus) {
throw std::runtime_error(query.lastError().text().toUtf8().data());
}
while(query.next()){
Article art;
art.idx = query.value(0).toInt();
art.title = query.value(1).toString();
art.abstractContent= query.value(2).toString();
auto date = query.value(3).toString();
art.modifiedTime = QDateTime::fromString(date, Qt::ISODateWithMs);
articles.push_front(art);
}
}
void DataBase::addArticle(Article &article) {
QSqlQuery query;
query.prepare("\
INSERT INTO editor \
(title, content, abstract_content, date) \
VALUES(:title, :content, :abstract_content, :date)\
");
query.bindValue(":title", article.title);
query.bindValue(":content", article.content);
query.bindValue(":abstract_content", article.abstractContent);
query.bindValue(":date", article.modifiedTime.toString(Qt::ISODateWithMs));
if(!query.exec()) {
throw std::runtime_error(query.lastError().text().toUtf8().data());
}
article.idx = query.lastInsertId().toInt();
}
void DataBase::deleteArticle(int idx) {
QSqlQuery query;
query.prepare("\
DELETE FROM editor \
WHERE idx = :idx");
query.bindValue(":idx", idx);
query.exec();
}
void DataBase::updateArticle(const Article &article) {
QSqlQuery query;
query.prepare("\
UPDATE editor \
SET title = :title, content = :content, \
abstract_content = :abstract_content, date = :date \
WHERE idx = :idx\
");
query.bindValue(":title", article.title);
query.bindValue(":content", article.content);
query.bindValue(":abstract_content", article.abstractContent);
query.bindValue(":date", article.modifiedTime.toString(Qt::ISODateWithMs));
query.bindValue(":idx", article.idx);
if(!query.exec()) {
throw std::runtime_error(query.lastError().text().toUtf8().data());
}
}