在 Android 设备上从 Unity3D 访问 SQLite 数据库时出现问题
issue accessing SQLite database from Unity3D on Android device
我在我的 Unity3D 项目中添加了一个 SQLite 数据库,在我使用 Unity 编辑器时一切正常,但是当我在 Android 设备上测试游戏时,无法访问数据库。
有没有人遇到同样的问题,可以告诉我如何解决?
代码示例:
using UnityEngine;
using System.Collections;
using Mono.Data.Sqlite;
using System.Data;
public class DBAccess : MonoBehaviour {
void Start () {
string connectionString = "URI=file:" +Application.dataPath + "/myDataBase"; //Path to database.
IDbConnection dbcon;
dbcon = (IDbConnection) new SqliteConnection(connectionString);
dbcon.Open(); //Open connection to the database.
IDbCommand dbcmd = dbcon.CreateCommand();
string sql = "SELECT firstname, lastname FROM addressbook";
dbcmd.CommandText = sql;
IDataReader reader = dbcmd.ExecuteReader();
while(reader.Read()) {
string FirstName = reader.GetString (0);
string LastName = reader.GetString (1);
Debug.Log (FirstName + LastName);
}
// clean up
reader.Close();
reader = null;
dbcmd.Dispose();
dbcmd = null;
dbcon.Close();
dbcon = null;
}
}
我在本论坛的其他帖子中读到其他人在构建时遇到问题,不是我的情况,我可以生成 apk。
我在两个不同的设备上测试过,结果相同,所以我认为这不是设备的问题。
我以 IDE 的身份使用 MonoDevelop,Unity3D 5.0.1 版本和 Sqlite 3.8.9,所有这些都在 windows 8.1
的笔记本电脑上进行
提前致谢。
我终于让它工作了。问题是,至少在我的情况下,Android 基于 Linux 体系结构,因此它不适用于 .dll 库,我必须改用 .so 库。 MonoDevelop 自己的库不会发生这种情况;我想这会在构建中翻译这些库,但不会翻译像 sqlite3.dll.
这样的外部库
我把这个.so文件放到/Assets/Plugins/Android里面,Unity自动找到了;在检查器中,我必须在 'Select platforms for puglin' 中 select 'Android',在 CPU 中 'AR Mv 7'。我希望这对遇到同样问题的其他人有用。
由于SQLite官网上没有.so库,如果有人需要,请给我留言,我会发邮件。[=10=]
我在我的 Unity3D 项目中添加了一个 SQLite 数据库,在我使用 Unity 编辑器时一切正常,但是当我在 Android 设备上测试游戏时,无法访问数据库。 有没有人遇到同样的问题,可以告诉我如何解决?
代码示例:
using UnityEngine;
using System.Collections;
using Mono.Data.Sqlite;
using System.Data;
public class DBAccess : MonoBehaviour {
void Start () {
string connectionString = "URI=file:" +Application.dataPath + "/myDataBase"; //Path to database.
IDbConnection dbcon;
dbcon = (IDbConnection) new SqliteConnection(connectionString);
dbcon.Open(); //Open connection to the database.
IDbCommand dbcmd = dbcon.CreateCommand();
string sql = "SELECT firstname, lastname FROM addressbook";
dbcmd.CommandText = sql;
IDataReader reader = dbcmd.ExecuteReader();
while(reader.Read()) {
string FirstName = reader.GetString (0);
string LastName = reader.GetString (1);
Debug.Log (FirstName + LastName);
}
// clean up
reader.Close();
reader = null;
dbcmd.Dispose();
dbcmd = null;
dbcon.Close();
dbcon = null;
}
}
我在本论坛的其他帖子中读到其他人在构建时遇到问题,不是我的情况,我可以生成 apk。
我在两个不同的设备上测试过,结果相同,所以我认为这不是设备的问题。
我以 IDE 的身份使用 MonoDevelop,Unity3D 5.0.1 版本和 Sqlite 3.8.9,所有这些都在 windows 8.1
的笔记本电脑上进行提前致谢。
我终于让它工作了。问题是,至少在我的情况下,Android 基于 Linux 体系结构,因此它不适用于 .dll 库,我必须改用 .so 库。 MonoDevelop 自己的库不会发生这种情况;我想这会在构建中翻译这些库,但不会翻译像 sqlite3.dll.
这样的外部库我把这个.so文件放到/Assets/Plugins/Android里面,Unity自动找到了;在检查器中,我必须在 'Select platforms for puglin' 中 select 'Android',在 CPU 中 'AR Mv 7'。我希望这对遇到同样问题的其他人有用。
由于SQLite官网上没有.so库,如果有人需要,请给我留言,我会发邮件。[=10=]