SQLite从下载安装到使用的流程
- !!!一开始的准备工作
- 在Unity里面使用SQLite需要用到3个文件
- 1. 下载安装
- 2. 创建Test表
- 3. Sqlite的增删改查
- 4. 创建项目
- 5. 用Unity来连接SQLite
- 6. 总结
!!!一开始的准备工作
在Unity里面使用SQLite需要用到3个文件
mono.data.sqlite.dll,System.data.dll,sqlite3.dll
- mono.data.sqlite.dll,System.data.dll
这两个文件每个人的Unity版本不一样,需要自己到Unity安装位置下找。
这篇文章使用Unity2021.3.6f1c1版本, 这两个文件在 Unity安装目录\Editor\Data\MonoBleedingEdge\lib\mono\unityjit-win32 可以找到。
其他版本可以百度查找一下对应版本的路径,路径不太一样。找到两个文件后,后续操作是一样的。
- sqlite3.dll 这个文件等会下载安装的时候就有。
1. 下载安装
SQLite数据库的下载地址(第三个文件的下载地址也在这)
- 进去下载地址后往下滑找到 Precompiled Binaries for Windows, 32位和64位的安装包查看电脑系统是32位的还是64位的进行选择。
- 两个压缩包解压出来一共有3个文件(32位和64位都一样),选择一个路径保存好。
- 配置环境变量
3-1. 右键此电脑 - 属性 - 高级系统设置 - 环境变量 - 系统变量下的path
3-2. 点击新建,并将刚刚保存解压后的文件的地址填入,然后点确定
3-3. 按 win+R 输入 cmd , 在命令行窗口输入 sqlite3 , 出现以下窗口即安装完成
- 安装可视化工具,方便创建数据库(SQLiteStudio)
下载地址:https://sqlitestudio.pl/
下载后解压即可使用。
2. 创建Test表
2-1. 打开可视化工具
2-2. 添加数据库
2-3. 添加表和字段
2-4. 添加表数据
3. Sqlite的增删改查
插入全部数据
Insert Into 表名称 Values(值1,值2,值3)插入部分数据
Insert Into 表名称 (字段名称1,字段名称2) Values (值1,值2)修改数据:
Update 表名称 Set 字段名称1=新值 Where 要修改的那一行的某个字段=某个值;查询数据:
Select 字段名称 From 表名称 Where 列名 = 某值 (and/or)删除数据:
Delete From 表名称 Where (条件)
4. 创建项目
3-1. 创建新项目
3-2. 创建文件夹( Plugins 和 StreamingAssets ) 【注】 文件夹名称不能修改
a. 将 一开始准备的三个dll文件 放到 Plugins文件夹
b. 将创建好的数据库文件放到 StreamingAssets文件夹
如果报错 Loading assembly failed “Assets/Plugins/Mono.Data.Sqlite.dll ,说明你的 mono.data.sqlite.dll , System.data.dll 没有找对。
5. 用Unity来连接SQLite
(注意在脚本里的操作都会影响到数据库里的表,记得先备份)
创建Test脚本(挂载在空对象)
需要知道的三个类
// 数据库连接对象,用于打开或关闭数据库连接private SqliteConnection con;// 数据库指令对象,用于编写或执行Sql语句private SqliteCommand command;// 数据库读取对象,用于保存查询多个数据结果的对象private SqliteDataReader reader;
reader对象的常用方法
> reader.GetValue(列数) 获取当前列的值
> reader.GetName(列数) 获取当前列的字段名
> reader.Read() 读取下一行,没有下一行了就返回false
> reader.FieldCount 返回查询到的结果的列数
脚本思路:
- 引入 Mono.Data.Sqlite 库:
using Mono.Data.Sqlite;
- 实例化数据库连接对象:
con = new SqliteConnection(path);
- 打开连接:
con.Open();
- 实例化数据库指令对象:
command = con.CreateCommand();
- 写sql语句:
command.CommandText = "Select * from Test1";
- 执行sql语句(3种方法)
第一种:ExecuteNonQuery()
作用:执⾏SQL语句,并返回受影响的⾏
使⽤范围:增删改
第二种: ExecuteScalar()
作用: 返回第一行第一列的数据
使用范围: 查询单个数据
第三种: ExecuteReader() 需要 数据库读取对象
作用: 返回查询到的结果
使用范围: 查询多个数据
- 关闭连接:
con.Close();
- 释放指令对象:
command.Dispose();
- 关闭读取对象:
reader.Close();
- 具体脚本内容
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mono.Data.Sqlite;public class Test : MonoBehaviour
{[Header("数据库名称")]public string dbFileName = "Test.db";// 数据库路径private string path;// 数据库连接对象private SqliteConnection con;// 数据库指令对象private SqliteCommand command;// 数据库读取对象private SqliteDataReader reader;private void Start(){// 在编辑器和window(打包)的路径是一样的path = "data source=" + Application.streamingAssetsPath + "/" + dbFileName;// 实例化数据库连接对象con = new SqliteConnection(path);// 打开连接con.Open();// 实例化数据库指令对象command = con.CreateCommand();#region 执行sql语句(3种执行方法)// 第一种执行方法command.CommandText = "Select * from Test1"; // 写sql语句object val = command.ExecuteNonQuery(); // 执行sql语句Debug.Log(val); // 由于查的操作没有影响到行数,所以返回的是0// 第二种执行方法command.CommandText = "Select * from Test1"; // 写sql语句val = command.ExecuteScalar(); // 执行sql语句Debug.Log(val); // 第一行第一列的结果是 1// 第三种执行方法command.CommandText = "Select * from Test1"; // 写sql语句reader = command.ExecuteReader(); // 读取对象接收返回结果// 读取下一行,没有下一行了就跳出循环while (reader.Read()){// 用字符串来打印一列数据的结果string str = "";for(int i = 0; i < reader.FieldCount; i++){// 将当前的列的值一个一个加到字符串str += reader.GetValue(i);str += "\t";}// 打印结果Debug.Log(str);}#endregion}private void OnDestroy(){// 释放conif(con != null){con.Close();}// 释放commandif (command != null){command.Dispose();}// 释放readerif(reader != null){reader.Close();}}}
代码运行结果对比
6. 总结
- 不要找错 mono.data.sqlite.dll,System.data.dll。
- 注意三个执行语句的不同效果。
- 记得销毁对象时释放掉 数据库连接对象, 数据库指令对象,数据库读取对象(否则听说会丢数据)。