在iOS设备中启动应用程序时,Unity3d iPhone SQLite数据库为空

时间:2013-03-29 09:26:16

标签: c# ios database sqlite unity3d

我在Unity3d游戏中创建数据库连接,我正在iOS设备上部署它。数据库连接工作正常,但我的数据库是空的,虽然我已经在启动前预先填充它。

我正在使用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 

请帮帮我。

2 个答案:

答案 0 :(得分: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中,连接字符串应该像“Data Source = xxxxxxxx”,所以你可以试试这个。

答案 1 :(得分:0)

最后我解决了这个问题。

实际上,当我在iPhone中运行应用程序时,我的预填充数据库存储到unit3d.app包中,我正在访问Document文件夹。因此,它正在为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。