Unity3D在Android平台使用嵌入式数据库Sqlite,解决无法找到数据库文件的问题
2015-05-13 16:38
806 查看
转载请注明出处:http://blog.csdn.net/sundong_d/article/details/45695011
做一个需要嵌入式数据库Sqlite 的unity3d项目,在pc机上运行良好,需要发布到Android平台上,于是,各种坑爹。。。会遇到找不到数据库文件的问题。当在pc机上使用sqlite时,当执行SqliteConnection dbConnection = new SqliteConnection("data source = test.db");语句时,如果有这个数据库文件则建立连接,如果没有则创建出这个文件,然后建立连接。当在Android平台上时,扯淡的事情就开始了,总之便不能这样做了(别问我是怎么知道的,说多了都是泪)。在Unity官方论坛上老外们也遇到了这个问题,也是各种坑爹,不过最后还是解决了这个问题,参考一个老外的方法,结合我自身项目特点,在Android平台上自动建立数据库文件,得到解决问题的详细过程:
首先在windows环境下unity3d程序要想发布到Android平台上,必须三个文件:Mono.Data.Sqlite.dll、sqlite3.dll、System.Data.dll,三个文件必须放在Plugins文件夹下,没有文件夹就创建一个文件夹。此外还需要一个linux下的Sqlite的编译库文件:libsqlite3.so 此文件必须放在Plugins/Android文件夹下(点击下载
下载的文件有好多个,unity安装平台不同或者版本不同所需文件不同,自己选择所需的文件,报错的话删除,这个是win7平台上的),没有文件夹就创建一个。
因为项目是要求在程序安装之后第一次运行的时候创建数据库,初始化各种数据。所以需要判断本地是不是已经有了该数据文件,如果没有则创建,如果有则跳过创建步骤。
总之,在pc端一条语句SqliteConnection conn = new SqliteConnection (Config.DbConnectionString);就能创建数据库连接,如果没有数据库文件则会自动创建数据库文件,然后建立连接,可是放到Android平台,只能同过上面的代码实现这个功能。
做一个需要嵌入式数据库Sqlite 的unity3d项目,在pc机上运行良好,需要发布到Android平台上,于是,各种坑爹。。。会遇到找不到数据库文件的问题。当在pc机上使用sqlite时,当执行SqliteConnection dbConnection = new SqliteConnection("data source = test.db");语句时,如果有这个数据库文件则建立连接,如果没有则创建出这个文件,然后建立连接。当在Android平台上时,扯淡的事情就开始了,总之便不能这样做了(别问我是怎么知道的,说多了都是泪)。在Unity官方论坛上老外们也遇到了这个问题,也是各种坑爹,不过最后还是解决了这个问题,参考一个老外的方法,结合我自身项目特点,在Android平台上自动建立数据库文件,得到解决问题的详细过程:
首先在windows环境下unity3d程序要想发布到Android平台上,必须三个文件:Mono.Data.Sqlite.dll、sqlite3.dll、System.Data.dll,三个文件必须放在Plugins文件夹下,没有文件夹就创建一个文件夹。此外还需要一个linux下的Sqlite的编译库文件:libsqlite3.so 此文件必须放在Plugins/Android文件夹下(点击下载
下载的文件有好多个,unity安装平台不同或者版本不同所需文件不同,自己选择所需的文件,报错的话删除,这个是win7平台上的),没有文件夹就创建一个。
public static class Config { public static string filepath = Application.persistentDataPath + "/Victory.db"; //Victory.db是要创建的数据库文件 public static string DbConnectionString = "URI=file:" + filepath; }
因为项目是要求在程序安装之后第一次运行的时候创建数据库,初始化各种数据。所以需要判断本地是不是已经有了该数据文件,如果没有则创建,如果有则跳过创建步骤。
if (File.Exists (Config.filepath)) { //数据库已经存在,建立连接,开始各种操作 SqliteConnection conn = new SqliteConnection (Config.DbConnectionString); } else { //如果数据库文件没有被创建,则创建数据库文件 WWW loadDB = new WWW ("jar:file://" + Application.dataPath + "!/assets/" + "Victory.db"); while (!loadDB.isDone) { } File.WriteAllBytes (Config.filepath, loadDB.bytes); //建立数据库连接 SqliteConnection conn = new SqliteConnection (Config.DbConnectionString); //接下来执行数据库初始化操作。 }
总之,在pc端一条语句SqliteConnection conn = new SqliteConnection (Config.DbConnectionString);就能创建数据库连接,如果没有数据库文件则会自动创建数据库文件,然后建立连接,可是放到Android平台,只能同过上面的代码实现这个功能。
相关文章推荐
- Unity3D在Android平台使用嵌入式数据库Sqlite,解决无法找到数据库文件的问题
- 解决:Android使用自带sqlite开发时,apk中创建的数据库外部的进程是没有权限去读/写的,而且无法如何读取指定目录下的db文件
- android手机命令行下不能使用sqlite3命令查看*.db数据库文件解决办法
- android手机命令行下不能使用sqlite3命令查看*.db数据库文件解决办法
- 解决android某些应用开发某些类无法解析/找到的问题--使用android隐藏类的方法
- Android开发中,fragment无法找到Layout文件问题的原因与解决
- android手机命令行下不能使用sqlite3命令查看*.db数据库文件解决办法
- android手机命令行下不能使用sqlite3命令查看*.db数据库文件解决办法
- android手机命令行下不能使用sqlite3命令查看*.db数据库文件解决办法
- Unity3D使用SQLite——Android应用开发时问题的解决办法
- 关于在英创em9161板上使用ADO.net连接远程数据库提示 “无法找到 PInvoke dll"dbnetlib.dll"”问题解决方法
- 解决android某些应用开发某些类无法解析/找到的问题--使用android隐藏类的方法
- sqlserver"无法删除数据库,因为该数据库当前正在使用"问题解决
- sqlserver"无法删除数据库,因为该数据库当前正在使用"问题解决
- ubuntu opera问题解决--E: 软件包 opera 需要重新安装,但是我无法找到相应的安装文件。
- 解决了android usb driver无法找到硬件信息的问题
- 解决在log4net 中使用sqlite 无法加载“SQLite.Interop.066.DLL ”的问题
- 请求帮助:如何解决烦人的VS.NET2003编译时“无法将程序集复制到文件,另一个程序正在使用,进程无法访问”的问题?
- 如何解决烦人的VS.NET2003编译时“无法将程序集复制到文件,另一个程序正在使用,进程无法访问”的问题?
- 解决使用ASP无法连接 ORACLE 9i 数据库的问题。