2013-03-29 19 views
0

我在Unity3D遊戲中創建數據庫連接,並將其部署到iOS設備上。數據庫連接工作正常,但我的數據庫是空的,雖然我已經預先填充它發射之前。在iOS設備中啓動應用程序時Unity3d iPhone SQLite數據庫爲空設備

我使用的是Unity 4.0.1 Pro和我的xCode 4.6以及C#語言的代碼。

這是我在C#

void Start() 
    { 

     string connectionString;  


     if (Application.platform == RuntimePlatform.IPhonePlayer) { 



      connectionString = "URI=file:" + Application.persistentDataPath + "/Database.db"; 

     } else { 

      connectionString = "URI=file:Database.db";   

     } 

     Debug.Log ("Connection String = " + connectionString); 

     IDbConnection dbcon; 
     dbcon = (IDbConnection)new SqliteConnection (connectionString); 
     dbcon.Open(); 

     Debug.Log ("Start DB"); 

     IDbCommand dbcmd = dbcon.CreateCommand(); 

     string sql = 
      "SELECT * from Test "; 
     dbcmd.CommandText = sql; 
     IDataReader reader = dbcmd.ExecuteReader(); 

     while (reader.Read()) { 
      Debug.Log ("IN WHILE"); 
      string FirstName = reader.GetString (0); 

      // Print to Console 
      Debug.Log (FirstName); 
     } 
     // clean up                                 
     reader.Close(); 
     reader = null; 
     dbcmd.Dispose(); 
     dbcmd = null; 
     dbcon.Close(); 
     dbcon = null; 

    } 

代碼和我得到在控制檯下面的錯誤。

SqliteException: SQLite error 
no such table: Test 
    at Mono.Data.Sqlite.SQLite3.Prepare (Mono.Data.Sqlite.SqliteConnection cnn, System.String strSql, Mono.Data.Sqlite.SqliteStatement previous, UInt32 timeoutMS, System.String& strRemain) [0x00000] in <filename unknown>:0 
    at Mono.Data.Sqlite.SqliteCommand.BuildNextCommand() [0x00000] in <filename unknown>:0 

請幫幫我。

+0

您是否在該數據庫中創建了任何表格? –

+0

@NicolasDai是的,我在數據庫中有crested table。 – Yashesh

+0

@NicolasDai我發現了這個問題。我的數據庫存儲在unity3d.app包下,我正在訪問文檔文件夾。現在我怎樣才能訪問unity3d.app/myDatabase.db? – Yashesh

回答

0

最後我已經解決了這個問題。

其實當我運行iPhone中的應用程序,然後我的預填充數據庫存儲到unit3d.app包,我正在訪問文檔文件夾。所以它創建一個新的數據庫到Document文件夾,以便我的數據庫是空的。

現在如何連接該預填充數據庫:

我已創建一個函數,將返回的路徑,直到unity3d.app和功能是在這裏:

public static string GetiPhoneDocumentsPath() 
    { 

     string path = Application.dataPath.Substring (0, Application.dataPath.Length - 5); 
     return path; 
    } 

現在最終代碼用於連接數據庫:

string connectionString;

if (Application.platform == RuntimePlatform.IPhonePlayer) { 


     connectionString = "URI=file:" + GetiPhoneDocumentsPath() + "/SqliteTestDB.db"; 


    } else { 

     connectionString = "URI=file:SqliteTestDB.db";   

    } 

    Debug.Log ("Connection String = " + connectionString); 

    IDbConnection dbcon; 
    dbcon = (IDbConnection)new SqliteConnection (connectionString); 
    dbcon.Open(); 

如果有人有問題的連接數據庫,然後他們可以聯繫我。

謝謝 Yashesh。

+0

爲什麼要修剪掉數據通道的5個字符?這不清楚。 – gdbj

+0

由於數據路徑包含需要從路徑中刪除的「/ Data」。 – Yashesh

+0

您的解決方案對我無效,因爲我的db文件無法找到。我其實不確定你的解決方案爲什麼會起作用。我上面的評論更多的是理解改變路徑的理性。我確實找到了一個清晰的解決方案,適用於我: http://stackoverflow.com/questions/26822502/applicationdata-persistentdatapath-unity-editor-to-android/26825890#26825890 – gdbj

0

連接字符串是Android和iOS之間的不同,你查詢你的數據庫之前,你需要做的是:

connectionString= "Data Source=" + Application.persistentDataPath + "/Database.db"; 

switch (Application.platform) 
{ 
    case RuntimePlatform.IPhonePlayer: 
     datasource = "Data Source=" + Application.persistentDataPath + "/Database.db"; 
     break; 
    case RuntimePlatform.Android: 
     datasource = "URI=file:" + Application.persistentDataPath + "/Database.db"; 
     break; 
} 

在IOS連接字符串應該是這樣的「數據源= XXXXXXXX」,所以你可以試試這個。

相關問題