Unity3d在安卓平台下使用sqlite存储操作数据

首先,告诉大家写这篇文章的最大感慨是,国内技术博客真的好混乱,真的是各种抄呀。而且没有经过自己的实践,我所做的项目需要使用sqlite来存储本地数据,而我们Unity3d开发者大多是借鉴《宣雨松》大神的博客文章,例如http://www.xuanyusong.com/archives/1454/   

Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二)

大神写这篇博客时Unity还只是3.X版本,用到现在的大多数版本已经不适应了,会出现各种错误。我就是被这种情况坑的惨不忍睹,最终还是借鉴了其他人的文章。于是,我就有了写这篇文章的想法,这篇文章的中方法目前适合4.X以上的版本,无论是什么技术点,自己认证之后才是真的,不要轻易相信别人说的什么什么。其实不是那样的,得相信自己,如果是Unity3d开发的,可以多去官方的论坛查找问题。请各位看官轻打脸
---------------------------------------------------------以上可以不看-------------------------------------------------------------

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原理将数据库文件写到手机沙盒目录下

以下代码摘自鱼松大神博客,但是需要做出改动:(原谅我不会玩代码插入功能,教教我呗)

#if UNITY_EDITOR //通过路径找到第三方数据库
string appDBPath = Application.streamingAssetsPath + "/loadDB.db";
DbAccess db = new DbAccess("URI=file:" + appDBPath);
//如果运行在Android设备中
#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);

结尾:

好了,上面的代码是连接数据库的发放, 接下来要做的就是使用代码来操作数据库了,这里我们可以使用《宣雨松》大神的代码,但是,我是不会告诉你,他的代码中有点语法错误,是无法通过编译的,我想可能是手误(如果通过了,那基本能用了),这需要你们自己去调试。

你可能感兴趣的:(Unity3d)