SQLite在Unity中的应用

导入SQLite动态链接库

下载链接
将解压后的Plugins文件夹导入项目中

导入命名空间

using Mono.Data.Sqlite;

创建路径

我们有三种路径供选择

  • 流路径 Application.streamingAssetsPath 各个平台都可以使用
  • 沙盒路径 Application.persistentDataPath 各个平台都有,比较稳定
  • Application.dataPath 仅限编辑器中使用

这里以流路径为例
首先在Assets文件夹下建立一个StreamingAssets文件夹,将数据库文件导入进去

简单应用

using Mono.Data.Sqlite;

public class Sqlexample
{
	// 用来存放路径信息
	private string dataBasePath = "data source= Application.streamingAssetsPath / 数据库名称sqlite ";
	// 数据库指令对象
	private SqliteCommand command;
	// 数据库读取对象
	private SqliteDataReader reader;
	// 数据库的链接对象,并绑定数据库路径链接
	private SqliteConnection con = new SqliteConnection( dataBasePath );
	// 打开数据库的连接,注意要有开有关防止数据库锁住
	con.Open();
	// 创建数据库指令对象
	command = con.CreateCommand();
	// 赋值SQL语句
	command.CommandText = " 写相应的语句即可 ";
	// 增:Insert Into 表名称 Values(值1,值2,。。。)  或 Insert Into 表名称 (字段名称1,字段名称2) Values (值1,值2)
	// 删:Delete From 表名称 Where (条件)
	// 改:Update 表名称 Set 字段名称1 = 新值 Where 字段名称2 = 某值
	// 查:Select 字段名称 From 表名称 Where 列名 = 某值
	// 除了这些还有很多,比如模糊查询之类的,感兴趣的可自行查找学习

	// 执行SQL语句,这里有三种方法
	// 执⾏SQL语句,并返回受影响的⾏数  使⽤范围:增删改
	int row = command.ExecuteNonQuery();
	// 执⾏SQL语句,返回查询到的第⼀个结果(第⼀⾏的第⼀列) 使⽤范围:查询单个数据(查询的结果是⼀⾏⼀列)
	object data = command.ExecuteScalar()// 执⾏SQL语句,返回所有查询到的结果 使⽤范围:查询多个数据
	reader = command.ExecuteReader();
	// SqliteDataReader 的常用方法
	reader.Read(); //读取下一行
	reader.FieldCount; //列数
	reader.GetName(列号); //获取该列的字段名
	reader.GetValue(列号); //获取该列的值
	// 关闭读取器
	reader.Close();
	// 释放
	command.dispose();
	// 关闭数据库的连接
	con.Close();
	
}

简单的封装

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

public class SQLFrame
{
    #region SingleTon

    private static SQLFrame instance;

    public static SQLFrame GetInstance()
    { 
        if(instance == null)
        {
            instance = new SQLFrame();
        }
        return instance;
    }

    protected SQLFrame() { }

    #endregion

    //连接字符串
    private string conStr;

    private SqliteConnection con;
    private SqliteCommand command;
    private SqliteDataReader reader;

    /// <summary>
    /// 打开数据库
    /// </summary>
    /// <param name="databaseName">Database name.</param>
    public void OpenDatabase(string databaseName)
    {
        //如果名称中不包含后缀,自动添加
        if(!databaseName.EndsWith(".sqlite"))
        {
            databaseName += ".sqlite";
        }


#if UNITY_EDITOR

        conStr = "Data Source = " +
             Application.streamingAssetsPath +
             "/" + databaseName;
#endif

        con = new SqliteConnection(conStr);
        //打开连接
        con.Open();
        //创建指令对象
        command = con.CreateCommand();
    }

    /// <summary>
    /// 关闭数据库
    /// </summary>
    public void CloseDatabase()
    {
        if (reader != null)
        {
            reader.Close();
            reader = null;
        }

        if (command != null)
        {
            command.Dispose();
            command = null;
        }

        if (con != null)
        {
            con.Close();
            con = null;
        }
    }


    /// <summary>
    /// 执行非查询类的SQL语句
    /// </summary>
    /// <param name="query">Query.</param>
    private int DontSelect(string query)
    {
        //赋值SQL语句
        command.CommandText = query;
        //执行SQL语句
        return command.ExecuteNonQuery();
    }

    public int Insert(string query)
    {
        return DontSelect(query);
    }

    public int Update(string query)
    {
        return DontSelect(query);
    }

    public int Delete(string query)
    {
        return DontSelect(query);
    }

    /// <summary>
    /// 查询单个数据
    /// </summary>
    /// <returns>The single data.</returns>
    /// <param name="query">Query.</param>
    public object SelectSingleData(string query)
    {
        //赋值SQL语句
        command.CommandText = query;
        //执行SQL语句,返回结果
        return command.ExecuteScalar();
    }

    /// <summary>
    /// 查询多个数据
    /// </summary>
    /// <param name="query">Query.</param>
    public List<ArrayList> SelectMultipleData(string query)
    {
        //赋值SQL语句
        command.CommandText = query;
        //执行
        reader = command.ExecuteReader();
        //一行多列:ArrayList
        //多行多列:List<ArrayList>
        //实例化结果对象
        List<ArrayList> result = new List<ArrayList>();

        while (reader.Read())
        {
            //声明一个ArrayList存储该行的所有数据
            ArrayList currentRow = new ArrayList();
            //遍历该行的所有的列
            for (int i = 0; i < reader.FieldCount; i++)
            {
                //将当前列的数据添加到集合
                currentRow.Add(reader.GetValue(i));
            }
            //将当前行的数据放到List里面
            result.Add(currentRow);
        }

        //关闭读取器
        reader.Close();
        //返回结果
        return result;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值