• Unity 使用Sqlite


    我看网上都在讲引用sqlite3.dll,Mono.Data.Sqlite.dll,System.Data.dll,比如Setup Database (SQLite) for Unity
    或者第三方的一些导入方式unity-3rdparty-sqlite-net
    或者通过第三方包管理工具导入Unity3D 入门:如何管理 Unity 项目中的 NuGet 包?使用第三方 NuGet 包管理器——NuGetForUnity
    但我发现Unity有关于Sqlite的库Unity.VisualScripting.Dependencies.Sqlite.SQLiteConnection,资料有Unity.VisualScripting.Dependencies.Sqlite.SQLiteConnection
    所以我就简单做了个增删改查的demo,Unity.VisualScripting.Dependencies.Sqlite.SQLiteConnection可以直接使用,可以完成对Sqlite的操作
    下面是关键代码
    创建表

    using (var db = new SQLiteConnection(databasePath, SQLiteOpenFlags.ReadWrite))
    {
        var count = db.CreateTable<UserInfo>();
        count = db.CreateTable<RandomEvent>();
    }
    

    增加数据

    using (var db = new SQLiteConnection(databasePath, SQLiteOpenFlags.ReadWrite))
    {
        var count = db.Insert(new UserInfo()
        {
            Name = "test1Name",
            Sex = SexEnum.Woman,
            Birthday = new DateTime(1990, 10, 2)
        }, typeof(UserInfo));
        List<UserInfo> users = new List<UserInfo>();
        users.Add(new UserInfo()
        {
            Name = "test2Name",
            Sex = SexEnum.Man,
            Birthday = new DateTime(2000, 10, 2)
        });
        users.Add(new UserInfo()
        {
            Name = "test3Name",
            Sex = SexEnum.Woman,
            Birthday = new DateTime(2004, 10, 2)
        });
        count = db.InsertAll(users, typeof(UserInfo));
    }
    

    修改数据

    using (var db = new SQLiteConnection(databasePath, SQLiteOpenFlags.ReadWrite))
    {
        var count = db.Update(new UserInfo()
        {
            Id = 3,
            Name = "test1Name-Update",
            Sex = SexEnum.Woman,
            Birthday = new DateTime(1990, 10, 2)
        }, typeof(UserInfo));
    }
    

    删除数据

    using (var db = new SQLiteConnection(databasePath, SQLiteOpenFlags.ReadWrite))
    {
        string sql = "select Id,Name,Sex,Birthday from UserInfo where Id =3";
        var data = new object[] { "Id", "Name", "Sex", "Birthday" };
        var deleteData = db.Query(new TableMapping(typeof(UserInfo)), sql, data).FirstOrDefault();
        if (deleteData != null)
        {
            var count = db.Delete(deleteData);
        }
    
        var count2 = db.Delete<UserInfo>(4);
    }
    

    查询数据

    using (var db = new SQLiteConnection(databasePath, SQLiteOpenFlags.ReadWrite))
    {
        string sql = "select Id,Question,[Order] from RandomEvent";
        var data = new object[] { "Id", "Question", "[Order]" };
        var datas = db.Query(new TableMapping(typeof(RandomEvent)), sql, data);
    
        //enum not work :(
        //var datas2 = db.Find<UserInfo>(user => user.Name.Contains("test"));
        var datas2 = db.Find<RandomEvent>(randomEvent => randomEvent.Question.Contains("q"));
    
        var data3 = db.Get<UserInfo>(1);
    }
    

    数据表需要做声明

    [Table(name: nameof(RandomEvent))]
    public class RandomEvent
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }
        public string Question { get; set; }
        public int Order { get; set; }
    }
    
    [Table(name: nameof(UserInfo))]
    public class UserInfo
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }
        public string Name { get; set; }
        public SexEnum Sex { get; set; }
        public DateTime Birthday { get; set; }
    }
    

    示例代码

    TestSqliteScript
    打开项目后,在TestSqliteCanvas下即可执行

    如果觉得有不合适的地方,可以自己再封装一层~

  • 相关阅读:
    SpringMVC的自定义校验器
    Spring 国际化 异常:No message found under code 'message' for locale 'zh_CN'.
    《Redis实战》学习实践
    博客系统开发问题
    牛人博客
    Lambda表达式
    红黑树
    配置mysql的主从复制
    mysql 存储过程入门
    一个稍复杂的mysql存储过程
  • 原文地址:https://www.cnblogs.com/Lulus/p/16414538.html
Copyright © 2020-2023  润新知