这是针对关于安卓平台对项目数据库文件的访问
刚来公司实习不久,开始了一个小项目demo,本来是用csv文件读取一些数据,然而老板开始要求用数据库来读取,因此我就简单的直接读取本机的数据库,在PC上运行没有问题。老板开始要求在安卓上运行,此时问题就出现了,安卓上是无法通过ip去访问数据库。其实可以通过访问网站来获取数据库的数据,但是对于我这种刚毕业的新手来说是无法实现的,只能妥协通过访问数据库导出来的db文件来读取数据。
首先要去网上百度一下sqlconvert软件,这个软件是用于将sqlserver中的表转换为.db文件。
接着需要下面4个文件,其中Mono.Data.Sqlite.dll和System.Data.dll可以在文件夹Unity\Editor\Data\Mono\lib\mono\2.0中找到,剩下两个文件可以找网上百度找到。
接着在Assets文件夹建立以下文件夹,其中上面的文件放在Android文件夹下,然后db文件放在assets的文件夹下。
如果在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上,此时安卓平台就能读取到项目上的数据库文件。至于要读取远程计算机的数据库,好像只能通过建立服务器通过网站去进行访问,对于我这个新手而言比较麻烦,只能以后慢慢去摸索。