unity怎么引用mysqldata(Unity使用SQLite数据库存储本地数据)

SQLiteDB sqLiteDb = new SQLiteDB(); string Filename = Application.streamingAssetsPath "/gameSql.db"; if (System.IO.File.Exists(filename)) { System.IO.File.Delete(filename); } sqLiteDb.Open(filename);,下面我们就来聊聊关于unity怎么引用mysqldata?接下来我们就一起去了解一下吧!

unity怎么引用mysqldata(Unity使用SQLite数据库存储本地数据)

unity怎么引用mysqldata

前言
  • 单机游戏开发过程中,一款高效便捷的本地数据存储库一定是必不可少的。今天介绍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 = $"{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 = $"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 = $"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 = $"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 = $"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中的使用。
,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页