湯呑み茶碗の開発日記

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

UnityでSqliteを自動化 ~データ更新編~

テーブルクラス作成編の続きになると思います。

UnityでSqliteを自動化 ~テーブルクラス作成編~ - 湯呑み茶碗の開発日記

 

今回はデータ更新編です。

 

データベースに対して登録、更新、削除を行っていきます。

データベース周りの操作を行っている

データ登録

 データの新規登録を行っている部分に着目していきます。着目するといっても「CharacterId」を採番して登録を行っているだけです。


/// <summary>
/// Insert Example
/// キャラクターデータを登録
/// </summary>
/// <param name="characterData"></param>
public static void InsertCharacterData(CharacterData characterData)
{
    DataAccess.Instance.Init(typeof(CharacterData));
    // Create Numbering CharacterId
    // CharacterIdを採番
    characterData.CharacterId = DataAccess.Instance.GetAssignNumber("CharacterId");

    // Insert SQL will be issued on the basis of the argument
    // 引数に基づきインサートSQL発行
    DataAccess.Instance.Insert(characterData);
}

そして実行されたSqlite文がこちら。

f:id:yunomichawan:20160925225428p:plain

データ更新

 データの更新を行っている部分に着目し(略)

といってもプライマリキーで更新条件を自動生成しているだけです。

一応、自分で条件を指定することもできます。何も条件を指定していない場合のみ、指定した条件で更新を行います。

条件の指定方法はこちら。データ取得編で条件を指定する方法を紹介しています。

UnityでSqliteを自動化 ~データ取得条件指定編~ - 湯呑み茶碗の開発日記


/// <summary>
/// Update Example
/// キャラクターデータを更新
/// </summary>
/// <param name="characterData"></param>
public static void UpdateCharacterData(CharacterData characterData)
{
    // Init
    DataAccess.Instance.Init(typeof(CharacterData));
    // Update SQL is issued on the basis of the argument . (NULL values are not updated .)
    // 引数に基づきアップデートSQL発行。NULL値は更新されません。
    DataAccess.Instance.UpdateSql(characterData);
}

そして実行されたSqlite文がこちら。

f:id:yunomichawan:20160925230246p:plain

データ削除

データの削除を行っている部分に(略)

データ更新と同じく条件を指定できます。仕様は更新と同じです。


/// <summary>
/// Delete Example
/// キャラクターデータを削除
/// </summary>
/// <param name="characterData"></param>
public static void DeleteCharacterData(CharacterData characterData)
{
    // Init
    DataAccess.Instance.Init(typeof(CharacterData));
    // Issue the Delete SQL based on the arguments .
    // 引数に基づきデリートSQL発行
    DataAccess.Instance.Delete(characterData);
}

そして実行されたSqlite文がこちら。

f:id:yunomichawan:20160925231658p:plain

データ削除不可

 あまりこういった実装を見かけることはありませんが、テーブルクラスに「DeleteImpossible」属性を設定するとデータの削除を絶対にしないテーブルクラスを作成することができます。


/// <summary>
/// Table class of MasterTable . Deletion of the data can not be
/// MasterTableのテーブルクラス。 データの削除はできません
/// </summary>
[DataAccess("MasterTable")]
[DeleteImpossible]
public class MasterData : TableBase
{
    [DataProperty(3, DataPropertyAttribute.SQLITE_TYPE.TEXT, false, true)]
    public string MasterId { get; set; }

    [DataProperty(32, DataPropertyAttribute.SQLITE_TYPE.TEXT, false, true)]
    public string MasterCategory { get; set; }

    [DataProperty(64, DataPropertyAttribute.SQLITE_TYPE.TEXT, false, false)]
    public string MasterName { get; set; }

    [DataProperty(3, DataPropertyAttribute.SQLITE_TYPE.NUMERIC, false, false)]
    public int Seq { get; set; }

    [DataProperty(512, DataPropertyAttribute.SQLITE_TYPE.TEXT, true, false)]
    public string Remarks { get; set; }
}

/// <summary>
/// Delete Master Data . Ensure that the data is not deleted
/// マスターデータを削除。削除されないこを確認。
/// </summary>
/// <param name="masterData"></param>
public static void DeleteMasterData(MasterData masterData)
{
    DataAccess.Instance.Init(typeof(MasterData));
    // Please check the log that was not deleted .
    // 削除されないことをログで確認してください。
    DataAccess.Instance.Delete(masterData)
}

ログを確認すると削除されていないことが確認できます。

f:id:yunomichawan:20160925231911p:plain

データ更新編はここまでになります。

これでこのライブラリについての紹介はたぶん終わりです。

使っていて使いにくい部分等あると思いますが、そこは自分自身の手で改修してみてください。

要望があったらとも思いましたが、そもそもこのブログを見ている人がいるかどうか...

関数の使い方をまとめようと思いましたが、いつかはやると思います。いつかは...

終わり