这是针对关于安卓平台对项目数据库文件的访问

刚来公司实习不久,开始了一个小项目demo,本来是用csv文件读取一些数据,然而老板开始要求用数据库来读取,因此我就简单的直接读取本机的数据库,在PC上运行没有问题。老板开始要求在安卓上运行,此时问题就出现了,安卓上是无法通过ip去访问数据库。其实可以通过访问网站来获取数据库的数据,但是对于我这种刚毕业的新手来说是无法实现的,只能妥协通过访问数据库导出来的db文件来读取数据。

首先要去网上百度一下sqlconvert软件,这个软件是用于将sqlserver中的表转换为.db文件。

接着需要下面4个文件,其中Mono.Data.Sqlite.dll和System.Data.dll可以在文件夹Unity\Editor\Data\Mono\lib\mono\2.0中找到,剩下两个文件可以找网上百度找到。

unity 获取android根路径 unity安卓读取文件_新手


接着在Assets文件夹建立以下文件夹,其中上面的文件放在Android文件夹下,然后db文件放在assets的文件夹下。

unity 获取android根路径 unity安卓读取文件_库文件_02

如果在PC上运行,那么路径很简单就是

string path = @"data source =" + Application.dataPath + "/Plugins/Android/assets/" + (数据库文件.db);
SqliteConnection dbConnection = new SqliteConnection(path);

如果在安卓上运行,那么路径就是

string path = Application.persistentDataPath + "/" + (数据库文件.db);

其中 Application.persistentDataPath指的是地址手机内/data/data/xxx.xxx.xxx/files

if (!File.Exists(path)) {
                //现用www先从Unity中下载到数据库
                WWW loadDB = new WWW(Application.streamingAssetsPath + "/" + (数据库文件.db));
                while (!loadDB.isDone) {           
                //等待时的操作        
                File.WriteAllBytes(path, loadDB.bytes);
            SqliteConnection dbConnection = new SqliteConnection("URI=file:" + path);

一般一开始Application.persistentDataPath上是不存在我们的数据库文件,因此要到unity中将数据库文件拷贝一份出来到Application.persistentDataPath上进行读取。用WWW读取unity中的数据。
其中本来是

WWW loadDB = new WWW("jar:file://" + Application.dataPath + "!/assets/” + (数据库文件.db));

经过百度后发现,其实
Application.streamingAssetsPath = jar:file://" + Application.dataPath + "!/assets

当从unity加载完数据库文件后,就利用

File.WriteAllBytes(path, loadDB.bytes);

将文件拷贝一份到Application.persistentDataPath上,此时安卓平台就能读取到项目上的数据库文件。至于要读取远程计算机的数据库,好像只能通过建立服务器通过网站去进行访问,对于我这个新手而言比较麻烦,只能以后慢慢去摸索。