9 BookDb *BookDb::instance()
12 theInstance = new BookDb;
27 Trace t("BookDb::BookDb");
28 bool shouldCreate = false;
29 QFileInfo info(Platform::dbPath());
32 if (!dbDir.mkpath(info.absolutePath())) {
33 qCritical() << "Could not create" << info.absolutePath();
37 db = QSqlDatabase::addDatabase("QSQLITE");
38 db.setDatabaseName(QDir::toNativeSeparators(Platform::dbPath()));
40 qCritical() << "Could not open" << Platform::dbPath() << ": Error"
41 << db.lastError().text();
55 Trace t("BookDb::create");
57 if (!query.exec("create table book "
58 "(name text primary key, content blob)")) {
59 qCritical() << "Failed to create database:"
60 << query.lastError().text();
64 QVariantHash BookDb::load(const QString &book)
66 Trace t("BookDb::load");
70 QSqlQuery query("select content from book where name = ?");
71 query.bindValue(0, book);
72 query.setForwardOnly(true);
74 qCritical() << "Query failed:" << query.lastError().text();
77 while (query.next()) {
78 bytes = query.value(0).toByteArray();
79 QDataStream in(bytes);
87 void BookDb::save(const QString &book, const QVariantHash &data)
89 Trace t("BookDb::save");
93 QDataStream out(&bytes, QIODevice::WriteOnly);
95 QSqlQuery query("insert or replace into book values (?, ?)");
96 query.bindValue(0, book);
97 query.bindValue(1, bytes);
99 qCritical() << "Query failed:" << query.lastError().text();
103 void BookDb::remove(const QString &book)
105 Trace t("BookDb::remove");
107 QSqlQuery query("delete from book where name = ?");
108 query.bindValue(0, book);
110 qCritical() << "Query failed:" << query.lastError().text();
114 QStringList BookDb::books()
116 Trace t("BookDb::books");
118 QSqlQuery query("select name from book");
119 query.setForwardOnly(true);
121 qCritical() << "Query failed:" << query.lastError().text();
124 while (query.next()) {
125 ret.append(query.value(0).toString());
131 void BookDb::removeAll()
133 foreach (QString book, books()) {