読者です 読者をやめる 読者になる 読者になる

なんとな~くしあわせ?の日記

ClojureとかAWSの設定とかをメモする技術ブログ

wxSQLite3の練習

wxWidgets SQLite C++ プログラミング


Bindを使いたかったのだけれどエラー出まくりで断念。結局SQLクエリをwxStringでつなげた。

/**
 * WxSQLiteTest.cpp - wxSQLiteのテスト用ソースコード
 *
 */
#include "WxSQLiteTest.h"

bool WxSQLiteTest::OnInit() {
	return true;
}

int WxSQLiteTest::OnExit() {
	return 0;
}

int WxSQLiteTest::OnRun() {
  const wxString dbFile = wxGetCwd() + wxT("/test.db");

  try {
    // データベースの初期化
    wxSQLite3Database::InitializeSQLite();

    wxSQLite3Database db;

    cout << "SQLite3 Version:      " << (const char*) db.GetVersion().mb_str(wxConvUTF8) << endl;
    cout << "SQLite3 Source Id:    " << (const char*) db.GetSourceId().mb_str(wxConvUTF8) << endl;

    // DBを開く
    db.Open(dbFile);

    // テーブルが無ければテーブルを作る
    if (!db.TableExists(wxT("DIARY_USERS"))) {
      db.ExecuteQuery(wxT("CREATE TABLE DIARY_USERS(OID TEXT, NAME TEXT, KANANAME TEXT)"));
    }

    // テーブル内にデータがあれば削除する
    db.ExecuteQuery(wxT("DELETE FROM DIARY_USERS"));

    // データの元ネタ用配列
    wxArrayString array;

    array.Add(wxT("('1','天野雪輝','あまの ゆきてる')"));
    array.Add(wxT("('2','我妻由乃','がさい ゆの')"));
    array.Add(wxT("('3','火山高夫','ひやま たかお')"));
    array.Add(wxT("('4','来栖圭吾','くるす けいご')"));
    array.Add(wxT("('5','豊穣礼佑','ほうじょう れいすけ')"));
    array.Add(wxT("('6','春日野椿','かすがの つばき')"));
    array.Add(wxT("('7','戦場マルコ','いくさば マルコ')"));
    array.Add(wxT("('8','上下かまど','うえした かまど')"));
    array.Add(wxT("('9','雨流みねね','うりゅう みねね')"));
    array.Add(wxT("('10','月島狩人','つきしま かりゅうど')"));
    array.Add(wxT("('11','ジョン・バックス','ジョン・バックス')"));
    array.Add(wxT("('12','平坂黄泉','ひらさか よもつ')"));

    // 12回繰り返す
    for(int i=0;i < array.GetCount();i++)
      {
	wxString SQL_QUERY = wxT("INSERT INTO DIARY_USERS VALUES");
	SQL_QUERY += array[i];

	// デバッグ用文字列
	cout << SQL_QUERY << endl;
	db.ExecuteQuery(SQL_QUERY);
      }

    db.Close();

  } catch (wxSQLite3Exception& e) {
    cerr << e.GetErrorCode() << ":" << (const char*) (e.GetMessage().mb_str()) << endl;
  }
  return 0;
}

ここまでやるのすごく面倒だった