我在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
请帮帮我。
答案 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。