Unity数据库的学习笔记

本文介绍了一个用于Unity项目的SQLite数据库工具类,该类能够实现跨平台的数据读取,包括安卓平台上的特殊处理,并提供了获取单行或多行数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using Mono.Data.Sqlite;

public class DataBaseTool : Singleton<DataBaseTool> {

    public string DataBaseName="LOLData.sqlite";

    private SqliteConnection conn;
    private SqliteCommand command;
    private SqliteDataReader reader;
    private string datapath="";

    public DataBaseTool(){
        if(conn==null){
        datapath= "Data Source=" + Application.streamingAssetsPath + "/" + DataBaseName;
            #if UNITY_ANDRIOD
            datapath=AndriodPaltformSet();
            #endif
            try{
                conn = new SqliteConnection (datapath);
            }catch(System.Exception e){
                Debug.Log ("创建数据库连接失败...");
                Debug.LogError (e.Message);
            }
        }
    }

    //安卓平台数据库设置
    public string AndriodPaltformSet(){
        string path = "URI = file:" + Application.persistentDataPath + "/" + DataBaseName;

        //Android APK中数据库文件的路径
        string androidPath = "jar:file://" + Application.dataPath + "!/assets/" + DataBaseName;
        //Android沙盒路径
        string androidFilePath = Application.persistentDataPath + "/" + DataBaseName;
        //如果Android项目源文件中不存在数据库文件,说明没有加载过,需要加载
        if(!File.Exists(androidFilePath))
        {
            //从APK路径拿到Sqlite数据库文件,下载
            WWW www = new WWW(androidPath);
            //下载未完成时,保持等待
            while(!www.isDone){}
            //下载完成,IO流写入到沙盒路径
            File.WriteAllBytes(androidFilePath, www.bytes);
        }
        return path;
    }

    /// <summary>
    /// The .打开数据库连接
    /// </summary>
    private void OpenConnection(){

        if(conn!=null){
            try{
            conn.Open ();
            }catch(System.Exception e){
                Debug.Log ("数据库打开失败...");
                Debug.LogError (e.Message);
            }
        }
    }

    /// <summary>
    /// 关闭数据库连接
    /// </summary>
    private void CloseConnection(){
        if(conn!=null){
            try {
                conn.Close();
            } catch (System.Exception ex) {
                Debug.Log ("数据库连接关闭失败...");
                Debug.LogError (ex.Message);
            }
        }
    }

    /// <summary>
    /// 获取一行数据的方法
    /// </summary>
    /// <returns>The row data.</returns>
    #region 对外接口方法
    public Dictionary<string ,object> GetRowData(string sql){
        OpenConnection ();
        command = conn.CreateCommand ();
        command.CommandText = sql;
        SqliteDataReader reader= command.ExecuteReader ();
        Dictionary <string,object> data = new Dictionary<string, object> ();
        if(reader.Read()){
            for (int i = 0; i < reader.FieldCount; i++) {
                data.Add( reader.GetName (i),reader.GetValue(i)) ;
            }
        }
        reader.Close ();
        reader = null;
        command.Dispose ();
        command = null;
        CloseConnection ();
        return data;
    }
    #endregion

    /// <summary>
    /// 获取一张表的方法
    /// </summary>
    /// <returns>The all row data.</returns>
    /// <param name="sql">Sql.</param>
    public List<Dictionary<string,object>> GetAllRowData(string sql){
        OpenConnection ();
        command = conn.CreateCommand ();
        command.CommandText = sql;
        SqliteDataReader reader = command.ExecuteReader ();

        List<Dictionary<string,object>> allData = new List<Dictionary<string, object>> ();
        while (reader.Read()) {
            Dictionary<string,object> rowData = new Dictionary<string, object> ();
            for (int i = 0; i < reader.FieldCount; i++) {
                rowData.Add (reader.GetName(i),reader.GetValue(i));
            }
            allData.Add (rowData);
        }
        reader.Close ();
        reader = null;
        command.Dispose ();
        command = null;
        CloseConnection ();
        return allData;
    }
}
内容概要:本文档详细介绍了一个基于MATLAB实现的跨尺度注意力机制(CSA)结合Transformer编码器的多变量时间序列预测项目。项目旨在精准捕捉多尺度时间序列特征,提升多变量时间序列的预测性能,降低模型计算复杂度与训练时间,增强模型的解释性和可视化能力。通过跨尺度注意力机制,模型可以同时捕获局部细节和全局趋势,显著提升预测精度和泛化能力。文档还探讨了项目面临的挑战,如多尺度特征融合、多变量复杂依赖关系、计算资源瓶颈等问题,并提出了相应的解决方案。此外,项目模型架构包括跨尺度注意力机制模块、Transformer编码器层和输出预测层,文档最后提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,尤其是熟悉MATLAB和深度学习的科研人员、工程师和研究生。 使用场景及目标:①需要处理多变量、多尺度时间序列数据的研究和应用场景,如金融市场分析、气象预测、工业设备监控、交通流量预测等;②希望深入了解跨尺度注意力机制和Transformer编码器在时间序列预测中的应用;③希望通过MATLAB实现高效的多变量时间序列预测模型,提升预测精度和模型解释性。 其他说明:此项目不仅提供了一种新的技术路径来处理复杂的时间序列数据,还推动了多领域多变量时间序列应用的创新。文档中的代码示例和详细的模型描述有助于读者快速理解和复现该项目,促进学术和技术交流。建议读者在实践中结合自己的数据集进行调试和优化,以达到最佳的预测效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值