Unity链接Sqlite数据库

一、SQLiteManager

SQLiteManager是一个支持多国语言基于Web的SQLite数据库管理工具。它的特点包括多数据库管理,创建和连接;表格,数据,索引操作;视图,触发器,和自定义函数管理。数据导入/导出;数据库结构导出。

安装SQLiteManager

在SVN的目录下 _EXAMPLE\md\170614_Unity_ Database\Tools\

SQLiteManager的使用:

打开SQLiteManager,新建一个数据库,文件格式为*.sqlite,最终要放在Unity编辑器的StreamingAssets目录 Unity特殊文件夹的说明

数据库文件在各平台的路径

--TIP:安卓平台把打出的包.apk 改为.zip格式,解压出来,会在 asset/下找到 数据库文件


OD5WRTDZ_2)PNNRF58S_Y0E.png

二、SQL语法:

深入研究参考网址

基础语句(主要用到的是第10 个,有些在SQLiteManager里就可以提前操作)

1、创建数据库(create)
CREATE DATABASE database-name
create table if not exist students (ID integer, name text);
2、删除数据库(drop)
drop database dbname
drop table teachers;
3、备份sql server (backup)
— 创建 备份数据的 device
USE master
EXEC sp_addumpdevice ‘disk’, ‘testBack’, ‘c:\mssql7backup\MyNwind_1.dat’
— 开始 备份
BACKUP DATABASE pubs TO testBack
4、创建新表(create)
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、删除新表(drop)
drop table tabname
6、增加一个列(alter...column)
Alter table tabname add column col type
注:列增加后将不能删除。
DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、添加主键(alter)
Alter table tabname add primary key(col)
删除主键(alter)
Alter table tabname drop primary key(col)
8、创建索引
create [unique] index idxname on tabname(col….)
删除索引
drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、创建视图
create view viewname as select statement
删除视图
drop view viewname
10、几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2)values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like’%value1%’ —like的语法很精妙,查资料!
排序:select @ from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1

三、Unity编辑器里的准备

(在demo工程里都有)
Unity编辑器Plugins下需要的库:
Mono.Data.Sqlite.dll
sqlite3.dll
System.Data.dll
Android平台需要 Plugins/Android/libsqlite3.so
StreamingAssets/在SQLiteManager 里创建的数据库名称.sqlite

四、封装数据库连接的工具DataBaseTool

例子里的DataBaseTool脚本
(1)创建数据库连接。
(2)打开数据库连接
(3)创建Command对象并设置sql语句
(4)调用ExecuteNonQuery ExecuteReader方法,执行sql语句并获得结果
(5)关闭连接。

五、使用上述工具类进行数据操作

参见例子demo里的 DataTest脚本

using UnityEngine;
using System.Collections.Generic;
using LitJson;
using UnityEngine.UI;
using System.IO;
public class DataTest : MonoBehaviour
{
  List<Dictionary<string, object>> result;
  string database_Name;
  string sql;
  void Start()
  {
    //StreamingAssets目录下的数据库文件
    database_Name = "mydatabase.sqlite";
    //这个地方可以连着写sql语句,用分号隔开,这样数据库连接就只用走一次
    sql = "insert into Player values('qaq','1001','24');delete from Player where Name='wangwu' ;select * from Player ";
    result = DataBaseTool.GetInstance(database_Name).ExcuteAllRresult(sql);
}

六、总结

DataBaseTool进行了简化

核心public List<Dictionary<string, object>> ExcuteAllRresult(string sql){}
构造方法private DataBaseTool(string databaseName){}
Android平台得注意数据库的路径public string AndriodPaltformSet(string databaseName){}

一些问题

1.数据库不要实时更新,多用于存档
2.设计表的时候空值的问题,查找的结果不会报错,在SQLiteManager里看到为NULL
3.其他关于中途数据库断开连接的问题,可以自行尝试,这些异常都会在 SqliteException 类里抛出 参考Try...Catch...的使用

在Unity中链接SQLite小型数据库有其独特的优缺点,以下是一个详细的分析:

优点
轻量级:

SQLite是一个轻量级的嵌入式数据库,不需要独立的服务器进程,非常适合小型项目和单机游戏。
简单易用:

SQLite使用简单,易于操作,使用SQL语句进行查询、插入、更新和删除,这对于有SQL基础的开发者非常友好。
无须配置:

不需要额外的数据库服务器配置,减少了开发和维护的复杂度。只需将数据库文件放入项目中即可使用。
便于数据存储与访问:

适合存储游戏状态、设置、用户数据等,方便进行数据的持久化存储和访问。
跨平台:

SQLite可以在多种平台上运行,包括Windows、macOS、Android和iOS,因此便于跨平台游戏开发。
事务支持:

支持ACID(原子性、一致性、隔离性、持久性)事务,能够保证数据的完整性和一致性。

缺点
性能限制:

SQLite在处理大数据量时性能有限,不适合频繁的写操作,尤其在高并发场景下性能较差。
多用户支持有限:

SQLite适合单用户或少量用户操作,不支持复杂的并发环境,可能导致数据冲突。
功能有限:

相较于其他数据库(如MySQL、PostgreSQL),SQLite的功能较为简单,不支持存储过程、触发器等高级特性。
数据安全性:

SQLite的安全机制相对简单,不支持复杂的用户权限管理,适合低安全需求的应用。
不适合网络应用:

不适用于需要网络访问的实时多人游戏,因为它是一个嵌入式数据库,需要在本地存储。
总结
在Unity中使用SQLite小型数据库非常适合开发单机、轻量级或跨平台的游戏项目,能够提供便捷的数据存储和管理能力。然而,开发者需要注意其性能和并发限制,并在合适的场景中选择使用。对于需要高并发和复杂数据处理的应用,可能需要考虑其他类型的数据库解决方案。

性能分析

在Unity项目中链接数据库的做法可以带来多种影响,包括性能方面。以下是一些主要的分析点:

  1. 数据库类型和选择
    SQLite:适合客户端存储小型数据,可以脱离网络独立运行,适合单机游戏。
    在线数据库(如MySQL或PostgreSQL):适合需要多人在线实时交互的游戏,但需要网络连接。
  2. 连接开销
    每次连接数据库都需要时间,尤其是在线数据库。频繁的连接、断开会增加延迟,影响游戏体验。
    解决方案:使用连接池技术,保持固定数量的数据库连接,可以减少重复连接带来的开销。
  3. 数据读取与写入
    读取和写入数据库的操作比内存操作要慢。每次查询或更新都需要IO操作,可能导致帧率降低或延迟增大。
    解决方案:将数据库操作放在异步线程中进行,避免阻塞主线程。同时,考虑使用缓存机制,减少数据库访问频率。
  4. 数据量与复杂度
    大量复杂的查询(如多表连接、嵌套查询等)会对CPU造成负担,并潜在引发性能下降。
    解决方案:简化查询逻辑,减少数据复杂性;使用合适的索引来加快查询速度。
  5. 操作频率
    高频率的数据库操作(例如每帧都查询数据库)会导致性能下降。
    解决方案:仅在必要时(如状态变化时)进行数据库操作,避免每帧调用。
  6. 数据安全与稳定性
    需要处理数据库的异常和错误,确保数据一致性。这可能增加开发工作量,但对于性能影响相对较小。
  7. 数据备份与更新
    大数据量的备份与更新操作也会影响性能。建议在玩家不活跃的时候(如菜单界面)进行这些操作。
    总结
    综上所述,在Unity中使用数据库能提高数据管理的灵活性和效果,但不当的使用方式会影响性能。通过优化连接方式、合理使用异步处理、减少数据库访问频率、简化查询以及使用缓存,可以有效缓解性能问题。在设计数据库交互时,需权衡数据需求与性能之间的关系。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容