Ejemplo n.º 1
0
    /// <summary>
    /// 查找某一条KvData
    /// allRows所有列的名称
    /// </summary>
    /// <param name="ID">I.</param>
    public static string[] QueryKVSqlData(string tablename /*,string[] allRows*/, int ID)
    {
        string[] Col_Names_InSql = SQLiteHelper4DataEditor.Get_Col_Names_InSql(tablename);


        SqliteDataReader reader = SQLiteHelper.GetIns().ReadTable(tablename, Col_Names_InSql, new string[] { SQLiteHelper4DataEditor.PRIMARY_NAME }, new string[] { "=" }, new string[] { "'" + ID + "'" });

        int MAX_NUM = SQLiteHelper4DataEditor.GetMaxSqlDataNum(tablename);

        string[] result = new string[MAX_NUM];

        while (reader.Read())
        {
            for (int i = 0; i < MAX_NUM; i++)
            {
                //NINFO ID
                if (i == 1)                 //第一个参数是ID是int型
                {
                    result[i] = reader.GetInt32(reader.GetOrdinal(Col_Names_InSql[i])).ToString();
                    //int f**k = reader.GetInt32(0);
                    //Debug.Log("F**K ----------------------=============-------------->"+f**k);
                    //result[i] = (reader.GetInt32(0)).ToString();//这里猜测是sql中第一个int类型
                }
                else
                {
                    result[i] = reader.GetString(reader.GetOrdinal(Col_Names_InSql[i]));
                }


                //Debug.Log("------------sql 查询id:"+ID+" 第"+i+"个数据为"+result[i]);
            }
        }

        return(result);
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 补全占位数据
    /// 比如sql talbe有6数据,模板数据只有3项,那么经过这个函数处理,就把不足6项的部分填空串,保证存入sql都是6项
    /// </summary>
    /// <returns>输出填充好空串的字符串数组</returns>
    /// <param name="editorType">编辑器类型</param>
    /// <param name="values">Values.</param>
    public static string[] GetFullKVDefaultValueData(string editorType, string[] orignalData)
    {
        int orignalLength = orignalData.Length;

        int MAX_NUM = SQLiteHelper4DataEditor.GetMaxSqlDataNum(editorType);

        string[] tempValue = new string[MAX_NUM];

        //Debug.Log ("vlen:"+values.Length+" tLen:"+tempValue.Length);
        Array.Copy(orignalData, tempValue, orignalLength);

        //改版sql要求,每个数据在sql都占用300个固定位置,如果没有数据的部分,就填充空串
        int n = MAX_NUM - orignalLength;

        if (n > 0)
        {
            for (int i = orignalLength; i < MAX_NUM; i++)
            {
                //tempValue [i] =  "'d"+i+"'";//NINFO 这里注意空串放sql要加''
                //string defaultValue = "default"+i;
                //tempValue [i] =  "'"+defaultValue+"'";
                tempValue [i] = "default" + i;
            }
        }

        return(tempValue);
    }
Ejemplo n.º 3
0
    /// <summary>
    /// 利用剪切版里的数据新建一个Item
    /// 新建一个item
    /// 这里要注意的是创建的位置
    ///
    /// 当选择一个item并且黏贴时,是把剪切版中的item粘到这个选择item的前面
    /// 原因是如果是后面的化,那么folder下第一个位置永远不能被插入
    /// </summary>
    private void Paste()
    {
        //这里要判定黏贴板上是否有数据
        if (MyTreeContainer.CurCopyItem == null)
        {
            Log.i("TreeItem", "Paste", "黏贴的数据为null,不该出现的状态", BeShowLog);
            return;
        }

        //插入TreeItem项到指定位置
        var treeItem = InsertItem(IndexInParentFolder, MyTreeContainer.CurCopyItem.Name, ParentFolder, MyTreeContainer);

        treeItem.Icon       = MyTreeContainer.CurCopyItem.Icon;
        treeItem.TreeItemID = MyTreeContainer.CurCopyItem.TreeItemID;
        string _curCopyItemID = MyTreeContainer.CurCopyItem.TreeItemID;

        //如果数据来自剪切,就要清理原数据,如果来自复制,就要复制原数据(数据id如果不变,复制是没有意义的)

        //如果是剪切,要删除前一个状态
        if (MyTreeContainer.CurCopyItem.BeCut)
        {
            Log.i("TreeItem", "Paste", "开始黏贴", BeShowLog);
            MyTreeContainer.CurCopyItem.BeCut = false;
            MyTreeContainer.CurCopyItem.DelItem(false);
        }
        else        //如果是copy,要新生成sql数据,拿到ID,然后再插入数据
        {
            //NINFO nsql 这里是否也要向本地写数据
            //这里并不需要向本地Dic写入数据,只向sql写入数据即可,复制并没有把当前选中项置为 复制项,
            //当鼠标点击选中复制项时,选中逻辑自然会把sql数据导入本地
            Log.i("TreeItem", "Paste", "开始复制", BeShowLog);
            //step1 创建一个空的默认数据  新建sql并拿回新id
            string   kvType           = this.MyTreeContainer.Name;
            string[] _defaultDate     = GEditorConfig.GetKVDefaultValueData(kvType);
            string[] _fullDefaultDate = GEditorConfig.GetFullKVDefaultValueData(kvType, _defaultDate);

            int newID = GEditorDataMgr.CreateKVSqlData(kvType, _fullDefaultDate);
            treeItem.TreeItemID = newID.ToString();
            Log.i("TreeItem", "Paste", "新建数据完毕返回 newID:" + newID, BeShowLog);
            //step2 获取旧数据 根据treeItem.ID(被copy的那个item的sql数据id)查询copy的数据
            //string[] rowNames = GEditorConfig.GetKVRowNames(kvType);
            string[] copyDate = GEditorDataMgr.QueryKVSqlData(kvType /*,rowNames*/, Convert.ToInt32(_curCopyItemID));

            //step3 向新建的空位置添加旧数据,id使用新id
            copyDate[1] = newID.ToString();            //特别注意这里是第一个元素,不是第0个,可以参考SQLiteHelper4DataEditor的说明

            string[] Col_Names_InSql = SQLiteHelper4DataEditor.Get_Col_Names_InSql(kvType);
            GEditorDataMgr.ModifyKVSqlData(kvType, Col_Names_InSql, copyDate, newID);
        }

        //黏贴要要清理黏贴版,这里暂时逻辑为无论剪切还是复制,每到黏贴时都要清空剪贴板
        MyTreeContainer.CurCopyItem = null;

        Log.i("TreeItem", "Paste", "黏贴的item ID:" + treeItem.TreeItemID, BeShowLog);
    }
Ejemplo n.º 4
0
    /// <summary>
    /// 这里的黏贴是treeItme的黏贴,不存在文件夹整体黏贴的说法
    /// treefolder的黏贴跟TreeItem有些不同(除了这些不同其他都相同,跟treeitem paste的操作类似)
    /// treeItem是把黏贴项放到自己之前
    /// treefoler是把黏贴项放到自己内部所有元素之后
    /// </summary>
    public void Paste()
    {
        //这里要判定黏贴板上是否有数据
        if (MyTreeContainer.CurCopyItem == null)
        {
            Log.i("TreeItem", "Paste", "黏贴的数据为null,不该出现的状态", BeShowLog);
            return;
        }

        if (!BeFolderOpen)
        {
            OpenFolder();               //没打开的先打开再创建,否则位置错乱
        }
        //创建新位置的item的ui,ui节点名称与黏贴板上的一致
        var ti = TreeItem.Create(MyTreeContainer.CurCopyItem.Name, this, MyTreeContainer);

        //如果是剪切,要删除前一个状态
        if (MyTreeContainer.CurCopyItem.BeCut)
        {
            Log.i("TreeItem", "Paste", "开始黏贴", BeShowLog);
            MyTreeContainer.CurCopyItem.BeCut = false;
            MyTreeContainer.CurCopyItem.DelItem(false);
            ti.TreeItemID = MyTreeContainer.CurCopyItem.TreeItemID;//黏贴的话id保持不变
        }
        else//如果是copy,要新生成sql数据,拿到ID,然后再插入数据
        {
            //step1 创建一个空的默认数据  新建sql并拿回新id
            string   kvType           = this.MyTreeContainer.Name;
            string[] _defaultDate     = GEditorConfig.GetKVDefaultValueData(kvType);
            string[] _fullDefaultDate = GEditorConfig.GetFullKVDefaultValueData(kvType, _defaultDate);
            int      newID            = GEditorDataMgr.CreateKVSqlData(kvType, _fullDefaultDate);

            ti.TreeItemID = newID.ToString();
            Log.i("TreeFolder", "Paste", "新建数据完毕返回 newID:" + newID, BeShowLog);
            //step2 获取旧数据 根据treeItem.ID(被copy的那个item的sql数据id)查询copy的数据
            //string[] rowNames = GEditorConfig.GetKVRowNames(kvType);
            string[] copyDate = GEditorDataMgr.QueryKVSqlData(kvType /*,rowNames*/, Convert.ToInt32(MyTreeContainer.CurCopyItem.TreeItemID));

            //step3 向新建的空位置添加旧数据,id使用新id
            copyDate[1] = newID.ToString();//特别注意这里是第一个元素,不是第0个,可以参考SQLiteHelper4DataEditor的说明

            string[] Col_Names_InSql = SQLiteHelper4DataEditor.Get_Col_Names_InSql(kvType);

            GEditorDataMgr.ModifyKVSqlData(kvType, Col_Names_InSql, copyDate, newID);
        }
        //黏贴要要清理黏贴版,这里暂时逻辑为无论剪切还是复制,每到黏贴时都要请客剪贴板
        MyTreeContainer.CurCopyItem = null;

        Log.i("TreeItem", "Paste", "黏贴的item ID:" + ti.TreeItemID, BeShowLog);
    }
Ejemplo n.º 5
0
    /// <summary>
    /// app启动检测,检查sqlTable是否存在,不存在就创建,每次启动都检查
    ///
    /// xxxx 1 保存app.config,先不保存这个了,每次都检查所有编辑器类型,如果sql中没这个table就创建,这么做方便新增编辑器时的扩展
    /// 2 根据现在有tab数量,检查并创建不存在的sql table表,保证应用启动后,所有sql table表都是已经存在的
    /// </summary>
    public static void CheckSQLTableExist()
    {
        //如果不存在,1先创建sql库 2创建sql table,3创建首次启动配置文件app.config

        //step1 创建sql库,这步可以忽略,原因是,sql库创建和打开目前是一个过程,每次启动editor都会打开sql连接,如果库不存在会自动创建而AppFirstStartup要在 sql连接后执行,保证已经连接了sql

        //setp2 创建sql table,这里需要判断下table是否存在再创建,检查所有config中的tab项
        for (int i = 0; i < GEditorConfig.ALL_EDITORS.Length; i++)
        {
            string name = GEditorConfig.ALL_EDITORS [i];

            bool b = SQLiteHelper.GetIns().BeTableExist(name);

            if (!b)
            {
                Log.i("GEditorDataMgr", "AppFirstStartup", "sql 不存在名为" + name + "的table 开始创建", BeShowLog);

                //设置sql表列名数组
                //string[] sqlItemNames = GEditorConfig.GetKVRowNames(name);;

                //设置sql列类型,第一个为int型自增长主键,其他都是字符串TEXT
//				string[] types = new string[sqlItemNames.Length];
//				for (int j = 0; j < types.Length; j++) {
//					if (j == 0)
//						types [j] = "INTEGER PRIMARY KEY";//把第一项ID设置为int类型的主键,主键自动自增长
//					else {
//						types [j] = "TEXT";
//					}
//				}

                //sql类型统一用string,所以写Text
                SQLiteHelper4DataEditor.CreateTable(name);

                Log.i("GEditorDataMgr", "AppFirstStartup", "创建" + name + "表完毕", BeShowLog);
            }
        }

        //step3 创建app.config,这里暂时存任何数据,以后如果有全局配置数据可以存在这里
//		IoBuffer ib = new IoBuffer();
//		ib.PutBool(true);
//		FileHelper.Save (GEditorEnum.EDITOR_DATA_ROOTURL,GEditorEnum.EDITOR_APP_CONFIG_NAME,ib.ToArray());
    }
Ejemplo n.º 6
0
    /// <summary>
    /// 新建一条kvData(使用传入的values的值),返回ID值
    ///
    /// </summary>
    public static int CreateKVSqlData(string tableName, string[] values)
    {
        for (int i = 0; i < values.Length; i++)
        {
            //Debug.Log ("--->I:"+i+" v:"+values[i]);
            if (values[i].Equals("null"))
            {
                continue;                                    //NINFO null的那个数据时int型的主键,不需要加'',这里要特别注意,不能删除这句
            }
            values[i] = "'" + values[i] + "'";
        }

        SqliteDataReader _reader = SQLiteHelper4DataEditor.InsertValues(tableName, values);

        //SQLiteHelper.GetIns().InsertValues(tableName,new string[]{"null","'张三'","'22'","'*****@*****.**'"});
        while (_reader.Read())
        {
            //读取主键ID
            //Debug.Log(_reader.GetInt32(_reader.GetOrdinal(SQLiteHelper4DataEditor.PRIMARY_NAME)));
            Debug.Log(_reader.GetInt32(0));            //猜测写0的原因是查找表中第一个int
        }

        //查询自增长存入的最后一个数据
        _reader = SQLiteHelper.GetIns().ReadLastIncreseID(tableName);
        int reslutID = 0;

        while (_reader.Read())
        {
            //NINFO ID,这里本应该写1才是取id的value,为什么只能写0呢,难道0取得是主键??
            //猜测这里的意思应该是读取第一个int类型,所以写0,这样才说的通
            //读取ID
            reslutID = _reader.GetInt32(0);
            //reslutID = _reader.GetInt32(_reader.GetOrdinal("line1"));

            Debug.Log("创建KVData,返回ID:" + reslutID);
        }

        return(reslutID);
    }