#include <QtGlobal> #include <QDebug> #include <QFileInfo> #include <QDir> #include <QSqlError> #include "database.h" #include "trace.h" Database::Database(const QString &name, QObject *parent): QObject(parent), name_(name) { } Database::~Database() { if (db_.isOpen()) { db_.close(); } if (db_.isValid()) { QSqlDatabase::removeDatabase(db_.connectionName()); } } void Database::initialize() { bool schemaRequired = false; static int serial = 0; QMutexLocker lock(&mutex_); if (!db_.isValid()) { QString connectionName = QString::number(serial++); db_ = QSqlDatabase::addDatabase("QSQLITE", connectionName); } if (db_.isOpen()) { return; } // Create database if (!QFile::exists(name_)) { schemaRequired = true; QDir().mkpath(QFileInfo(name_).absolutePath()); } db_.setDatabaseName(QDir::toNativeSeparators(name_)); if (!db_.open()) { qCritical() << "Database::db: Could not open database:" << db_.lastError().text(); return; } if (schemaRequired) { emit addSchema(); } }