やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

QtでSQLite3を使う(QSql)

 SQLite3はファイル型のデータベース。簡単なDBといったらコレ。Qtでもライブラリが用意されていた。

成果物

github.com

対象環境

  • Raspbierry pi 3 Model B+
  • Raspbian stretch 2018-06-27
  • Qt 5.7.1

手順

  1. Qt Creatorを起動する
  2. Widget プロジェクトを作成する
  3. .proファイルのQT変数にsqlを追加する
  4. ソースコードを書く
  5. 実行する

.pro

QT       += core gui sql

 sqlを追加する。

ソースコード

 抜粋。

Open & Close

#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("/tmp/work/Memo.sqlite3");
    db.open();
    ...
    db.close();

Query

    QSqlQuery query(db);
    query.exec("SQL文");

Create Table

    QSqlQuery query(db);
    query.exec("create table Memo(id INTEGER PRIMARY KEY AUTOINCREMENT, Memo text, Created text)");

Insert

    query.prepare("insert into Memo (Memo, Created) values (?, ?)");
    QString text = "someText";
    query.bindValue(0, text);
    QDateTime dt = QDateTime::currentDateTime();
    query.bindValue(1, dt.toString("yyyy-MM-dd HH:mm:ss.zzz"));
    query.exec();

Select

    query.exec("select * from Memo WHERE Memo = '"+text+"'");
    while (query.next()) {
        int id = query.value(0).toInt();
        QString memo = query.value(1).toString();
        qDebug() << QString("id(%1),memo(%2)").arg(id).arg(memo);
    }

確認

 SQLite3コマンドでDBを確認する。

$ sqlite3 /tmp/work/Memo.sqlite3
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
sqlite> 
sqlite> .tables
Memo
sqlite> select * from Memo;
1|someText|2018-11-27 12:44:12.373

 問題なし。