0

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

请帮我。

4

2 回答 2

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”,所以你可以试试这个。

于 2013-03-29T10:08:17.583 回答
0

最后我解决了这个问题。

实际上,当我在 iPhone 中运行应用程序时,我的预填充数据库存储到 unit3d.app 包中,并且我正在访问 Document 文件夹。所以它正在为 Document 文件夹创建一个新数据库,因此我的数据库是空的。

现在如何连接该预填充数据库:

我创建了一个函数,它将返回路径,直到 unity3d.app 并且函数在这里:

public static string GetiPhoneDocumentsPath ()
    { 

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

现在连接到数据库的最终代码:

字符串连接字符串;

    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 (); 

如果有人对连接数据库有问题,那么他们可以联系我。

谢谢雅舍什。

于 2013-03-30T05:46:06.993 回答