为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 数据库 正文

「技术分享」Unity使用SQLite数据库存储本地数据

三叶资源网 2022-08-25 21:18:50 数据库 258 ℃ 0 评论

前言

  • 单机游戏开发过程中,一款高效便捷的本地数据存储库一定是必不可少的。今天介绍unity结合SQLite数据库来完成本地数据的存储。

开发环境

  • 引擎:Unity 2018.4.16f1
  • 插件:sqlitekit

SQLite的优势

  • SQLite是一种嵌入式数据库,它的数据库就是一个文件。
  • 基于sqlitekit可实现跨平台本地数据存储,不用过多考虑跨平台问题
  • 基于sqlitekit可实现数据加密存储,能有效的提高本地数据的安全
  • 实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎

相关逻辑及关键代码

  • 创建db库文件:在编辑器模式下创建属于自己工程的db库文件,将其放入StreamingAssets文件夹下,便于后续开发以及打包对应平台后将库文件移植到对应平台的可读可写文件夹下。
     	  SQLiteDB sqLiteDb = new SQLiteDB();
        string filename = Application.streamingAssetsPath + "/gameSql.db";
        if (System.IO.File.Exists(filename))
        {
            System.IO.File.Delete(filename);
        }
        sqLiteDb.Open(filename);
  • 创建数据表:根据需求创建一张用于存储数据的表单,创建成功后相应的数据就可通过增删改查来修改表内的数据内容了。
        //id INTEGER PRIMARY KEY设置自增Id,DataKey BIGINT, Data BLOB,Size INT表示 字段名称 字段类型,字段名称 字段类型,字段名称 字段类型
				string query_create = #34;{CREATE TABLE IF NOT EXISTS}{表名}(id INTEGER PRIMARY KEY, DataKey BIGINT, Data BLOB,Size INT);";
        SQLiteQuery query = new SQLiteQuery(sqLiteDb, password);

        query.Step();
        query.Release();
        query = new SQLiteQuery(sqLiteDb, queryCreate);
        query.Step();
        query.Release();
  • 数据表内插入数据:向已经创建好的表内插入一行新的数据
        string data = "需要存储的数据";
				long id
				string queryInsert = #34;INSERT INTO{tableName} (DataKey,Data) VALUES(?,?);";
        SQLiteQuery query = new SQLiteQuery(sqLiteDb, password);
        query.Step();
        query.Release();
        query = new SQLiteQuery(sqLiteDb, queryInsert);
        query.Bind(id);
        query.Bind(data);
        query.Step();
        query.Release();
        netData.OnRecycling();
  • 更新数据表内已有的数据:表内已有存储好的数据,对其数据进行更新修改
        long id = 存储数据的key值
				string data = "需要存储的数据";       
				string query_update = #34;UPDATE {表名} SET Data = ? WHERE DataKey = ?;";//
        SQLiteQuery query = new SQLiteQuery(sqLiteDb, password);
        query.Step();
        query.Release();
        query = new SQLiteQuery(sqLiteDb, query_update);
        query.Bind(data);
        query.Bind(id);
        query.Step();
        query.Release();
  • 查找数据表内的数据:查询数据表内的数据内容,未查询到数据时返回空数据
				string value = string.Empty;
				long id = 存储数据的key值
			  //若删除 WHERE DataKey = ?将查询整张表内的数据
				string query_select = #34;SELECT * FROM {表名} WHERE DataKey = ?;";
        SQLiteQuery query = new SQLiteQuery(sqLiteDb, password);
        query.Step();
        query.Release();
        query = new SQLiteQuery(sqLiteDb, query_select);
        query.Bind(id);
        if (query.Step())
        {
            value = query.GetBlob("Data");
        }
        query.Release();
  • 删除数据表内的数据:将数据表内的数据删除掉(删除有风险,谨防删库跑路事件发送)。
        long id = 存储数据的key值
				//若删除 WHERE DataKey = ?将删除整张表内的数据
				string query_delete = #34;DELETE FROM {表名} WHERE DataKey = ?;";
        SQLiteQuery query = new SQLiteQuery(sqLiteDb, password);
        query.Step();
        query.Release();
        query = new SQLiteQuery(sqLiteDb, query_delete);
        query.Bind(id);
        query.Step();
        query.Release();
  • 关闭数据数据库:退出程序时记得将数据库关闭释放
sqLiteDb.Close();
  • 打包后安卓和ios移动平台需要将db文件放入可读可写文件夹下
        string outFile =  string.Empty;
#if UNITY_ANDROID
        outFile = Application.persistentDataPath + "/gameSql.db";
#elif UNITY_IPHONE
        outFile = "file://" + Application.persistentDataPath + "/gameSql.db";
#endif
        string resPath = Application.streamingAssetsPath + "/gameSql.db";
        if (File.Exists(outFile)) File.Delete(outFile);
        UnityWebRequest request = UnityWebRequest.Get(resPath);
        request.timeout = 30;
        yield return request.SendWebRequest();
				System.IO.File.WriteAllBytes(outFile,request.downloadHandler.data);

结束语

  • 灵活运用sqlitekit能使自己的本地数据存储更加便利,后续会介绍sqlitekit和protobuf结合在Unity中的使用。

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
接口播音喇叭QQ达人BitBlt汇编版TGP登录协议迅雷Aplayer引擎WonderWall编码转换类动态特效防OD附加源码文本颜色QQ收发消息微信图片数据解密自定义数据类型剖析登录源码MP3播放器定时任务扩展库零基础学注册机CHM帮助文档域名转发
最新评论