【Unity】SQLite釋出到Android端遇到的那些坑
阿新 • • 發佈:2019-01-09
釋出到Android端需要新增libsqlite3.so檔案,和相應的
Mono.Data.Sqlite.dll、sqlite3.dll、System.Data.dll類庫
注意:所有檔案放到Plugins資料夾下,libsqlite3.so放在Android資料夾下
*在Player Setting裡的(安卓選項中) OtherSettings裡有個Optimization 下邊的API Compatbility Level 選擇.NET 2.0(否則會出現System.Data.dll打包失敗的情況,至於為什麼,我也不知道,沒研究過,從國外大神那裡得知的...)
using UnityEngine; using System.Collections; using Mono.Data.Sqlite; using UnityEngine.UI; using System.IO; public class AndroidLoadData : MonoBehaviour { private Text name; private Text score; // Use this for initialization void Start () { name = GameObject.Find ("name").GetComponent<Text> (); score = GameObject.Find ("score").GetComponent<Text> (); ConnectionDataBase (); } public void ConnectionDataBase() { // 【沙盒路徑】 string sandboxPath = Application.persistentDataPath + "/Data0118.sqlite"; // 【用於www下載資料庫的路徑】表示的就是unity工程中StreamingAssets中的資料庫檔案 // 打包成APK安裝包之後,就是下面的地址 string downPath = "jar:file://" + Application.dataPath + "!/assets" + "/Data0118.sqlite"; // 【安卓端】判斷沙盒路徑是否存在資料庫檔案 // 如果不存在,就從StreamingAssets資料夾中下載資料庫 if (!File.Exists(sandboxPath)) { Debug.Log ("執行到此,表示沙盒路徑中不存在 Data0118.sqlite 檔案"); // 不存在資料庫檔案的時候,有兩種建立方式 // 1.使用sqlite程式碼,手動建立,如果資料量過大,不適合程式碼的書寫 // 2.通過下載的方式,去其他的目錄下載,然後儲存到沙盒路徑 WWW www = new WWW (downPath); // 如果資料沒有下載完成,就不能繼續執行後面的程式碼 while (!www.isDone) { } // 將www下載得到的所有資料,都儲存到sandboxPath目錄下 File.WriteAllBytes (sandboxPath, www.bytes); } // 連結沙盒路徑中的資料庫檔案 string dataSandboxPath = "URI = file:" + Application.persistentDataPath + "/Data0118.sqlite"; SqliteConnection con = new SqliteConnection (dataSandboxPath); // 開啟資料庫 con.Open (); // 建立資料庫命令 SqliteCommand com = con.CreateCommand (); // 資料庫命令的具體內容 com.CommandText = "select name from MyTable where name = 'XiXi'"; // 執行資料庫命令 name.text = com.ExecuteScalar ().ToString(); // 給資料庫命令賦值 com.CommandText = "select score from MyTable where name = 'XiXi'"; // 執行資料庫命令 score.text = com.ExecuteScalar ().ToString (); // 關閉資料庫 con.Close (); } }