首先,告诉大家写这篇文章的最大感慨是,国内技术博客真的好混乱,真的是各种抄呀。而且没有经过自己的实践,我所做的项目需要使用sqlite来存储本地数据,而我们Unity3d开发者大多是借鉴《宣雨松》大神的博客文章,例如http://www.xuanyusong.com/archives/1454/
Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二)
1、你需要在你电脑上Unity安装目录中找到以下三个文件,直接在你目录下搜索即可(切记这三个文件用自己当前版本下的,网上找的不一定与你的项目版本一样)。
①、Mono.Data.Sqlite.dll,
②、sqlite3.dll
③、System.Data.dll
将以上三个文件放到你的Plugins文件夹下
2、这步很关键,也非常重要,但是国内的坑们根本就没有说明这步,也许是他们根本就没有实践吧。
下载libsqlite3.so到assets-plugins-android下面,这里的libsqlite3.so文件是sqlite3.dll在Linux环境下编译产生的文件,我们这里不需要再去编译,直接找一份就可以了。我以打包分享给大家http://pan.baidu.com/s/1mguwLCk
在Android上使用Sqlite的原理是:
使用Mono.Data.Sqlite.dll,作为链接,在C#中使用SQLite的功能,然后libsqlite3.so为sqlite3的c编译的NDK文件
(以上这些文件可以到雨松大神的那个Demo里面下载)
3、数据库存放的位置
使用代码创建的数据库应该放在StreamingAsset下,在安卓手机上是无法直接读取该文件夹下的数据库文件的,我们需要先使用WWW原理将数据库文件写到手机沙盒目录下
以下代码摘自鱼松大神博客,但是需要做出改动:(原谅我不会玩代码插入功能,教教我呗)
#elif UNITY_ANDROID
//将第三方数据库拷贝至Android可找到的地方
string appDBPath = Application.persistentDataPath + "/" + "location.db";//(这个目录就是手机的沙盒)
//如果已知路径没有地方放数据库,那么我们从Unity中拷贝
if(!File.Exists(appDBPath))
{
//用www先从Unity中下载到数据库
WWW loadDB = new WWW("jar:file://" + Application.dataPath + "!/assets/" + "location.db");
//拷贝至规定的地方
File.WriteAllBytes(appDBPath, loadDB.bytes);
}
else
{
//如果在手机沙盒中以存在该文件,可以先删除,再写进去(这样的是保证手机沙盒中的文件不是0字符的空文件,反正不这样写就悲催了)
File.Delete(appDBPath, loadDB.bytes);
WWW loadDB = new WWW("jar:file://" + Application.dataPath + "!/assets/" + "location.db");
File.WriteAllBytes(appDBPath, loadDB.bytes);
}
//在这里重新得到db对象。
DbAccess db = new DbAccess("URI=file:" + appDBPath);
结尾:
好了,上面的代码是连接数据库的发放, 接下来要做的就是使用代码来操作数据库了,这里我们可以使用《宣雨松》大神的代码,但是,我是不会告诉你,他的代码中有点语法错误,是无法通过编译的,我想可能是手误(如果通过了,那基本能用了),这需要你们自己去调试。