美好的一天我在移动Android设备上访问我的数据库时遇到问题。它似乎没有读取我的数据库,或者我不知道我的数据库不包含在构建中。但这是捕获,我的数据库在统一编辑器中工作正常。我似乎无法在我的移动设备上找到问题,因为我无法访问它的控制台。顺便说一句,这是我的代码:
阅读数据库:
void readDatabase(){
string conn = "URI=file:" + Application.dataPath + "/Database/AtlasDB.sqlite";
string sqlQuery = "SELECT * FROM UserScore";
using (SqliteConnection c = new SqliteConnection(conn))
{
c.Open();
using (SqliteCommand cmd = new SqliteCommand(sqlQuery, c))
{
using (SqliteDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
currHighScore = rdr.GetInt32(0);
// string name = reader.GetString(1);
currHighDist = rdr.GetInt32(1);
Debug.Log( "High Score : " + currHighScore + ", High Distance: " + currHighDist);
}
}
}
}
}
更新数据库:
void highscoreChecker(){
string conn2 = "URI=file:" + Application.dataPath + "/Database/AtlasDB";
string sqlQuery2 = "UPDATE UserScore SET Highscore = '" + MoveSanji.scoreAccumulate + "'";
using (SqliteConnection c = new SqliteConnection(conn2))
{
c.Open();
using (SqliteCommand cmd = new SqliteCommand(sqlQuery2, c))
{
if (MoveSanji.scoreAccumulate > currHighScore) {
cmd.ExecuteReader();
}
}
}
string sqlQuery3 = "UPDATE UserScore SET HighDistance = '" + Mathf.RoundToInt( MoveSanji.distanceRun )+ "'";
using (SqliteConnection c = new SqliteConnection(conn2))
{
c.Open();
using (SqliteCommand cmd = new SqliteCommand(sqlQuery3, c))
{
if (Mathf.RoundToInt( MoveSanji.distanceRun) > currHighDist) {
cmd.ExecuteReader();
}
}
}
}
我正在使用sqlite
注意:我使用SQLite Database Browser 2.0 b1制作了数据库 - 数据库位于Assets文件夹中的数据库文件夹中 - 我的插件文件夹上有Mono.Data,Mono.Data.Sqlite,sqlite3.dll,sqlite3.def,System.Data.dll
答案 0 :(得分:1)
Unity的构建过程非常智能,可以识别场景中使用的内置资产类型,但它不会将您的数据库文件识别为依赖项,因此不包括在内在构建中。
您可以将原始文件保存在StreamingAssets
文件夹中,以包含原始文件。
这些文件的路径取决于您构建的目标平台:
//PC
path = Application.dataPath + "/StreamingAssets";
//iOS
path = Application.dataPath + "/Raw";
//Android
path = Application.dataPath + "/Raw";
Android构建的一个重要注意事项,来自上面链接的手册页:
请注意,在Android上,文件包含在压缩的.jar文件中(其格式与标准的zip压缩文件基本相同)。这意味着如果您不使用Unity的WWW类来检索文件,那么您将需要使用其他软件来查看.jar存档内部并获取该文件。
除非您的用例可以处理.jar
存档中嵌入的只读数据库文件,否则将该文件复制到Application.persistentDataPath
等其他位置并打开它可能更容易。