ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Unity using Sqlite

2022-07-08 23:04:10  阅读:256  来源: 互联网

标签:Sqlite db Unity SQLiteConnection UserInfo new var using public


I see online blogs talking about referencing sqlite3.dll,Mono.Data.Sqlite.dll,System.Data.dll,for example Setup Database (SQLite) for Unity
or using some of the third-party import methods unity-3rdparty-sqlite-net
or importing via third-party package management tools Unity3D 入门:如何管理 Unity 项目中的 NuGet 包?使用第三方 NuGet 包管理器——NuGetForUnity.
But I found out that Unity has libraries for Sqlite. It is Unity.VisualScripting.Dependencies.Sqlite.SQLiteConnection,The information is here:Unity.VisualScripting.Dependencies.Sqlite.SQLiteConnection
So I simply made a demo of inserting, deleting, and querying.
Unity.VisualScripting.Dependencies.Sqlite.SQLiteConnection can use directly without any references, so you can complete the operation of Sqlite.
Here is part of the key code.
Create Table

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

Insert Data

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));
}

Modify Data

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));
}

Delete Data

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);
}

Query Data

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);
}

The data table needs to be declared.

[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; }
}

Sample Code

TestSqliteScript
After opening the project, you can execute it in the scene TestSqliteCanvas.

If you don't feel comfortable using it, you can wrap another layer yourself~

标签:Sqlite,db,Unity,SQLiteConnection,UserInfo,new,var,using,public
来源: https://www.cnblogs.com/Lulus/p/16459845.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有