Unity3D使用Sqlite遇到的各种问题及其解决方案

最近项目需要,在Unity3D里面使用Sqlite来存取数据,遇到了各种各样的问题,感觉网上找到的博客并没有描述清楚,在这里记录一下,如果能解决你遇到的一些问题那么最好不过了。

1.dll文件的引入。

网上各位的说法有些不同,但都要用到Mono.Data.Sqlite.dll和System.Data.dll两个文件。
我自己的电脑上只需要这两个动态链接库文件就可以在编辑器中正常运行,于是就这么把项目上传了,我的同事更新下来后却出问题了,提示DllNotFoundException。简单看了下提示,里面提到的sqlite3.dll,我没有拷贝过这个文件,不存在少上传了文件的问题。
我在Unity安装目录里找到了一个sqlite3.dll拷进plugins文件夹上传,同事更新下来依然报错:
	System.DllNotFoundException: sqlite3 at (wrapper managed-to-native) 
	Mono.Data.SQLite.UnsafeNativeMethods:sqlite3_open_v2 (byte[],intprt&,int,intptr)
我猜测可能我安装了什么软件导致运行时能够加载到一个sqlite3.dll库,才发现以前cocos2d中用到了sqlite,可能是被加到了系统搜索路径下,于是拷了一个到plugins里面,再上传,同事更新后终于对了。
针对上面遇到的问题,我建议大家自己去找一个自己项目可用的sqlite3.dll文件。

2.安卓环境下的一些问题。

鉴于上面遇到了无法关联库文件的问题,我在安卓手平台下做了一些测试,发现运行中会抛出和上面一样的异常,这是因为sqlite3.dll在安卓环境下不能用的,需要的是.so文件,可以参考 这里的提问。总结起来就是: 你可以点击 这里获取x86版本的库,或者点 这里获取ARM版本的库。

3.是否需要先建立好数据库文件?

看到某些教程说,要把数据库文件拷贝到StreamingAssets文件夹下,访问的时候都是加上persistentDataPath,让让你觉得应该先创建好数据库,然后拷过去。
实际也有数据库中可以不预先存放数据的需求,我们就没必要先创建数据库。在初始化SqliteConnection的时候,如果对应位置没有这个数据库文件时是会新建一个数据库的。

你可能感兴趣的:(Unity3D使用Sqlite遇到的各种问题及其解决方案)