导入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;
}
}