当前位置:   article > 正文

Unity2020 使用SQLite (添/删/改/查)(保姆级)_sqllite游戏数据库修改

sqllite游戏数据库修改

资源下载

项目资源

Unity版本   Unity 2020.3.26f1c1
VS版本      Visual Studio 2019
  • 1
  • 2

项目下载链接

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会自动关闭数据库连接,我们无需手动关闭数据库
         */
          
    } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

如果不使用using块套住数据库操作类 需要手动 打开 和关闭数据库

    private void Getdb2(Action<DbAccess> action)
    {
   
        //创建数据库读取类
        SQLiteHelper helper = new SQLiteHelper(Path);
        //打开数据库 存储数据库操作类
        var db = helper.Open();
        //调用数据库委托
        action(db);
        //关闭数据库
        db.CloseSqlConnection();

    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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-8UTF-16BE、UTF-16LE
     
     TIME             DateTime
     DATETIME         DateTime (首选)
     生成时间字符串代码:
     DateTime.Now.ToString("s");
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

数据库存储格式

注意:DataTime 存储数据库的格式:"s"

DateTime.Now.ToString("s");
  • 1

注意 bool类型存储格式为 0-1

0 代表false  1  代表是true
  • 1

创建表

需求创建一个表名 为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" }));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

插入

需求给对应字段插入数据 分别为 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") }));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

查询

需求查询数据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"]);

   });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

最后打印结果
在这里插入图片描述

根据条件查询当行所有字段

        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);
                }
            }
            );
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

最后打印
在这里插入图片描述

查询数据库全部数据

在这里插入图片描述
需求:查询表中全部数据 并打印 代码如下:

   //调用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);
              }
        }
   });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

最后控制台输出结果如下:
在这里插入图片描述
注意:使用SQLiteTools类 来解析数据时
解析单行数据 用GetValue方法 ,解析多行数据就要使用 GetValues方法

还有查询bool只能使用以下办法如下方代码

  //查询全部数据
  var reader = db.
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/127156
推荐阅读
相关标签
  

闽ICP备14008679号