Unity3D使用SQLite

所需dll放到Plugins目录下

DbAccess.cs

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

public class DbAccess
{

    private SqliteConnection dbConnection;

    private SqliteCommand dbCommand;

    private SqliteDataReader reader;

    public DbAccess(string connectionString)
    {

        OpenDB(connectionString);

    }
    public DbAccess()
    {

    }
    /// <summary>
    /// 打开数据库
    /// </summary>
    /// <param name="connectionString"></param>
    public void OpenDB(string connectionString)
    {
        try
        {
            dbConnection = new SqliteConnection(connectionString);

            dbConnection.Open();

            Debug.Log("Connected to db");
        }
        catch (Exception e)
        {
            string temp1 = e.ToString();
            Debug.Log(temp1);
        }

    }
    /// <summary>
    /// 关闭连接
    /// </summary>
    public void CloseSqlConnection()
    {

        if (dbCommand != null)
        {

            dbCommand.Dispose();

        }

        dbCommand = null;

        if (reader != null)
        {

            reader.Dispose();

        }

        reader = null;

        if (dbConnection != null)
        {

            dbConnection.Close();

        }

        dbConnection = null;

        Debug.Log("Disconnected from db.");

    }

    public SqliteDataReader ExecuteQuery(string sqlQuery)
    {
        try
        {
            dbCommand = (SqliteCommand)dbConnection.CreateCommand();

            dbCommand.CommandText = sqlQuery;

            reader = dbCommand.ExecuteReader();
        }
        catch (Exception e)
        {
            Debug.Log(e);
        }
            return reader;
        
    }
    /// <summary>
    /// 读取整个表
    /// </summary>
    /// <param name="tableName"></param>
    /// <returns></returns>
    public SqliteDataReader ReadFullTable(string tableName)
    {

        string query = "SELECT * FROM " + tableName;

        return ExecuteQuery(query);

    }
    /// <summary>
    /// 插入一条数据,表名,对应的条目值
    /// </summary>
    /// <param name="tableName"></param>
    /// <param name="values"></param>
    /// <returns></returns>
    public SqliteDataReader InsertInto(string tableName, string[] values)
    {

        string query = "INSERT INTO " + tableName + " VALUES (" + values[0];

        for (int i = 1; i < values.Length; ++i)
        {

            query += ", " + values[i];

        }

        query += ")";

        return ExecuteQuery(query);

    }
    /// <summary>
    /// 更新某条信息,表名,item name,value,key,value
    /// </summary>
    /// <param name="tableName"></param>
    /// <param name="cols"></param>
    /// <param name="colsvalues"></param>
    /// <param name="selectkey"></param>
    /// <param name="selectvalue"></param>
    /// <returns></returns>
    public SqliteDataReader UpdateInto(string tableName, string[] cols, string[] colsvalues, string selectkey, string selectvalue)
    {

        string query = "UPDATE " + tableName + " SET " + cols[0] + " = " + colsvalues[0];

        for (int i = 1; i < colsvalues.Length; ++i)
        {

            query += ", " + cols[i] + " =" + colsvalues[i];
        }

        query += " WHERE " + selectkey + " = " + selectvalue + " ";

        return ExecuteQuery(query);
    }
    /// <summary>
    /// DELETE FROM table WHERE key=value
    /// </summary>
    /// <param name="tableName"></param>
    /// <param name="cols"></param>
    /// <param name="colsvalues"></param>
    /// <returns></returns>
    public SqliteDataReader Delete(string tableName, string[] cols, string[] colsvalues)
    {
        string query = "DELETE FROM " + tableName + " WHERE " + cols[0] + " = " + colsvalues[0];

        for (int i = 1; i < colsvalues.Length; ++i)
        {

            query += " or " + cols[i] + " = " + colsvalues[i];
        }
        Debug.Log(query);
        return ExecuteQuery(query);
    }

    public SqliteDataReader InsertIntoSpecific(string tableName, string[] cols, string[] values)
    {

        if (cols.Length != values.Length)
        {

            throw new SqliteException("columns.Length != values.Length");

        }

        string query = "INSERT INTO " + tableName + "(" + cols[0];

        for (int i = 1; i < cols.Length; ++i)
        {

            query += ", " + cols[i];

        }

        query += ") VALUES (" + values[0];

        for (int i = 1; i < values.Length; ++i)
        {

            query += ", " + values[i];

        }

        query += ")";

        return ExecuteQuery(query);

    }

    public SqliteDataReader DeleteContents(string tableName)
    {

        string query = "DELETE FROM " + tableName;

        return ExecuteQuery(query);

    }
    /// <summary>
    /// 创建表
    /// </summary>
    /// <param name="name"></param>
    /// <param name="col"></param>
    /// <param name="colType"></param>
    /// <returns></returns>
    public SqliteDataReader CreateTable(string name, string[] col, string[] colType)
    {

        if (col.Length != colType.Length)
        {

            throw new SqliteException("columns.Length != colType.Length");

        }

        string query = "CREATE TABLE " + name + " (" + col[0] + " " + colType[0];

        for (int i = 1; i < col.Length; ++i)
        {

            query += ", " + col[i] + " " + colType[i];

        }

        query += ")";

        return ExecuteQuery(query);

    }

    public SqliteDataReader SelectWhere(string tableName, string[] items, string[] col, string[] operation, string[] values)
    {

        if (col.Length != operation.Length || operation.Length != values.Length)
        {

            throw new SqliteException("col.Length != operation.Length != values.Length");

        }

        string query = "SELECT " + items[0];

        for (int i = 1; i < items.Length; ++i)
        {

            query += ", " + items[i];

        }

        query += " FROM " + tableName + " WHERE " + col[0] + operation[0] + "'" + values[0] + "' ";

        for (int i = 1; i < col.Length; ++i)
        {

            query += " AND " + col[i] + operation[i] + "'" + values[i] + "' ";

        }

        return ExecuteQuery(query);

    }

}

原文地址

### 如何在 Unity3D 中集成和使用 SQLite 数据库 #### 下载并安装 SQLite4Unity3d 插件 为了使 SQLite 更容易地与 Unity3D 集成,可以采用由富有经验的开发者创建的 SQLite4Unity3d 工具[^2]。此工具基于 sqlite-net 库构建而成,提供了一种简便的方法来管理数据库。 前往 [SQLite4Unity3d 的项目地址](https://gitcode.com/gh_mirrors/sq/SQLite4Unity3d)[^1]下载最新版本的插件包。解压后找到 `Assets` 文件夹下的内容,并复制到自己的 Unity 项目相应位置中去完成初步设置工作[^3]。 #### 创建数据库连接实例 当成功导入 SQLite4Unity3d 后,在 C# 脚本里初始化一个新的数据库连接对象: ```csharp using SQLite; public class DatabaseManager : MonoBehaviour { private string dbPath; public static readonly string dbName = "gameData.db"; void Start() { // 获取应用持久化存储路径并将数据库名附加在其后面形成完整的文件路径 dbPath = Path.Combine(Application.persistentDataPath, dbName); using (var connection = new SQLiteConnection(dbPath)) { Debug.Log($"Database connected at {dbPath}"); // 执行其他必要的初始化操作... } } } ``` 这段代码展示了如何获取应用程序的数据保存目录以及建立通往指定名称 `.db` 文件的链接过程。 #### 定义表结构模型类 为了让程序更好地理解所要处理的信息类型,定义一些代表表格内记录条目的类是非常有帮助的做法之一。下面给出的例子说明了怎样为玩家信息设定相应的属性字段: ```csharp using System; using SQLite; [Table("Players")] public class PlayerInfo { [PrimaryKey, AutoIncrement] public int Id { get; set; } [MaxLength(50)] public string Name { get; set; } public DateTime CreatedAt { get; set; } = DateTime.UtcNow; } ``` 这里运用到了来自 SQLite.NET 的特性标签 `[Table()]`, `[PrimaryKey]`, 和 `[AutoIncrement]` 来描述实体间的关系及其行为模式。 #### 对数据库执行 CRUD 操作 一旦有了上述准备之后就可以着手编写用于增删改查(CRUD)的具体方法了。比如向 Players 表插入一条新纪录可按如下方式实现: ```csharp void AddPlayer(string playerName) { var playerRecord = new PlayerInfo{ Name = playerName, }; using(var conn = new SQLiteConnection(dbPath)){ try { conn.Insert(playerRecord); Console.WriteLine($"{playerName} has been added."); } catch(Exception ex){ Console.Error.WriteLine(ex.Message); } } } ``` 以上函数接收一个字符串参数作为用户名传递给新建的对象实例;接着打开一次性的数据库会话并通过调用 Insert 方法把这条新的用户资料存入目标表单之中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值