Unity3D之SQLite的使用及常见BUG的解决方法
来源:互联网 发布:网络机顶盒如何破解 编辑:程序博客网 时间:2024/06/04 19:01
文章转载: 一、http://blog.csdn.net/perseverancep/article/details/72898486
二、http://blog.csdn.net/qinyuanpei/article/details/46812655#comments
关于如何使用SQLite数据库可以点击上文连接,讲解的非常好!关于开发中遇到的bug我在文章结尾说明一下
一、什么是SQLite?
SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中,以嵌入式作为它的设计目标,它占用资源非常的低,因此适合在嵌入式设备如Android、Ruby on Rails等中使用。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟和C、C++、Ruby、Python、C#、PHP、Java等编程语言相结合。SQLite是一个以文件形式存在的关系型数据库,尽管无法实现分布式和横向扩展,可是作为一个轻量级的嵌入式数据库,它不需要系统提供服务支持,通过SDK直接操作文件避免了对数据库维护的相关事务,从这个角度来讲它是一个出色的数据库。
二、为什么要选择SQLite
好了,在了解了SQLite后,我们来了解下SQLite有哪些让我们心动的特性,或者说我们为什么要选择SQLite,因为在这个世界上我们有太多的数据库可以选择,诸如Oracle、MySQL、SQLServer、DB2、NoSQL、MongoDB等等:
- ACID事务
- 零配置 – 无需安装和管理配置
- 储存在单一磁盘文件中的一个完整的数据库
- 数据库文件可以在不同字节顺序的机器间自由的共享
- 支持数据库大小至2TB
- 足够小, 大致13万行C代码, 4.43M
- 比一些流行的数据库在大部分普通数据库操作要快—SQLite读写效率如此之高,会使用其他数据库的理由是?
- 简单, 轻松的API
- 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定
- 良好注释的源代码, 并且有着90%以上的测试覆盖率
- 独立: 没有额外依赖
- 源码完全的开源, 你可以用于任何用途, 包括出售它
- 支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等
三、Unity3D中的SQLite
在Unity3D中使用SQLite,我们首先要明白这样一件事情,即我们这里的使用的SQLite并非是通常意义上的SQLite.NET,而是经过移植后的Mono.Data.Sqlite。因为Unity3D基于Mono,因此使用移植后的Mono.Data.Sqlite能够减少我们的项目在不同平台上出现各种各样的问题。在Unity3D中使用的SQLite以Mono.Data.Sqlite.dll即动态链接库的形式给出,因此我们需要将这个文件放置在项目目录下的Plugins文件夹中,此外我们需要System.Data.dll或者Mono.Data.dll这两个文件添加到Plugins目录中,因为我们需要的部分数据相关的API或者类都定义在这两个文件当中,这些文件可以从这里直接下载。
PS:博主注意到在网上有使用Mono.Data.SQLiteClient.dll这个库实现在Unity3D操作SQLite数据库的相关文章,博主大概看了下,感觉和使用Mono.Data.Sqlite.dll这个库大同小异,大家喜欢哪个就用哪个吧!哈哈!博主在开源社区找到一个版本库,据说可以同时支持.NET和Mono,如果大家感兴趣欢迎大家去测试啊,哈哈!
在正式开始写代码前,我们首先来回顾下通常情况下数据库读写的基本流程吧!
- 定义数据库连接字符串(ConnectionString)完成数据库连接的构造,建立或者打开一个数据库。
- 定义相关的SQL命令(Command)通过这些命令实现对数据库的增加、删除、更新、读取四种基本功能。
- 在完成各种数据库操作后及时关闭数据库连接,解除对数据库的连接和引用。
SQLite作为一款优秀的数据库,在为其编写数据库相关代码时同样遵循这样的流程,考虑到对数据库的增加、删除、更新、读取四种操作具有类似性和统一性,因此在动手写Unity3D脚本前,首先让我们来编写一个SQLite的辅助类SQLiteHelper.cs。该类代码定义如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
SQLiteHelper类主要实现了数据库、数据表的创建以及数据表中记录的增加、删除、更新、读取四种基本功能。该类最初由国外的Unity3D开发者发布在Unity3D官方论坛,后来经宣雨松使用C#进行重写,我在此基础上进行了完善,再此对两位大神的无私付出表示感谢。这里要说明的有三点:
一、在Unity3D编辑器下生成数据库文件(.db)默认位于和Assets目录同级的位置,即项目的工程文件夹中。我们可以通过修改路径在改变数据库文件的存储位置,具体来讲:
Windows平台:data source=Application.dataPath/数据库名称.db
IOS平台:data source=Application.persistentDataPath/数据库名称.db
Android平台:URL=file:Application.persistentDataPath/数据库名称.db(我想说Android平台就是个奇葩,搞什么特殊化嘛)二、确保Unity3D编辑器中的.NET版本和MonoDevelop中的.NET版本都为2.0版本,在Unity3D中打包导出的程序可能不会保留数据库文件,因此需要手动将数据库文件拷贝到相应的位置,当然更加合理的方案是将数据库文件存放到StreamingAssets文件夹下,然后在第一次加载游戏的时候将数据库文件复制到对应平台上的存放位置。
三、在使用InsertValues方法时请参考SQLite中字段类型与C#中数据类型的对应关系,博主目前测试了int类型和string类型都没有什么问题,更多类型的数据请大家自行测试然后告诉博主测试的结果,如果大家有兴趣扩展这个辅助类的话可以自行去扩展哦,嘿嘿!
好了,千呼万唤始出来的时候到了,下面我们以一个实例来完成今天的项目讲解,因为我们已经定义好了SQLite的辅助类,因此我们可以快速地编写出下面的脚本代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
在上面的代码中我们是在Start方法中创建了数据库和数据表,然而在实际使用中我们需要判断数据库和数据表是否存在,因此如果你使用这段脚本提示错误信息,请确保数据库和数据表是否已经存在。好了,下面的截图展示了程序运行的结果:
作为一个强大的数据库怎么能没有图形化的数据库管理工具呢?所以这里博主向大家推荐一个免安装的小工具SqliteStudio,使用这个工具可以帮助我们方便地管理Sqlite数据库里的数据,这样是不是比较方便呢?哈哈!这个工具可以从这里下载哦!
2015年11月3日更新内容:在不同的平台上数据库的存储位置是不同的,在这里给出一个参考的路径,希望大家在处理移动端的时候注意这些问题啊!
以下内容是开发中遇到的问题和解决方法:一、
1.在Unity里面使用SQLite应用到Android时记住dll文件不能少,
Mono.Data、
Mono.Data.Sqlite、
System.Data 这三个文件放到/Assets/Plugins文件夹下,
并且libsqlite.so文件不能少,放到/Assets/Plugins/Android文件夹下。
如果不是应用在Android上,libsqlite.so可以没有;
2. .dll和.so文件
做项目中如果没有库文件则可以:
Mono.Data.Sqlite.dll
system.Data.dll 报错误!可以去Unity安装路径中找到。不同的unity版本路径不同;
Sqlite3.dll --sqlite官网
Libsqlite3.so ---sqlite官网
二、
发布Android出现问题:如下图所示
解决方法:
API Compati Level API级别 修改为》.NET 2.0
sqlite3 只能应用于64位的系统;如果要32位需要替换此脚本;--- 官方网站找;
三、
Android运行报错:Unable to find sqlite3
解决方法:下载一个libsqlite.so库文件放,放到Unity工程自己建的/Assets/Plugins/Android文件夹中
四、
SQLite编辑查看工具: Navicat for Sqlite
地址:http://download.csdn.net/download/czlong518/10167654
以上内容如有问题欢迎拍砖,沟通交流!
- Unity3D之SQLite的使用及常见BUG的解决方法
- Unity3D之SQLite的使用
- Unity3D+SQLite的使用
- Git使用的一些bug及解决方法
- IE6IE6浏览器有哪些常见的bug及解决方法
- IE浏览器中最常见的一些bug,及解决方法
- Android常见Bug及解决方法
- QQ的bug及解决方法
- 浏览器中常见bug的解决方法
- 关于Unity3D中使用SQLite数据库发生的几种常见错误(适用新手)
- 使用MediaPlayer的一些常见报错及解决方法-1
- 使用 tensorflow 时的常见错误及解决方法
- Android开发常见bug及解决方法 (一)
- 网站后台开发常见BUG及解决方法
- IE6 重复字符的bug及解决方法
- VS2005的小BUG及解决方法
- 遇到的bug及解决方法,持续更新
- 安装oracle遇到的bug及解决方法
- 查找的基本概念
- 架构一直在你身边----致励志成为架构师的人.
- 《Java编程技巧1001条》 第379条 初始化基本类型数组,
- Java并发总结1
- 你完全可以打消SAAS模式建站中的三大顾虑!
- Unity3D之SQLite的使用及常见BUG的解决方法
- Freemarker实例教程
- MySQL开发规范与使用技巧总结
- Android-25种开源炫酷动画框架
- Android事件分发机制
- 子字符串的判断
- hdu1150 Machine Schedule 最小点覆盖
- OpenCV环境下用算法moravec、harris、Shi-Tomasi进行角点检测
- Angualar2 文档