1. 程式人生 > >【Unity】SQLite釋出到Android端遇到的那些坑

【Unity】SQLite釋出到Android端遇到的那些坑

釋出到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 ();

	}

}