2025年3月23日 星期日 甲辰(龙)年 月廿二 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Unity 3D

在Unity工程中使用SQLite数据库

时间:04-11来源:作者:点击数:56

1、Presentation——介绍

一、为什么要使用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等

二、有没有一款好用的插件能让我直接在Unity中使用SQLite呢?

当然有!本篇文章就是介绍一个可以在Unity中直接使用SQLite的插件

下载地址

https://github.com/robertohuertasm/SQLite4Unity3d

2、Use——使用

首先解压下载好的插件包,将SQLite.cs放在工程里,sqlite3.dll放在工程的Plugins文件夹中,没有的话创建一个

在这里插入图片描述

如此,我们就可以在Unity中对SQLite数据库进行操作了


2.1 CreateDatabase——创建数据库

首先创建一个脚本,引用SQLite4Unity3d,定义一个数据库连接字段

  • /// <summary>
  • /// 数据库连接
  • /// </summary>
  • public SQLiteConnection Connection;
  • void Start()
  • {
  • //参数1.数据库地址,一般放在StreamingAssets文件夹中,2.开启读写和创建数据库权限
  • Connection = new SQLiteConnection(Application.streamingAssetsPath+ "/TestDatabase.db",SQLiteOpenFlags.ReadWrite| SQLiteOpenFlags.Create);
  • }

在场景中创建一个空物体,将脚本挂载上去点击运行

在工程的StreamingAssets文件夹中就可以看到我们创建出来的数据库

在这里插入图片描述

2.2 CreateTable——创建表

如何创建一张表呢?

首先我们要创建一个表的信息类脚本,里面需要包含表里所需的数据

举个例子
  • using SQLite4Unity3d;
  • public class TestTable
  • {
  • [PrimaryKey, AutoIncrement] //设置主键 自动增长
  • public int Id { get; set; }//Id作为主键
  • public string Name { get; set; }
  • public int Age { get; set; }
  • public float Height { get; set; }
  • public float Weight { get; set; }
  • /// <summary>
  • /// 重写ToString函数,方便控制台打印
  • /// </summary>
  • /// <returns></returns>
  • public override string ToString()
  • {
  • return string.Format("[Person: Id={0}, Name={1}, Age={2}, Height={3}],Weight={4}]", Id, Name, Age, Height, Weight);
  • }
  • }

然后在我们的控制脚本里创建这个表

  • void Start()
  • {
  • Connection = new SQLiteConnection(Application.streamingAssetsPath+ "/TestDatabase.db",SQLiteOpenFlags.ReadWrite| SQLiteOpenFlags.Create);
  • Connection.CreateTable<TestTable>();//创建表
  • }

运行工程


2.3 ConnectionTable——连接表

我们使用Navicat Premium来连接我们的数据库,方便我们查看对表做出的更改

首先点击连接,选择SQLite

在这里插入图片描述
在这里插入图片描述

点击确定连接数据库

在这里插入图片描述

2.4 InsertData——增加数据

插件作者封装了几个方法,可以让我们方便的对数据库进行插入操作

单个的数据插入

  • void InsertData()
  • {
  • var p = new TestTable
  • {
  • Id = 1,
  • Name = "Chinar",
  • Age = 999,
  • Height = 180.5f,
  • Weight = 140.3f
  • };
  • Connection.Insert(p);
  • }

我们在Start函数中调用一下,运行工程后在表中可以看到新增数据

在这里插入图片描述

可以看到在Weight列中的数据精度有所丢失,这是数据库本身造成的,

解决方案就是将float类型的数据转为string类型保存下来,使用的时候再转回float

多个数据插入,由于设置了ID为主键并且自增,所以可以不给ID赋值

  • void InsertData()
  • {
  • Connection.InsertAll(new[] //插入一个数组,数组里是多条数据
  • {
  • new TestTable
  • {
  • Name = "小明",
  • Age = 12,
  • Height = 130.3f,
  • Weight = 100.2f
  • },
  • new TestTable
  • {
  • Name = "老皮",
  • Age = 12,
  • Height = 133f,
  • Weight = 96.2f
  • },
  • new TestTable
  • {
  • Name = "狗子",
  • Age = 12,
  • Height = 140f,
  • Weight = 120.2f
  • },
  • new TestTable
  • {
  • Name = "刚子",
  • Age = 13,
  • Height = 135f,
  • Weight = 85.6f
  • },
  • new TestTable
  • {
  • Name = "阿豪",
  • Age = 13,
  • Height = 123.4f,
  • Weight = 99f
  • },
  • });
  • }

运行工程后查看表

在这里插入图片描述

2.5 DeleteData——删除数据

下面介绍对表中数据的删除操作

一、查找准确数据删除

  • //首先查找到名字为小明的那一条数据,然后将其删除
  • var data = Connection.Table<TestTable>().Where(_ => _.Name == "小明").FirstOrDefault();
  • Connection.Delete(data);//删除

然后运行工程查看表

在这里插入图片描述

可以看到 “小明” 已经被删除了,也就是ID为2的那一条数据被删掉了

一、删除主键

  • //删除主键为3的数据
  • Connection.Delete<TestTable>(3);
在这里插入图片描述

可以看到 “老皮”也被删除了


2.6 UpdateData——更新数据

更新数据和删除数据的使用方法一致

先获得数据信息,然后进行更新

  • //获取到名字为“小明”的数据
  • var data = Connection.Table<TestTable>().Where(_ => _.Name == "小明").FirstOrDefault();
  • //更改 Weight
  • data.Weight = 200f;
  • //更新数据
  • Connection.Update(data);

我们将“小明”的Weight值改为200

在这里插入图片描述

这里注意一下,如果没有设置主键的话会更新失败


2.7 SelectData——查找数据

查找数据就简单多了,像刚刚我们获取数据的方法是一种查找,用来查找一条数据

还有另外一种查找,查找多条数据,例如:所有Age为12的数据,打印出名字

  • var datas = Connection.Table<TestTable>().Where(_=>_.Age == 12);//获取到所有Age为12的数据
  • foreach (var v in datas)//遍历
  • {
  • Debug.Log(v.Name);
  • }

结果如下

在这里插入图片描述

以上就是SQLite在Unity中的简单应用,更多功能等你发现

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门