Unity2020 使用SQLite(添/删/改/查) (保姆级)
资源下载
项目资源
Unity版本 Unity 2020.3.26f1c1
VS版本 Visual Studio 2019
dll扩展文件
SQLiteScript文件夹
可视化窗口
使用可视化窗口
存放到Plugins文件夹
下载好dll扩展文件和SQLiteScript文件夹后,
先把Mono.Data 和Mono.Data.Sqlite 和sqlite3 和 libsqlite3 放到 Assets/Plugins文件夹中
并且把SQLiteScript文件夹也拖拽到Assets当中
如下图
使用SQLite 数据库(添/删/改/查)
Getdb方法实现 注意:SQLiteHelper填写的数据库路径一定是要在StreamingAssets文件当中 路径不需要写.db文件名后缀
如下图
private void Getdb(Action<DbAccess> action)
{
//Path数据库文件,一定是StreamingAssets文件夹下 填写的路径文件不需要填写.db后缀
//创建数据库读取类
SQLiteHelper helper = new SQLiteHelper(Path);
//打开数据库 存储数据库操作类
using (var db = helper.Open())
{
//调用数据库委托
action(db);
}
/*
因为每次使用数据 添/删/改/查 都需要使用完后Close掉
重复代码,写无数次太麻烦 因为数据库操作类 继承了IDisposable接口 所以,
using会自动关闭数据库连接,我们无需手动关闭数据库
*/
}
如果不使用using块套住数据库操作类 需要手动 打开 和关闭数据库
private void Getdb2(Action<DbAccess> action)
{
//创建数据库读取类
SQLiteHelper helper = new SQLiteHelper(Path);
//打开数据库 存储数据库操作类
var db = helper.Open();
//调用数据库委托
action(db);
//关闭数据库
db.CloseSqlConnection();
}
SQLite类型列表
SQLite类型转换表 注意:SQLite类型全都是大写
SQLite类型 对应 C#数据类型
TINYINT Byte -->byte
INT Int32 -->int
INTEGER Int64 -->long
SINGLE Single -->float
DECIMAL Decimal -->decimal
BIT Boolean -->bool
BOOLEAN Boolean -->bool
注意:bool类型 只能存储 0-1 到数据库中 (0)false (1) true
DOUBLE Double -->double (首选)
REAL Double -->double
NVARCHAR String -->string
STRING String -->string (首选)
TEXT String -->string 文本字符串,存储使用的编码方式为UTF-8、UTF-16BE、UTF-16LE
TIME DateTime
DATETIME DateTime (首选)
生成时间字符串代码:
DateTime.Now.ToString("s");
数据库存储格式
注意:DataTime 存储数据库的格式:"s"
DateTime.Now.ToString("s");
注意 bool类型存储格式为 0-1
0 代表false 1 代表是true
创建表
需求创建一个表名 为UserInfo
字段名称 UID User Password LoginTime 对应的C#类型 是
long string string DateTime 代码如下
//创建一个表方法 创建表名UserInfo
//字段名称 UID 类型为 INTEGER
// User Password 类型为STRING
//将LoginTime 类型 设置为DATETIME
Getdb(db => db.CreateTable("UserInfo", new[] {
"UID", "User", "Password", "LoginTime" },
new[] {
"INTEGER", "STRING", "STRING", "DATETIME" }));
插入
需求给对应字段插入数据 分别为 5201314 imdork 142536 当前本地时间 代码如下
//插入字段为 UID / User/ Password / LoginTime
//对应数据 5201314 imdork 142536 本地时间
//生成时间字符串代码:
//DateTime.Now.ToString("s")
Getdb(db => db.InsertIntoSpecific("UserInfo", new[] {
"UID", "User", "Password","LoginTime" }
, new [] {
"5201314", "imdork", "142536", DateTime.Now.ToString("s") }));
查询
需求查询数据UID 大于50 对应User 字段的数据 和LoginTime 时间对应数据 代码如下:
//调用Getdb方法
Getdb(db =>
{
//查询该账号UID 大于50 对应的 LoginTime 和 User 对应字段数据
var reader = db.SelectWhere("UserInfo", new[] {
"User","LoginTime" },
new[] {
"UID" }, new[] {
">" }, new[] {
"50" });
//调用SQLite工具 解析对应数据
Dictionary<string, object> pairs = SQLiteTools.GetValue(reader);
//获取User字段 对应数据
print("User账号是:" + pairs["User"]);
//获取账号登录时间
print("LoginTime登录时间是:" + pairs["LoginTime"]);
});
最后打印结果
根据条件查询当行所有字段
Getdb(obj =>
{
var reader = obj.SelectsWhere("UserInfo",
new[] {
"UID", "User" }, new[] {
">", "=" }, new[] {
"50", "imdork" });
var keys = SQLiteTools.GetValue(reader);
foreach (var item in keys)
{
//打印数据库字段名称 对应字段数值
print("数据库字段名为:" + item.Key + " 对应数据值为:" + item.Value);
}
}
);
最后打印
查询数据库全部数据
需求:查询表中全部数据 并打印 代码如下:
//调用Getdb方法
Getdb(db =>
{
//读取表的全部数据
var reader = db.ReadFullTable("UserInfo");
//获取全部数据
var pairs = SQLiteTools.GetValues(reader);
//遍历字典数组
for (int i = 0; i < pairs.Length; i++)
{
//遍历字典
foreach (var item in pairs[i])
{
//打印数据库字段名称 对应字段数值
print("数据库字段名为:" + item.Key + " 对应数据值为:" + item.Value);
}
}
});
最后控制台输出结果如下:
注意:使用SQLiteTools类 来解析数据时
解析单行数据 用GetValue方法 ,解析多行数据就要使用 GetValues方法
还有查询bool只能使用以下办法如下方代码
//查询全部数据
var reader = db.ReadFullTable("表名");
//读取下一行数据 第一次调用则 读取数据库第一行数据
while (SQLiteTools.Read(reader))
{
bool value = SQLiteTools.GetValue(reader, "字段名", i => reader.GetBoolean(i));
}