テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

iOSビルドでSQLiteを使う

前回の記事では、SQLiteiOS端末で動かすのがうまくできなかった。
今回はその問題を解決してるアセットと使い方をメモ

[Unity3D]UnityでSQLiteを使用する
http://terasur.blog.fc2.com/blog-entry-265.html

■SqliteDatabaseとは

今回使用するのは、Poyaさんの提供するSqliteDatabaseだ。このアセットはモバイル端末上でクエリの実行が可能になアセットらしい。実際、iOS5上で動作を確認したところ正常に動作した。ただ日本語が文字化けしたので、何か対策が必要かもしれない。(PC上では文字化けしない)
なお、残念ながら暗号化は対応してない模様。

動作確認用パッケージ
https://dl.dropbox.com/u/56297224/UnitySumple2/DataAccess.unitypackage

動作確認用のソースを用意したので参考にでも(SqliteDatabaseを入れれば動作するはず)。動作確認用パッケージのサンプルでは、データベースの作成/削除から接続/解除とSQLの実行(hogeを追加・hogeをカウント)等を行う。

なおSqliteDatabaseアセットの取得場所については少々わかりにくい所に置いてあるので、SSを参考にして欲しい。
ss1.png

SQLite, Unity and iOS: A Rocky Relationship(Game 4 Soul)
http://gamesforsoul.com/2012/03/sqlite-unity-and-ios-a-rocky-relationship/

■まずデータベースにアクセス

まずはセットアップ。ファイルはZipで提供しているので解凍してProjectビューに放り投げてやる。

後は非常に簡単。流れ的には、他のSQLと変わらず「開く!」「クエリ!」「閉じる!」をやるだけ。その「開く!」と「閉じる」はこんな感じでかけば良いみたい。

SqliteDatabase db = new SqliteDatabase();
//DBを開く
db.Open(filePath);
//DBを閉じる
db.Close();

注意すべきは、filePathにファイルがない場合は勝手にDBを作ってしまうこと。「接続できたのにデータが無い」なんて時はfilepathに正しいパスを設定しているか確認した方が良いかも。
あと、このSqliteDatabase初期コードでは接続しているかどうか確認できないのでSqliteDatabaseクラスのIsConnectionOpenのprotectedをpublicに書き換えてやると使い勝手が良くなる。そうすれば、DBに接続したかどうかをチェックするフラグを用意しなくても済む。

DB(ディービー)は 開けたら閉める お約束

■クエリを実行

次にクエリを実行する。クエリはデータベースを開いている(接続している)時にしか使えないので、注意。クエリの実行でSqliteDatabaseはクエリの結果をDataTabel型のオブジェクトで返してくるので、下のように記述してMessageカラムを取得していく。
DataTable data = db.ExecuteQuery("select Message from Test;");
foreach(DataRow msg in data.Rows)
{
Debug.Log(msg["Message"] );
}
InsertとかDeleteとかしたいなら、ExecuteNonQueryを使う。

db.ExecuteNonQuery("INSERT INTO Test(Testid,Message) VALUES(NULL, 'hoge');");