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

最後に私は問題を解決しました。

実際にiPhoneでアプリを実行すると、事前入力データベースがunit3d.appパッケージに保存され、Documentフォルダーにアクセスしています。したがって、データベースが空になるように、ドキュメントフォルダーに新しいデータベースを作成しています。

次に、その事前入力データベースを接続する方法:

私はunity3d.appまでのパスを返す関数を1つ作成しました。関数はここにあります:

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 に答える
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 に答える