0


猿创征文|UnitySqlite持久化数据

请添加图片描述

@作者 : SYFStrive

@博客首页 : HomePage

📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗

📌:觉得文章不错可以点点关注 👉:专栏连接🔗

💃:程序员每天坚持锻炼💪

🔗:
请添加图片描述
在这里插入图片描述
相关专栏

👉
Unity持久化数据(🔥)

目录

SQLite简单说明

SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中,以嵌入式作为它的设计目标,它占用资源非常的低,因此适合在嵌入式设备如Android、Ruby on Rails等中使用。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟和C、C++、Ruby、轻型的数据库Python、C#、PHP 、Java等编程语言相结合。SQLite是一个以文件形式存在的关系型数据库,尽管无法实现分布式和横向扩展,可是作为一个轻量级的嵌入式数据库,它不需要系统提供服务支持,通过SDK直接操作文件避免了对数据库维护的相关事务,从这个角度来讲它是一个出色的数据库。

SQLite前期准备

  • 前期准备
  1. 要在Unity中使用Sqlite需要将Mono.Data.Sqlite.dll,System.Data.dll, Sqlite3.dll 三个文件放入Plugins文件夹下(注意:文件名必须一样)。
  2. 前两个文件查找方法一:右键自己的Unity 👉 打开文件所在路径 👉 Data 👉 Mono 👉 lib 👉 mono 👉 unity
  3. 路劲查找方法二如 👇 Mono.Data.Sqlite.dll 在Unity的Editor安装目录下“ Editor\Data\Mono\lib\mono\2.0\ Mono.Data.Sqlite.dll”.System.Data.dll 在Unity的Editor安装目录下“ Editor\Data\Mono\lib\mono\2.0\ System.Data.dll”
  4. 第三给个文件查找方法:Sqlite3.dll 在Sqlite的官网下载对应的版本即可 Sqlite3.dll下载
  5. 可以下载Sqlite可视化管理工具 SQLiteStudio:Sqlite可视化管理工具下载

脚本使用Sqlite(六步走)

使用Sqlite六步走 👇

一、引入命名空间 👉 using Mono.Data.Sqlite;

代码如👇:

using Mono.Data.Sqlite; 

二、创建链接数据库的路径

代码如👇:

/// <summary>
/// 第二步 👉 创建路径 
/// </summary>
public string GetDataBasePath(string pathName)
{
    //判断pathName不为空
    if (pathName!=null)
        //创建数据库访问路径
        return dataBasePath = "Data Source(固定写法) =" + Application.streamingAssetsPath + "/" + pathName(数据库名) + ".db";
    return null;
}

三、实例化数据库连接对象,并绑数据库路径 (SqliteConnection)

代码如👇:

 //数据库连接对象
 private SqliteConnection sqlConn;
 
/// <summary>
/// 第三步 👉 实例化数据库连接对象 
/// </summary>
private void NewSqlObj(string useSqlName(数据库名), string pathName(数据库路径))
{
    //实例化数据库连接对象,并绑数据库路径
    sqlConn = new SqliteConnection(pathName);

    //打开连接
    sqlConn.Open();

    //调用创建数据库Obj
    CreateSqliteObj(useSqlName);
}

四、操作数据库 (SqliteCommand )

SqliteCommand使用方法如👇:
方法名方作用Cancel()尝试取消命令的执行。什么也没做。Dispose(Boolean)释放连接使用的所有资源并关闭它。ExecuteDbDataReader(CommandBehavior)针对数据库执行CommandText并返回数据读取器ExecuteDbDataReaderAsync(CommandBehavior, CancellationToken)针对数据库异步执行CommandText并返回数据读取器。ExecuteNonQuery()对数据库执行CommandText 。ExecuteReader()针对数据库执行CommandText并返回数据读取器。ExecuteReader(CommandBehavior)针对数据库执行CommandText并返回数据读取器。ExecuteReaderAsync()针对数据库异步执行CommandText并返回数据读取器。ExecuteReaderAsync(CancellationToken)针对数据库异步执行CommandText并返回数据读取器。ExecuteReaderAsync(CommandBehavior)针对数据库异步执行CommandText并返回数据读取器。ExecuteReaderAsync(CommandBehavior, CancellationToken)针对数据库异步执行CommandText并返回数据读取器。ExecuteScalar()对数据库执行CommandText并返回结果。Prepare()在数据库上创建命令的准备版本。
代码如👇:

//数据库指令对象(简单理解操作数据库)
private SqliteCommand sqlComm;
 
/// <summary>
/// 创建数据库指令函数 第四步
/// </summary>
private void CreateSqliteObj(string useSqlName)
{
    //创建数据库指令函数对象
    sqlComm = sqlConn.CreateCommand();

    //使用Sql语法 👉 增删查改……

    //增
    sqlComm.CommandText = "insert into user Values (5, 'Guu')";

    //删
    sqlComm.CommandText = "delete from  user where id=1";

    //查
    sqlComm.CommandText = "Select * From  user";

    //改
    sqlComm.CommandText = "Update  user  set name='三把斧' where id=5 ";
}

五、执行Sql语句 (SqliteDataReader(提供用于读取对SQLite数据库执行的命令的结果方法(简称是一个读取器))……)

SqliteDataReader相关使用方法如下:

特性
特性名作用Depth获取当前行的嵌套深度。始终为零。FieldCount获取当前行的列数。Handle获取底层准备好的语句的句柄。HasRows获取一个值,该值指示数据读取器是否包含任何行。IsClosed获取一个值,该值指示数据读取器是否已关闭。Item[Int32]获取指定列的值。Item[String]获取指定列的值。RecordsAffected获取插入、更新或删除的行数。-1 用于 SELECT 语句。
方法
方法名作用Close()关闭数据读取器。Dispose(Boolean)释放数据读取器使用的任何资源并关闭它。GetBoolean(Int32)以Boolean形式获取指定列的值。GetByte(Int32)以Byte形式获取指定列的值。GetChar(Int32)以Char形式获取指定列的值。GetDataTypeName(Int32)获取指定列的值作为DateTime。GetFieldType(Int32)获取指定列的数据类型。GetFieldValue(Int32)获取指定列的值。GetFloat(Int32)获取指定列的值作为Single。GetGuid(Int32)获取指定列的值作为Guid。GetInt16(Int32) (Int32)获取指定列的值作为Int16。GetInt32(Int32)获取指定列的值作为Int32。GetInt64(Int32)获取指定列的值作为Int64。GetName(Int32)获取指定列的名称。GetOrdinal(String)获取指定列的序号。GetString(Int32)以String式获取指定列的值。GetValue(Int32)获取指定列的值。IsDBNull(Int32)获取一个值,该值指示指定列是否为DBNull。NextResult()前进到批处理语句的下一个结果集。Read()前进到结果集中的下一行。
代码如👇:

 //数据库读取对象
 private SqliteDataReader sqlReader;(第三种方法用到的)

//执行Sql语句 三种方法……

//第一种 返回查询第一行第一列的数据结果
//object value = sqlComm.ExecuteScalar();

//第二种 返回受影响的行数 👉 该方法适合 增、删、改
//int rowS = sqlComm.ExecuteNonQuery();

//第三种 返回SqliteCommand
//sqlReader = sqlComm.ExecuteReader();

/// <summary>
/// 执行Sql语句 增
/// </summary>
private void ImplementInsertSqlStatement()
{
    int rowS = sqlComm.ExecuteNonQuery();
    Debug.Log("增受影响的行数:" + rowS.ToString()); (如:增了1条数据就打印1)
}

/// <summary>
/// 执行Sql语句 删
/// </summary>
private void ImplementDeleteSqlStatement()
{
    int rowS = sqlComm.ExecuteNonQuery();
    Debug.Log("删受影响的行数:" + rowS.ToString());  (如:删除了1条数据就打印1)
}

/// <summary>
/// 执行Sql语句 查
/// </summary>
private void ImplementSelectInsterSqlStatement()
{
    //查询方法一
    //object value = sqlComm.ExecuteScalar();
    //查询方法二
    //执行Sql语句,返回查询后的结果 类型:SqliteDataReader 
    //执行返回 👉 查询多个数据 👉 的sql语句
    sqlReader = sqlComm.ExecuteReader();

    如下以SqliteDataReader 为例 👇
    
    //保存内容
    string currentColumn = "";

    //循环变量打印表类型 (玩法一)
    for (int i = 0; i < sqlReader.FieldCount; i++)
    {
        currentColumn += sqlReader.GetName(i);
        currentColumn += "\t";
    }
    Debug.Log(currentColumn);

    //(sqlReader.Read())循环变量打印表的数据 👉 执行下一行没有就返回false (玩法二)
    while (sqlReader.Read())
    {
        currentColumn = "";

        //返回查询值的列
        //object value = sqlReader.GetValue(0);
     
        //查询所有内容
        for (int i = 0; i < sqlReader.FieldCount; i++)
        {
            currentColumn += sqlReader.GetValue(i);
            currentColumn += "\t";
        }
        Debug.Log(currentColumn);
    }

    //(玩法三)IsClosed 👉 检查对象是否已经被关闭。如果在连接上调用了 close方法或者发生某些严重的错误,则连接被关闭。只有在调用了 Connection.close 方法之后被调用时,此方法才保证返回 true。 (不作判断会报错)
    if (!sqlReader.IsClosed)
        sqlReader.Close();
    sqlComm.CommandText = "Select * from user where id=8";
    sqlReader = sqlComm.ExecuteReader();
}

/// <summary>
/// 执行Sql语句 改
/// </summary>
private void ImplementUpdateInsterSqlStatement()
{
    int rowS = sqlComm.ExecuteNonQuery();
    Debug.Log("改受影响的行数:" + rowS.ToString()); (如:改了1条数据就打印1)
}

六、程序关闭时

代码如👇:

//在应用程序退出前,发送给所有游戏对象。
private void OnApplicationQuit()
{
    ProgramClosureImplement();
}

/// <summary>
/// 程序关闭时执行
/// </summary>
private void ProgramClosureImplement()
{
    if (sqlConn!= null)
        //关闭连接
        sqlConn.Close();

    if (sqlComm != null)
        //释放数据
        sqlComm.Dispose();

    if (sqlReader != null)
        //释放读取
        sqlReader.Close();
}

最后

在这里插入图片描述

本文到这里就结束了,大佬们的支持是我们更新的最大动力,希望这篇文章能帮到大家💪

             相关专栏连接🔗

在这里插入图片描述

下篇文章再见ヾ( ̄▽ ̄)ByeBye

在这里插入图片描述

标签: sqlite unity 数据库

本文转载自: https://blog.csdn.net/m0_61490399/article/details/126539399
版权归原作者 SYFStrive 所有, 如有侵权,请联系我们删除。

“猿创征文|UnitySqlite持久化数据”的评论:

还没有评论