2.选择原因
sqlite3不支持WebGL (更改业务逻辑,存到服务端有工作量,只能更改前端存储,webgl用iBoxDB,其它平台用sqlite3)
iBoxDB :JAVA C# AndroID Unity Xamarin Mono Nashorn linux windows 安装简单,unity只需要一个dll即可。Web需要主动调用持久化(例如5分钟调用一次保存,或者当某个页面关闭时保存等等,根据开发者自定义,如果不保存,刷新浏览器 iBoxdb 将没有保存数据)。
Application.ExternalEval("FS.syncfs(false,function (err) {});");
3.简单用法 百度/谷歌也能搜索到一些例子,大都是封装了一个Helper类,我简单补充一些用法。
1.注意变量必须用 ?替代,防止sql注入。 Select("from Email where category == ? & type == ? order by created_at desc,ID desc",1,1);
2.字段数据类型,必须一致。 Class{ int a; long b; } Select("from Email where a == ? & b == ?",(long)1); //需要传long型
3.MysqL in 语句。这个语法数据库不支持,可以翻译成条件判断。 例如: MysqL :where category = 1 AND type in (1,2,3,4) order by create_at desc,ID desc limit 0,10 iBoxDb : var types = new int[]{1,4};
可以写个转化函数:var sql = from Emailwherecategory == ? & MessageTypesstrings(type.Length)order by create_at desc,10 转化后就是:from Email where category == ? & (type == ? | type == ? | type == ? | type == ?) order by create_at desc,10
private string MessageTypestoStrings(int length){ var result = ""; if (length == 0) return result; if (length > 1) { for (var i = 0; i < length - 1; i++) { result += "type==?" + "|"; } } result += "type==?"; return "(" + result + ")"; }多参数问题:
Select(sql,types); 数组这么传参不对,可以转化成 5个参数。 Select(sql,ConvertParams(1,types)); //ok
private object[] ConvertParams(params object[] parameters){ var List = new List<object> (); foreach (var item in parameters) { if (item.GetType () == typeof(int[])) { var items = item as int[]; foreach (var item1 in items) { List.Add ((int)item1); } } else if (item.GetType () == typeof(long[])) { var items = item as long[]; foreach (var item1 in items) { List.Add ((long)item1); } } else { List.Add (item); } } return List.ToArray (); }
4.group by 语法不支持 自己取出数据,然后用linq语句进行筛选。
var sums = from n in queryData group n by new{n.category,n.type} into g select new {Total = g.Count ()};
from n in queryData group n by new {n.category,n.type} into g select g.OrderByDescending (t => t.ID).ThenByDescending (t => t.created_at).FirstOrDefault ()大多数运算 都可以Select DataBase 然后进行 linq逻辑 *** 作。
5.逻辑 *** 作符 Select("from Email where (type == ?) & (reward_time > ? | life_time-?<=?)",1); //支持运算 4.我的helper类
public class iBoxDBHelper { private static iBoxDBHelper _ins; public static iBoxDBHelper ins{ get{ if (null == _ins) { _ins = new iBoxDBHelper (); } return _ins; } } public static string BoxDBEmail = "Email"; private string DBBoxDir{ get{ return Application.persistentDataPath; } } private autoBox m_autoBox = null; private DB m_db; public autoBox Box{ get{ return m_autoBox; } } public voID InitDB(){ CreateDirectory (); if (null == m_autoBox) { DB.Root (DBBoxDir); m_db = new DB (3);//3=自定义数字,在这没有具体意义。 m_db.GetConfig ().Ensuretable<DBEmail> (BoxDBEmail,"ID","category"); m_db.GetConfig ().EnsureIndex<DBEmail> (BoxDBEmail,"created_at","read_at"); m_autoBox = m_db.open(); } } public voID ChangeDB(){ m_db.dispose (); m_autoBox = null; InitDB (); } private voID CreateDirectory () { if(!Directory.Exists (DBBoxDir)) { Directory.CreateDirectory (DBBoxDir); } } public bool Insert(string tablename,DBEmail data){ return _ins.m_autoBox.Insert (tablename,data); } public voID InsertMulti(string tablename,List<DBEmail> data){ using(var Box = _ins.m_autoBox.Cube()) { Binder binder = Box.Bind(tablename); foreach (var item in data) { binder.Insert (item); } Box.Commit (); } } public voID Update(string tablename,object data){ _ins.m_autoBox.Update (tablename,data); } public voID UpdateMulti(string tablename,List<object> data){ using(var Box = _ins.m_autoBox.Cube()) { Binder binder = Box.Bind(tablename); foreach (var item in data) { binder.Update (item); } Box.Commit(); } } public DBEmail Getone(string sql,params object[] param){ var dbEmail = new DBEmail (); var datas = _ins.m_autoBox.Select <DBEmail> (sql,param); foreach (var item in datas) { dbEmail = item; } return dbEmail; } public voID Delete(string tablename,string QL){ _ins.m_autoBox.Delete (tablename,QL); }}总结
以上是内存溢出为你收集整理的Unity WebGL Sqlite3替代方案iBoxDB全部内容,希望文章能够帮你解决Unity WebGL Sqlite3替代方案iBoxDB所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)