やってみる

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

QtでSQLite3をクラス化してみた

 うざいメッセージをすべて消した。

成果物

github.com

対象環境

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

前回

学んだこと

  • QSqlDatabase
    • QSqlDatabase::contain("DB名"): 指定したDBが含まれているか
    • QSqlDatabase::addDatabase("QSQLITE", "DB名"): DBを追加する
      • プロセス中に1回のみ実行すること。さもなくば実行時に次の文言が出力される QSqlDatabasePrivate::addDatabase: duplicate connection name 'MemoDb', old connection removed.
      • 第2引数にDB名を指定すること。さもなくばDBのインスタンスを取得できない
    • QSqlDatabase::database("DB名"): 指定したDBのインスタンスを取得する。関数内変数で取得すること
      • もしaddDatabaseの戻り値であるDBインスタンスをクラスメンバ変数にしてQSqlDatabase::removeDatabase()を呼ぶと、次の文言が出力される QSqlDatabasePrivate::removeDatabase: connection 'MemoDb' is still in use, all queries will cease to work.

所感

 DBをメンバ変数から参照する目論見はもろくも崩れ去った。

 あとDBクラスの実装が冗長すぎる。せめて呼出元は以下くらいシンプルにやりたい。

MemoDb memoDb;
Object o = { Memo = "メモ内容", Created = "2000-01-01 00:00:00.000" };
memoDb.Write(o);

 C++にはJavaScriptでいうObjectPythonでいうdictに該当するものはあるのだろうか? 以下が参考になる?

 でもSQLのInsert文を作成せねばならないのはどうにもならんか。マッパーはないの?

 DBからUIへのマッパーはあるみたい。それもほしいけど、その前にSQL文を隠してオブジェクト指向に書けるヤツが欲しいのよ。マッパー? ラッパー? そういうのないの?