unity sqlite笔记

开发环境Unity2018.4 .net4.x

目标平台pc,android

引用库 从Editor\Data\Mono\lib\mono\2.0 导入 Mono.Data.Sqlite.dll (不需要System.Data.dll)

从网上下载sqlite.dll libsqlite3.so 或者https://github.com/feigebabata/unityTools/tree/master/SqliteTool/Plugins

1.链接数据库语句 new SqliteConnection("data source = "+databasePath);//databasePath是数据库文件路径 各平台通用

    IEnumerator Start()
    {
        string databasePath = Path.Combine(Application.persistentDataPath,"main.db");
        if(!File.Exists(databasePath))
        {
            string copyPath = Path.Combine(Application.streamingAssetsPath,"main.db");
            UnityWebRequest uwr = new UnityWebRequest(copyPath);
            uwr.downloadHandler = new DownloadHandlerFile(databasePath);
            yield return uwr.SendWebRequest();
            if(uwr.isHttpError || uwr.isNetworkError)
            {
                log(uwr.error);
            }

        }
        // string databasePath = Path.Combine(Application.streamingAssetsPath,"main.db");
        connection = new SqliteConnection("data source = "+databasePath);
        connection.Open();
        command = connection.CreateCommand();
        Debug.Log(connection.Database);
        // command.CommandText = "insert into Test2(Age,Name) values(66,'baba')";
        // command.ExecuteReader();
        // seletcAllTab();
        yield return null;
    }

2.数据库表总数:string sql = "select count(*) from sqlite_master";

3.表"Test1"是否存在

string sql = "select count(*) from sqlite_master where type='table' and name='Test1'";
command.CommandText = sql;
Debug.Log(command.ExecuteScalar());

4.表创建:"create table 表名(字段1 类型,字段2 类型)"

5.C# Sqlite类型转换  无需转换 这样写也可以: "create table Data2(Name String,ID Int32)"

    string CS2DB(Type type)
    {
        string result = "Text";
        if(type==typeof(Int32))
        {
            result = "Int";
        }
        else if (type == typeof(String))
        {
            result = "Text";
        }
        else if (type == typeof(Single))
        {
            result = "FLOAT";
        }
        else if (type == typeof(Boolean))
        {
            result = "Bool";
        }
        return result;
    }

 

6.删除表"Test2": string sql = "drop table Test2";

7.添加数据:"insert into 表名(字段1,字段2) values(数据1,数据2)"

8.更新数据:"update 表名 set 更新字段1=更新数据1 where 字段2=数据2"

9.删除数据:"delete from 表名 where 字段1=数据2"

10.查询数据:"select * from 表名 where 字段1=数据1"

    void Select(string _table)
    {
        string sql = $"select * from {_table}";
        log(sql);
        command.CommandText = sql;
        reader = command.ExecuteReader();
        StringBuilder vals_sb = new StringBuilder();
        while(reader.Read())
        {
            for (int i = 0; i < reader.FieldCount; i++)
            {
                vals_sb.AppendFormat("{0}:{1},",reader.GetName(i),reader.GetValue(i));
            }
            log(vals_sb.ToString());
            vals_sb.Clear();
        }
        command.Dispose();
    }

 

### Unity 中的文本数据存储方法 在 Unity 开发过程中,有多种方式可以实现文本数据的存储。以下是几种常见的方法: #### 使用 `PlayerPrefs` 进行简单文本存储 对于少量且简单的键值对形式的文本数据,可以直接利用 Unity 提供的 `PlayerPrefs` 类来进行保存和读取操作。该类适用于 int, string, float 等基础类型的持久化存储。 ```csharp // 设置字符串型偏好设置 PlayerPrefs.SetString("UserName", "JohnDoe"); // 获取已存入的字符串型偏好设置 string userName = PlayerPrefs.GetString("UserName"); // 为了使更改生效,在修改后应调用 Save() 方法 PlayerPrefs.Save(); ``` 此方法适合于不需要复杂结构化的场景下的小型应用开发[^2]。 #### 利用 SQLite 数据库进行高级文本管理 当面对更复杂的业务逻辑以及大量结构化信息时,则推荐采用嵌入式的 SQLite 数据库存储方案。这允许创建表单来定义字段并执行 SQL 查询命令完成增删改查等一系列动作;同时还能确保良好的性能表现和支持事务机制以保障数据的一致性和安全性。 ```sql CREATE TABLE IF NOT EXISTS Notes ( id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT NOT NULL ); INSERT INTO Notes (content) VALUES ('这是一个笔记'); SELECT * FROM Notes WHERE id=1; UPDATE Notes SET content='更新后的笔记' WHERE id=1; DELETE FROM Notes WHERE id=1; ``` 这种方式非常适合那些希望构建具有强大后台支撑能力的应用程序的情况[^1][^3]。 #### 文件系统中的纯文本文件写入/读取 如果只是单纯想要把一段文字记录下来而不涉及任何解析工作的话,那么直接往项目资源目录下放置 .txt 或者其他格式的文档也是可行的选择之一。借助 C# 的 IO 流功能即可轻松达成目的。 ```csharp using System.IO; // 将指定的内容追加到文件末尾 File.AppendAllText(Application.persistentDataPath + "/log.txt", "\n新日志条目"); // 一次性加载整个文件内容作为单一字符串返回 string allContent = File.ReadAllText(Application.persistentDataPath + "/log.txt"); ``` 这种做法特别适用于日志记录或是配置项备份等方面的需求[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值