|
|
using iBoxDB.LocalServer;
|
|
|
using System;
|
|
|
using System.IO;
|
|
|
|
|
|
namespace Highway.Assemble.common
|
|
|
{
|
|
|
public class BoxDB : IBoxDB
|
|
|
{
|
|
|
public BoxDB()
|
|
|
{
|
|
|
CreatDB();
|
|
|
}
|
|
|
public AutoBox auto = null;
|
|
|
private void CreatDB()
|
|
|
{
|
|
|
|
|
|
if (auto == null)
|
|
|
{
|
|
|
string dbpath = System.Environment.CurrentDirectory + "\\DB";
|
|
|
if (!Directory.Exists(dbpath))
|
|
|
{
|
|
|
Directory.CreateDirectory(dbpath);
|
|
|
}
|
|
|
DB.Root(dbpath);
|
|
|
|
|
|
DB db = new DB(1);
|
|
|
//load from Resources
|
|
|
//db = new DB(((TextAsset)(UnityEngine.Resources.Load("db2"))).bytes);
|
|
|
|
|
|
// two tables(Players,Items) and their keys(ID,Name)
|
|
|
db.GetConfig().EnsureTable<mesSoft>("MesSoft", "index");
|
|
|
db.GetConfig().EnsureTable<Equip>("Equip", "index");
|
|
|
db.GetConfig().EnsureTable<Sensor>("Sensor", "index");
|
|
|
db.GetConfig().EnsureTable<Collect>("Collect", "index");
|
|
|
{
|
|
|
// [Optional]
|
|
|
// if device has small memory & disk
|
|
|
db.MinConfig();
|
|
|
// smaller DB file size
|
|
|
db.GetConfig().DBConfig.FileIncSize = 1;
|
|
|
}
|
|
|
|
|
|
auto = db.Open();
|
|
|
|
|
|
}
|
|
|
}
|
|
|
public AutoBox GetAutoBox()
|
|
|
{
|
|
|
if (auto == null)
|
|
|
{
|
|
|
// Debug.LogWarning("请先创建数据库");
|
|
|
return null;
|
|
|
}
|
|
|
return auto;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 添加数据 索引自增
|
|
|
/// </summary>
|
|
|
/// <typeparam name="T"></typeparam>
|
|
|
/// <param name="dataName">表名</param>
|
|
|
/// <param name="data">数据</param>
|
|
|
public void Insert<T>(string table, T data) where T : BaseObject
|
|
|
{
|
|
|
data.index = auto.Id(1);//索引自增
|
|
|
data.time = System.DateTime.Now;// CatLib.SystemTime.Timestamp(System.DateTime.Now);
|
|
|
|
|
|
auto.Insert(table, data);
|
|
|
}
|
|
|
|
|
|
//foreach (PlayerInfo item in auto.Select<PlayerInfo>("from PlayerInfo Age ==?",15))
|
|
|
|
|
|
/// <summary>
|
|
|
/// 删除数据库,IBoxDB中没有直接删除一个表的接口,所以这个方法显得格外亲切~
|
|
|
/// 注意:删除数据库之前要关闭该数据库
|
|
|
/// </summary>
|
|
|
/// <param name="address">数据库地址</param>
|
|
|
public void DeleteDataBase(int address)
|
|
|
{
|
|
|
iBoxDB.DBDebug.DDebug.DeleteDBFiles(address);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
public interface IBoxDB
|
|
|
{
|
|
|
void Insert<T>(string table, T data) where T : BaseObject;
|
|
|
AutoBox GetAutoBox();
|
|
|
|
|
|
}
|
|
|
public class BaseObject
|
|
|
{
|
|
|
public int index;
|
|
|
public DateTime time;//=DateTime.Now;//long
|
|
|
public BaseObject() { }
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static class IDHelper
|
|
|
{
|
|
|
// helper long -> int if using int ID
|
|
|
public static int Id(this AutoBox auto, byte pos, int step = 1)
|
|
|
{
|
|
|
return (int)auto.NewId(pos, step);
|
|
|
}
|
|
|
}
|
|
|
} |