Unity3D开发之轻型数据库-Sqlite


在做各种小游戏或者小考试系统时都离不开姓名、成绩的记录统计。在我们对于数据简单操作的前提下,我们都希望用一些简单的不用安装数据库客户端的轻型数据库。sqlite就是我认为的一种对数据操作要求不高的一种轻型简易数据库。下面来介绍下。
网上有很多SQLiteHelper类,应该是有宣雨松大神写的,然后被很多人转载复制,那个脚本我就不上传了。自行百度。说下我在做项目时遇到的问题。
首先,肯定是将Mono.Data.Sqlite.dll和SQLite3.dll拖到Plugins文件下,如果没有,自己新建个。如果没有SQLite3.dll。去百度下载个。
然后是新建数据库。 我们看到网上大部分直接新建一个数据库,
new SQLiteHelper("data source=dbName"),
我们很多人应该都想去设定数据库位置吧。想指定数据库的位置如:
Application.streamingAssetsPath + "/" + dbName;
这个问题困扰了我一上午,一直不断测试,一直出现BUG。后来仔细阅读宣雨松大大的博客才发现是自己的大意造成了我的错误。我声明dbPath=Application.streamingAssetsPath + "/"+dbName;然后声明string sqlCon = @"data source=" + dbPath;注意前面一定要加转义符,不然是会报错的。就这个东西让我折腾了一下午,可气。
通过sqlitehelper类,我们使用他写好的函数连接数据库。
new SQLiteHelper(sql)。
好了,数据库可以顺利打开了。
接下来就是插入删除的操作了,去网上看就可以了。 还有一个就是在插入的时候,宣雨松的博客重点强调在字符串上要加单引号('JayW'),确实,不加数据无法插入进去。比如我们在程序中获取到名字变量_name,在我们插入时,一定要注意书写格式,如下:"'"+_name+ "'",这里也是因为我的大意浪费了我两三个小时。真是彪。我还遇到个问题,就是在做排行榜时,100分是在80分之下,是因为我把分数列的数据格式设置为TEXT了。建议在使用的排序的列使用int或者其他数字格式这样就可以顺利实现排行榜,这个同样适用其他数据库如oracle。
好了,其他的数据操作就没有什么了。去百度下有很多教程。
补充:昨天把做好的客户端放到公司楼下展厅发现无法读取数据库。后来发现电脑是32位的,而我之前开发测试都是用64位开发测试的。所以可以估计出是电脑dll不被32位系统兼容的问题。然后从网上下载了一个32位sqlite32放入到Plugins文件下替换原有的64位。好了程序可以顺利运行了。 
之前还遇到一个问题,就是生成的客户端放到我们组长的电脑一个比较深的文件里,可是在数据保存那一步卡住了。电脑系统什么的都没有问题。后来发现是存放客户端的父文件夹名字含有特殊字符,什么~!@这种的导致 Application.persistentDataPath 路径不能被识别。这是c#环境的通病,需要注意下。
晚上又翻了一下之前之前的项目,当时做的安卓app数据需要保存到本地,用的也是sqlite数据库,当时是费尽九牛二虎之力给调通了。原项目代码在安卓环境时跟pc的不同。主要是打开数据库的字符串不一样。同样先声明string appDBPath = Application.persistentDataPath  + "/SB.db";然后再声明传入sqlhelp类里的字符串 string sql="URI=file:" + appDBPath。传入到写好的帮助类里就可以打开数据库了。
2017年5月10日补充:
今天项目拿到外面展示又出问题了,还是在数据保存那一步停住了。下午接到消息就一直在查bug,加班加到八点钟才终于搞定,感谢我那热心机智的同事帮我早点解决问题早点下班。展示用到的电脑也是64位操作系统,sqlite3用的也是64位,但是并不能运行。经过不断的测试,我们发现是由于我们使用的unity32位开发导致生成的程序对于sqlite3不兼容。综上两次遇到的问题我们可以总结: 在使用unity32位编译器编译的项目放在没有安装编译环境的windows系统下时,需要使用32位sqlite3才能被很好的支持,而在安装编译环境的windows系统下,64位和32位sqlite3都可以被很好的支持。以上说的是电脑操作系统是64位的。当然如果电脑操作系统是32位的,unity也只能安装32位的,也就是只支持32位dll。可能由于unity以及其编译工具已经布置好了虚拟环境,而在未安装unity以及编译工具的主机上则没有对应虚拟环境,所以还需要对dll版本有严格的控制。因为不是所有演示程序的电脑都安装了unity,所以建议在32位unity开发的项目里放入32位sqlite32dll。保证不会出错。
其实今天有想到放32为sqlite3试试,可是自己总觉得不是这个问题,然后一直僵持了四个多小时,也是有点stupid一根筋。编程路上还有很多未知的bug需要我来解决。希望下次我能大胆尝试。创新的思维才是最可贵的。
注意:使用sqlite数据库导出的exe文件不要放在含有特殊符号的文件夹下,不要放在含有特殊符号的文件夹下,不要放在含有特殊符号的文件夹下,重要的事情说三遍。什么-==这些卡哇伊的符号,sqlite3这个dll无法被有效加载。

0

你可能感兴趣的:(sql)