加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

unity 使用 sqlite 数据库遇到的问题 unity android 使用sqlite

发布时间:2020-12-12 19:41:18 所属栏目:百科 来源:网络整理
导读:在用unity做开发时,需要使用sqlite作为数据库,于是百度,方法基本一致 1 Assets 中 建立文件夹Plugins 并且导入以下几个dll Mono.Data.Sqlite .dll sqlite3 .dll System.Data .dll 2 代码实现 代码可以参考 xuanyusong大大 http://www.xuanyusong.com/arch

在用unity做开发时,需要使用sqlite作为数据库,于是百度,方法基本一致


1 Assets 中 建立文件夹Plugins

并且导入以下几个dll

Mono.Data.Sqlite.dll

sqlite3.dll

System.Data.dll


2 代码实现

代码可以参考 xuanyusong大大 http://www.xuanyusong.com/archives/831


但是在运行时却出现了如下的问题


错误信息1

System.DllNotFoundException: Assets/Plugins/sqlite3.dll
at (wrapper managed-to-native) Mono.Data.Sqlite.UnsafeNativeMethods:sqlite3_open_v2 (byte[],intptr&,int,intptr)
at Mono.Data.Sqlite.SQLite3.Open (System.String strFilename,SQLiteOpenFlagsEnum flags,Int32 maxPoolSize,Boolean usePool) [0x00000] in <filename unknown>:0
at Mono.Data.Sqlite.SqliteConnection.Open () [0x00000] in <filename unknown>:0
at (wrapper remoting-invoke-with-check) Mono.Data.Sqlite.SqliteConnection:Open ()


错误信息2

Failed to load 'Assets/Plugins/sqlite3.dll',expected 64 bit architecture (IMAGE_FILE_MACHINE_AMD64),but was 0x014c.
Mono.Data.Sqlite.SQLite3:Open(String,SQLiteOpenFlagsEnum,Int32,Boolean)
Mono.Data.Sqlite.SQLite3:Open(String,Boolean)
Mono.Data.Sqlite.SqliteConnection:Open()


奇怪的是,我的unity最初只是显示 错误信息1 一度导致我找不到问题的原因。后来实在没办法,重启电脑,再次运行时才有了 错误提示2

才找到解决方案。


解决方法 下载一个64位的 sqlite3


此处提供代码以及 dll下载

链接:http://pan.baidu.com/s/1pJvG6Or 密码:6d2r


我的开发环境

unity5.0 win7 64位


-------------------------

继续更新

接上部分,PC上的unity可以顺利读取sqlite数据库之后,进一步尝试在android上读取。 同样也遇到了问题 ,无法读出数据


【思路】

因为unity中的文件不能直接转到android中,所以我们需要copy db到相应的位置才能读取


1) 放入db文件

如果是将数据库文件保存到Plugins-》Android-》assets 中,你会发现,apk打包以后,数据库文件根本找不到了~(将apk改成rar解压变可以看到文件结构)

解决方法是建立 assets->>StreamingAssets 这个文件,将db放入,这样,生成apk以后db文件就会在 assets中看到。


真机测试db文件的地址是在 data/app/com.test.da-1.apk!/assets/test.db

而我们需要将db放到 data/data/com.test.da/files/test.db 中 (第三方数据库拷贝至Android才可以找到)


2) 复制db文件到可以读取的位置

需要用到www的方式copy


3)读取数据库

此处有一个坑,android上读取sqlite 需要一个 名为 libsqlite3.so 放入到 Assets--》--Plugins-》Android 中 不然无法读取文件。

所以,在android上顺利读取,至少需要 4个文件

Mono.Data.Sqlite.dll

sqlite3.dll

System.Data.dll

libsqlite3.so


参考网站 http://forum.unity3d.com/threads/unity-3d-android-sqlite-examples.114660/


代码相关

//如果运行在编辑器中
#if UNITY_EDITOR
        //通过路径找到第三方数据库
        appDBPath = Application.dataPath + "/Plugins/Android/assets/" + "test.db";
        DbAccess db = new DbAccess("URI=file:" + appDBPath);
        //如果运行在Android设备中

#elif UNITY_ANDROID

		//将第三方数据库拷贝至Android可找到的地方
		appDBPath = Application.persistentDataPath + "/" + "test.db";
		//如果已知路径没有地方放数据库,那么我们从Unity中拷贝
		if(!File.Exists(appDBPath))
 		{
			//用www先从Unity中下载到数据库
             WWW loadDB = new WWW("jar:file://" + Application.dataPath + "!/assets/" + "test.db"); 
            bool boo=true;
            while(boo)
            {
                if(loadDB.isDone)
                 {
                     //拷贝至规定的地方
		    File.WriteAllBytes(appDBPath,loadDB.bytes);
                    boo =false;
                 }
            }
			
		}
		//在这里重新得到db对象。
		DbAccess db = new DbAccess("URI=file:" + appDBPath);
#endif



对于IOS的,遇到了再更新~

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读