SQLite는 MySQL나 PostgreSQL와 같은 데이터베이스 관리 시스템이지만, 서버가 아니라 응용 프로그램에 넣어 사용하는 비교적 가벼운 데이터베이스이다. Qt SQL을 이용해서 가벼운 데이터베이스를 다루어보자.
가장 먼저 프로젝트 파일에 다음과 같이 명시한다.
QT += sql
소스파일에는 다음과 같이 추가한다.
#include <QtSql>
이제 프로젝트에서 Qt SQL 클래스들을 사용할 수 있다. http://doc.qt.io/qt-5/qtsql-module.html
아래는 데이터베이스를 핸들링하는 간단한 예제이다.
sqldatabase.h
#include <QObject>
#include <QtSql>
class SQLDatabase: public QObject
{
    Q_OBJECT
public:
    SQLDatabase(QObject *parent = nullptr);
    QSqlError addConnection(const QString &driver, const QString &dbName, const QString &name);
    void exec(const QString& q);
    void exec(const QString& q, QVariantList& data);
private:
    QString activeDb;
};
sqldatabase.cpp
#include "sqldatabase.h"
SQLDatabase::SQLDatabase(QObject *parent)
    :QObject (parent)
{
    if (QSqlDatabase::drivers().isEmpty())
        qDebug() << "No database drivers found This demo requires at least one Qt database driver. "
                    "Please check the documentation how to build the "
                    "Qt SQL plugins.";
}
QSqlError SQLDatabase::addConnection(const QString &driver, const QString &dbName, const QString &name)
{
    QSqlError err;
    QSqlDatabase db = QSqlDatabase::addDatabase(driver, QString("%1").arg(name));
    db.setDatabaseName(dbName);
    if (!db.open()) {
        err = db.lastError();
        db = QSqlDatabase();
        QSqlDatabase::removeDatabase(QString("%1").arg(name));
    }
    activeDb = name;
    return err;
}
void SQLDatabase::exec(const QString &q)
{
    QSqlQuery query(QSqlDatabase::database(activeDb));
    query.prepare(q);
    query.exec();
}
void SQLDatabase::exec(const QString& q, QVariantList& data)
{
    QSqlQuery query(QSqlDatabase::database(activeDb));
    query.prepare(q);
    query.exec();
    while (query.next()) {
      QSqlRecord record = query.record();
      int count = record.count();
      QVariantMap map;
      for(int i = 0; i < count; ++i) {
        map[record.field(i).name()] = record.value(i);
      }
      data.push_back(map);
    }
}
main.cpp
#include "sqldatabase.h"
int main(int argc, char *argv[])
{
    SQLDatabase database;
    auto path = QString("%1%2").arg(qApp->applicationDirPath()).arg("/phonebook.db");
    QSqlError err = database.addConnection("QSQLITE", path, "phonebook");
    if (err.type() != QSqlError::NoError)
        qDebug() << QString("%1,%2").arg("Unable to open database An error occurred while opening the connection: " + err.text());
    /* create */
    database.exec("create table phonebook (id int primary key, "
                   "name TEXT NOT NULL, number  INT NOT NULL)");
    /* insert */
    database.exec("insert into phonebook values(102, 'makersweb', '1012341234')");
    /* select */
    QString id("102");
    QVariantList data;
    database.exec("select * from phonebook where id = " "'" + id + "'", data);
    for(const auto &item: data){
        auto map = item.toMap();
        qDebug() << map["number"].toInt();
    }
}
실제 만들어진 db를 열어보면 아래 그림과 같이 확인할 수 있다.









