湯呑み茶碗の開発日記

WEBシステム屋の私がUnityの趣味開発で得た技術等をブログに載せていきます。

UnityでSqliteを自動化 ~データ取得編~

前回の記事の続きです。

UnityでSqliteを自動化 ~準備編~ - 湯呑み茶碗の開発日記

前回の記事ではライブラリを使用する準備まで行いました。
今回は実際にデータベースを操作していきます。

データベースに関する操作をまとめている「SqliteTableService.cs」を見ていきます。
このファイルにはデータの取得、登録、更新、削除などテーブルデータ操作を行う関数がまとめられています。


データベースからデータ取得

データを取得している関数部分に着目していきます。内容はコメントの通りではありますが紹介していきます。


/// <summary>
/// Select Example
/// キャラクターデータを取得
/// </summary>
/// <returns></returns&ghttp://blog.hatena.ne.jp/yunomichawan/yunomichawan.hatenablog.com/edit?entry=10328749687183772131#wysiwygt;
public static List<CharacterData> GetCharacterDataList()
{
    // SelectExample1
    // 1.Initialized with the table you want to select
    // 1. 取得したいテーブルで初期化
    DataAccess.Instance.Init(typeof(CharacterData));
    // 2.Run the select statement that is automatically generated in accordance with the table. It gets the data .
    // 2.テーブルに合わせて自動生成されたselect文を実行し、データを取得します。
    List<CharacterData> characterDataList = DataAccess.Instance.GetDataList<CharacterData>();

    // SelectExample2
    // 1.Initialized with the table you want to select
    // 1. 取得したいテーブルで初期化
    DataAccess.Instance.Init(typeof(CharacterData));
    DataTable dataTable = DataAccess.Instance.GetDataTable();
    List<CharacterData> characterDataList2 = DataBinding<CharacterData>.DataTableToObjectList(dataTable);

    // SelectExample3
    // Run the SQL statement that was created .
    // 作成されたSQL文を実行します。
    List<CharacterData> characterDataList3 = DataAccess.Instance.GetDataList<CharacterData>("select * from CharacterTable");

    // SelectExample4
    // Run the SQL statement that was created .
    // 作成されたSQL文を実行します。
    DataTable dataTable2 = DataAccess.Instance.GetDataTable("select CharacterId,Name from CharacterTable");
    List<CharacterData> characterDataList4 = DataBinding<CharacterData>.DataTableToObjectList(dataTable2);

    return characterDataList;
}

データを取得する例として4つが挙げられています。


データ取得例その1

1つ目が、このライブラリで最もシンプルな取得方法です。


// SelectExample1
// 1.Initialized with the table you want to select
// 1. 取得したいテーブルで初期化
DataAccess.Instance.Init(typeof(CharacterData));
// 2.Run the select statement that is automatically generated in accordance with the table. It gets the data .
// 2.テーブルに合わせて自動生成されたselect文を実行し、データを取得します。
List<CharacterData> characterDataList = DataAccess.Instance.GetDataList<CharacterData>();

取得したいテーブルクラスで初期化して、データをリストで取得します。と書くだけです。
これを実行した際に作成されるSqlite文はログに出力されているので確認してみてください。

f:id:yunomichawan:20160911165448p:plain

取得されたデータがこちらになります。デバッグで確認するとデータが取れていることが確認できます。

f:id:yunomichawan:20160911170030p:plain


データ取得例その2

 2つ目が、DataTable型にデータを入れてそこからリストに変換する方法です。


// SelectExample2
// 1.Initialized with the table you want to select
// 1. 取得したいテーブルで初期化
DataAccess.Instance.Init(typeof(CharacterData));
DataTable dataTable = DataAccess.Instance.GetDataTable();
List<CharacterData> characterDataList2 = DataBinding<CharacterData>.DataTableToObjectList(dataTable);

取得したいテーブルクラスで初期化して、DataTable型にデータを入れ、そこからリストに変換しています。
この時に作成されるSqlite文は、その1と全く同じなので省きます。

取得されたデータがこちら。データの内容はほとんど変わりません。

f:id:yunomichawan:20160911172102p:plain


データ取得例その3

3つ目が、自分で作ったSqlite文を実行して、データを取得する方法です。


// SelectExample3
// Run the SQL statement that was created .
// 作成されたSQL文を実行します。
List<CharacterData> characterDataList3 = DataAccess.Instance.GetDataList<CharacterData>("select * from CharacterTable");

単純に自分で作ったSqlite文を実行するだけです。
個人的にはこの方法はお勧めしません。このやり方を様々なテーブルクラスで行ってしまうとSqlite文の管理が面倒になってしまいそうなので…
もし使用するとなった場合はサブクエリを使わないといけない状況になると思います。

取得されたデータがこちら。データの内容はほとんど変わりません。

f:id:yunomichawan:20160911172306p:plain


データ取得例その4

4つ目がその2とその3を組み合わせたものです。趣向を変えてSqlite文を変更してみます。


// SelectExample4
// Run the SQL statement that was created .
// 作成されたSQL文を実行します。
DataTable dataTable2 = DataAccess.Instance.GetDataTable("select CharacterId,Name from CharacterTable");
List<CharacterData> characterDataList4 = DataBinding<CharacterData>.DataTableToObjectList(dataTable2);

今回は2つの列しかセレクト対象にしていないので、取得されたデータが変わっています。

取得されたデータがこちら。今回セレクトした「CharacterId」と「Name」以外は取得されていないことが確認できます。

f:id:yunomichawan:20160911172431p:plain

 

単純にデータを取得するのはこんな感じでできます。次はデータ取得時に条件を指定していきたいと思います。