Unity工具—Mono.Data.Sqlite 使用(集成SQLite数据库)

Unity编辑器:2019.2.0f1、2018.4.16f1、2017.4.37f1

 

获取 Mono.Data.Sqlite.dll

想在 Unity 中使用 Sqlite 需要使用 Mono.Data.Sqlite.dll,该库为C# API,可直接从 Unity 客户端中获取

以 Mac 为例,大部分网上提供的目录为 /Unity.app/Contents/MonoBleedingEdge/lib/mono/2.0-api/Mono.Data.Sqlite.dll 但实际使用会发现该目录下的 dll 会出现版本无法兼容、提示加载失败等问题

后发现 /Unity.app/Contents/Mono/lib/mono/2.0/Mono.Data.Sqlite.dll 更加稳定,经测试 2019.2.0f1、2018.4.16f1、2017.4.37f1 之间可互相使用,无异常

另外其他博文有提到不同版本 Unity 会包含不同版本的 Mono.Data.Sqlite.dll ,会引发兼容性问题,使用时注意 PlayerSetting 中 Api Compatibility Level 需选择 .NET Standard 2.0 ,但本文测试设置为 .NET 4.x 也能正常运行

iOS 与 macOS 环境配置

无需额外配置,直接使用即可

Android 环境配置

Android 还需 libsqlite3.so ,该库为 sqlite3 由 C 编译得来,为适配不同的 Android 架构可下载

armeabi-v7a 放入 Assets/Plugins/Android/libs/armeabi-v7a目录

arm64-v8a 放入 Assets/Plugins/Android/libs/arm64-v8a目录

x86 放入 Assets/Plugins/Android/libs/x86目录

x86_64 放入 Assets/Plugins/Android/libs/x86_64目录

对应 so 文件放入目录后选中,于 Inspector 的 platform 仅选择 Android,架构根据版本选择

Windows 环境配置

Windows 需额外添加 sqlite3.dll 可从官网下载
Windows 分为 x86 和 x64 架构,根据需求添加于 Unity 项目中 Asset/Plugins/x86 和Asset/Plugins/x86_64目录下,选中该dll,于 Inspector 中仅勾选 Standalone 平台和对应架构

 

疑问

  1. System.Data.dll 没用到

网上很多文章(甚至 Xamarin 官方 )提到需将与 Mono.Data.Sqlite 同目录下的 System.Data.dll 一同添加到 Plugin 中(或全平台或仅 Android 平台)以保证版本同一,但实际测试发现,没有导入也可正常运行

  1. sqlite3.dll 仅用于 Windows 平台

另有说法,Android 需添加 sqlite3.dll 到 Plugin,但实际测试没添加也能正常运行<--已验证

但是 Android需要添加 libsqlite3.os库文件到Plugin/Android/这里 ,如下图

在Unity3D中的使用

1.准备工作:

 

1.首先在Plugins文件夹下放入三个dll,一个.so他们分别是

sqlLite3: 从官网上下载你的Unity3D对应的版本(x86 -32) https://www.sqlite.org/download.html

拖入unity3D后Apply

从自己的安装目录中去搜索

Mono.Data.Sqlite

Editor\Data\Mono\lib\mono\2.0

Systen.Data

也在Editor\Data\Mono\lib\mono\2.0

 

libsqlite3.so

(不想自己下源码编译的,可以用别人的,比较新的推介:github,https://github.com/Busta117/SQLiteUnityKit)

下载libsqlite3.so到assets-plugins-android下面

 

2.特别注意:

异常:DllNotFoundException

PC: Mono.Data.Sqlite 下载64位

Android平台:下载libsqlite3.so到assets-plugins-android下面

异常:System.InvalidCastException: Specified cast is not valid.

 要解决这个问题:采用Convert.ToInt64既可以解决。 这个convert.to方法为我们提供了快速精确或

将sqlite3_column_int 替换为 sqlite3_column_int64 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AD_喵了个咪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值