Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

tetr4lab/SQLiteUnityKit

Open more actions menu
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
64 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SQLiteUnityKit を下敷きにしたライブラリ

  • 数多あるSQLiteUnityKitの改修のひとつです。
  • リポジトリ (GitHub)

特徴

  • 日本語が使えるようにしました。
  • トランザクション処理に対応しました。
  • バインド変数に対応しました。
  • 既存DBを上書きしないようにしました。(かといって、マージもしません。)
  • オープンやクローズ、リソースの開放などといった低レベル処理は隠蔽して、抽象化レベルの高い処理だけを表に出すようにしました。
  • できるだけ例外は内部で捉えて、リソースの未解放を避けて動き続けるように務めました。
  • このライブラリは直にSQLを使います。また、データを、テーブル、ロウ、カラムの概念のまま扱います。
  • O/Rマッパーが必要な場合は、PetaPoco (GitHub) や、SQLite-net (GitHub)、Microsoft.EntityFrameworkCore.Sqlite (nuget) などをご検討ください。
  • さっぱり分かっていませんが、標準ライブラリだけで実現することも可能なようです。

前提

環境

  • Unity 6000.0.56f1
  • SQlite 3.50.4
  • Target PF: Windows、macOS、Android、iOS

SQLite

更新手順

SQLiteUnityKit (fork元)

  • SQLiteUnityKitは、UnityからSQLiteを使用するためのフレームワークです。
  • リポジトリ (GitHub)

導入と概要

導入

  • Package ManagerAdd package from git URL...から、以下のURLを入力します。
https://github.com/tetr4lab/SQLiteUnityKit.git?path=/Assets/SQLite

概要

  • Assets/SQLite/Plugins/sqlite3/
    • 各プラットフォーム向けのSQLiteプラグインです。(iOSはOS側でサポートがあります。)
  • Assets/SQLite/Scripts/
    • SQLite.cs
      • 必須部分です。
    • SQLiteUtility.cs
      • 拡張ユーティリティクラスです。必要に応じてお使いください。
      • トランザクションでも擬似的なバインドが使えるようになっています。
  • Assets/Scripts/
    • Startup.cs
      • デモ用のローダです。
    • SQLiteTest.cs
      • デモ用スクリプトです。
      • Test 1: ゲームっぽい関係性のあるデータ
      • Test 2: シンプルで多めのデータ
      • Test 3: SQL学習型じゃんけん (Qiita)
    • ScrollTest.cs
    • Item.cs
      • デモ用スクリプトです。
    • ItemComponent.cs
      • デモ用スクリプトです。
  • Assets/Resources/Prefabs/
    • Canvas1.prefab
      • デモ用プレハブです。
    • Canvas2.prefab
      • デモ用プレハブです。
    • Item.prefab
      • Canvas2で使用します。
  • Assets/Scenes/SQLite_Test.unity
    • デモ用シーンです。

最新プラグインへの更新

基本的な使い方

  • データベース
    • public class SQLite<TTable, TRow> : IDisposable where TTable : SQLiteTable<TRow>, new () where TRow : SQLiteRow, new ()
      • SQLiteTable<SQLiteRow>、または、その派生クラスを使います。
    • 新規生成
      • public SQLite (string dbName, string query = null, string path = null, bool force = false)
      • 初期化クエリを指定します。
      • データベースファイルが既存なら何もせずそのまま使います。
      • Application.streamingAssetsPathに同名ファイルがあればコピーして使います。
    • 単文を実行
      • public void ExecuteNonQuery (string query, TRow param = null)
    • 単文を実行して結果を返す
      • public TTable ExecuteQuery (string query, TRow param = null)
    • 単文の変数を差し替えながら順に実行
      • public void ExecuteNonQuery (string query, TTable param)
      • 同じSQL文を、パラメータを変えながら繰り返し実行します。
    • 複文を一括実行し、誤りがあれば巻き戻す
      • public bool TransactionQueries (IEnumerable<string> query)
      • public bool TransactionQueries (string query)
      • 複数行を配列やリストで渡すか、単一文字列として渡すか、という違いです。
      • 冒頭と末尾にBEGIN,COMMITが勝手に付きます。
  • 基底行列データ
    • public class SQLiteTable<TRow> where TRow : SQLiteRow, new ()
      • SQLiteRow、または、その派生クラスを使います。
    • クエリで返されるデータで、列の定義と行データの集合です。
  • 基底行データ / バインドパラメータ
    • public class SQLiteRow : Dictionary<string, object>
    • 1行分のデータで、列データの集合です。バインドパラメータを渡すときにも使います。
  • 拡張バインド (トランザクション用)
    • public static string SQLiteBind (this string query, SQLiteRow param)
    • sqliteの外側で行われる文字列ベースのバインド(単なる文字列置換)です。

その他

  • ご指摘やご提案、あるいはご質問などを歓迎します。
    • 常識的なことも理解していないので、何か間違えているような場合はご助言いただけると助かります。

【蛇足】 Unity.VisualScripting を使う方法

  • この部分は更新されていません。
  • 以下、ほんのさわりだけ紹介します。
  • 冒頭で触れた「SQLite-net」の古いバージョンのようです。
    • 偶然発見したので、これがどういう意味を持つのかは理解していません。

環境

  • Unity 6000.0.24f1
  • 新規プロジェクトを生成しただけです。

公式ドキュメント

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.9/api/Unity.VisualScripting.Dependencies.Sqlite.html

コード

  • 以下のスクリプトをシーンの空オブジェクトにアタッチするだけで、クエリの結果がクラスにマッピングできました。
using System;
using System.IO;
using UnityEngine;
using Unity.VisualScripting.Dependencies.Sqlite;

public class Startup : MonoBehaviour {
    void Start () {
        var path = Path.Combine (Application.persistentDataPath, "SQLiteTest.db");
        using (var connection = new SQLiteConnection (path)) {
            var data = connection.Query<TestData> ("select * from Test;");
            Debug.Log (string.Join ("\n", data.ConvertAll (i => i.ToString ())));
        }
    }
}

public class TestData {
    public int Serial { get; set; }
    public Guid Guid { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string Lable { get; set; }
    public string Check { get; set; }
    public decimal? Width { get; set; }
    public decimal? Height { get; set; }
    public DateTime? Created { get; set; }
    public DateTime? Modified { get; set; }

    public override string ToString ()
        => $"{Serial}: {Guid}, '{Title}', '{Description}', '{Lable}', '{Check}', {Width}, {Height}, {Created}, {Modified} ";
}

About

Framework to connect with a SQLite database from Unity for iOS, Android, MAC , Windows

Topics

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C# 100.0%
Morty Proxy This is a proxified and sanitized view of the page, visit original site.