Unity3d 5使用sqlite3

轉載自:http://blog.csdn.net/glunoy/article/details/52037598

國內講的亂七八糟,更有故作神祕提供Mono.Data.Sqlite.dll System.Data.dll的,就是不告訴你這兩文件在哪裏。。我很無語。
看國外的,多靠譜。
http://answers.unity3d.com/questions/743400/database-sqlite-setup-for-unity.html


中文版如下。
1.先在Assets下新建Plugins文件夾。將C:\Program Files\Unity\Editor\Data\MonoBleedingEdge\lib\mono\2.0
下的Mono.Data.Sqlite.dll System.Data.dll拷貝至剛纔新建的文件夾Plugins 下。
2.到https://www.sqlite.org/download.html 下載最新版的sqlite Precompiled Binaries版本。或者你喜歡折騰下源碼自己編也行。
記住windows64 32位的區別。裏面解壓出來會有sqlite3.def sqlite3.dll 也拷貝到上面的Plugins下。
3.要在Android底下使用sqlite3 必須到這個帖子下http://forum.unity3d.com/threads/sqlite-for-android-help-please.97043/#post-705960下載一個附件。裏面包含了libsqlite3.so這個文件。然後將它放到Assets/Android下。
我不知道它和安卓系統裏面的system/lib/libsqlite.so有啥區別。。因爲我拿不出來那個文件。所以沒有嘗試。

3.5,在Player Setting裏的 OtherSettings裏有個Optimization 下邊的API Compatbility Level 選擇.NET 2.0。–這步漏了,補上

4.連接字符串.conn = "URI=file:" + Application.persistentDataPath + "/test.db";  不管什麼版本,都必須是這個目錄。不推薦什麼streaming asset 什麼aseet。因爲跨平臺的版本,只有這個目錄擁有可讀寫權限。

哪怕因此帶來一些麻煩也沒關係。(至於那些datasource=什麼什麼,我沒有去試,也不想去弄清楚他們的區別)
這個值 windows下目錄對應爲:C:\Users\你的用戶名\AppData\LocalLow\公司名\項目名
而在安卓下 對應爲/data/data/包名/files 發佈的時候必須注意。
至於ios….首先我得先有個ios再說吧.窮人裝不起那個逼。
5.代碼示例。從上面的老外連接照抄。不推薦什麼sqllite hleper.cs當然,你要用我也沒意見。代碼如下:防止天草哪天心情不好又不給訪問了。
   string conn = "URI=file:" + Application.dataPath + "/PickAndPlaceDatabase.s3db"; //Path to database.
     SqliteConnection dbconn;
     dbconn =  new SqliteConnection(conn);
     dbconn.Open(); //Open connection to the database.
     SqliteCommand dbcmd = dbconn.CreateCommand();
     string sqlQuery = "SELECT value,name, randomSequence " + "FROM PlaceSequence";
     dbcmd.CommandText = sqlQuery;
     SqliteDataReader reader = dbcmd.ExecuteReader();
     while (reader.Read())
     {
         int value = reader.GetInt32(0);
         string name = reader.GetString(1);
         int rand = reader.GetInt32(2);
        
         Debug.Log( "value= "+value+"  name ="+name+"  random ="+  rand);
     }
     reader.Close();
     reader = null;
     dbcmd.Dispose();
     dbcmd = null;
     dbconn.Close();
     dbconn = null;
 }


如果一定要用什麼什麼helper,推薦使用http://www.xuanyusong.com/archives/831 或者http://www.w2bc.com/Article/49868 這裏的。其實沒啥區別…
另外我能吐槽一下麼。。。你們兩個在構造函數裏打開數據庫,醬紫真的好處理返回值麼?裏面throw了異常,外面的包裝函數又不處理異常,又不拋出異常,你們這是坑爹造不?
當然,上面的示例調用也沒有處理異常…


附帶一些多餘的話.
Debug.log有時候中文會亂碼。只要將.cs文件的編碼改成utf-8 無bom即可。用VS的話來講 叫:utf8-無簽名。爲了跨平臺,推薦都使用UTF-8。具體請自行搜索..

sqlite3 管理工具 推薦使用SQLite Expert Personal


最後是真相



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章