- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg) - LoginPanel: InputField placeholder本地化、字体颜色保持 - HistoryPanel: 用时数据本地化、placeholder本地化 - RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建) - AppraiseWindowBase: 评价等级本地化、操作消息重建 - EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized - StudentOperateRecorder: 新增InjectOperateMsgLocalized方法 - LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选 - 字体切换时保留颜色和verticalOverflow
317 lines
11 KiB
C#
317 lines
11 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
using Mono.Data.Sqlite;
|
|
using System.Data;
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Runtime.Serialization.Formatters.Binary;
|
|
using System.IO;
|
|
using System.Runtime.Serialization;
|
|
|
|
/// <summary>
|
|
/// 数据库操作工具类 封装了通用的数据库增、删、改、查接口
|
|
/// </summary>
|
|
public class DBAccess {
|
|
private SqliteConnection dbConnection;
|
|
private SqliteCommand dbCommand;
|
|
private SqliteDataReader reader;
|
|
public bool isOpen=false;
|
|
public DBAccess(string connectionStr)
|
|
{
|
|
OpenDB(connectionStr);
|
|
}
|
|
private void OpenDB(string connectionStr)
|
|
{
|
|
try
|
|
{
|
|
dbConnection = new SqliteConnection(connectionStr);
|
|
dbConnection.Open();
|
|
isOpen = true;
|
|
Debug.Log("数据库连接成功!");
|
|
}
|
|
catch
|
|
{
|
|
isOpen = false;
|
|
Debug.Log("数据库连接失败");
|
|
throw new Exception("数据库连接异常!");
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 断开数据库连接
|
|
/// </summary>
|
|
public void CloseSqlConnectionDB()
|
|
{
|
|
if(dbCommand!=null)
|
|
{
|
|
dbCommand.Dispose();
|
|
}
|
|
dbCommand = null;
|
|
if(reader!=null)
|
|
{
|
|
reader.Close();
|
|
}
|
|
reader = null;
|
|
if(dbConnection!=null)
|
|
{
|
|
dbConnection.Close();
|
|
dbConnection.Dispose();
|
|
}
|
|
dbConnection = null;
|
|
Debug.Log("数据库连接已断开");
|
|
}
|
|
/// <summary>
|
|
/// 根据键入的命令,操作数据库
|
|
/// </summary>
|
|
/// <param name="sqlQuery">需要读取的方式及内容</param>
|
|
/// <returns></returns>
|
|
public SqliteDataReader ExecuteQuery(string sqlQuery)
|
|
{
|
|
dbCommand = dbConnection.CreateCommand();
|
|
dbCommand.CommandText = sqlQuery;
|
|
reader = dbCommand.ExecuteReader();
|
|
return reader;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 直接操作数据库的接口
|
|
/// </summary>
|
|
/// <param name="sqliteParameters"></param>
|
|
/// <param name="CommandText"></param>
|
|
/// <returns></returns>
|
|
public SqliteDataReader ExecuteQuery(SqliteParameter[] sqliteParameters, string CommandText)
|
|
{
|
|
dbCommand = dbConnection.CreateCommand();
|
|
dbCommand.Parameters.AddRange(sqliteParameters);
|
|
dbCommand.CommandText = CommandText;
|
|
reader = dbCommand.ExecuteReader();
|
|
return reader;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 读取整张数据表
|
|
/// </summary>
|
|
/// <param name="tableName"></param>
|
|
/// <returns></returns>
|
|
public SqliteDataReader ReaderFullTable( string tableName)
|
|
{
|
|
string query = "SELECT * FROM " + tableName;
|
|
return ExecuteQuery(query);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新指定数据表内的数据
|
|
/// </summary>
|
|
/// <returns>The values.</returns>
|
|
/// <param name="tableName">数据表名称</param>
|
|
/// <param name="colNames">字段名</param>
|
|
/// <param name="colValues">字段名对应的数据</param>
|
|
/// <param name="key">关键字</param>
|
|
/// <param name="value">关键字对应的值</param>
|
|
public bool UpdateValues(string tableName,string[] colNames,string[] colValues,string key,string operation,string value)
|
|
{
|
|
//当字段名称和字段数值不对应时引发异常
|
|
if(colNames.Length!=colValues.Length) {
|
|
throw new SqliteException("colNames.Length!=colValues.Length");
|
|
}
|
|
|
|
string queryString = "UPDATE " + tableName + " SET " + colNames[0] + "=" + $"'{colValues[0]}'";
|
|
for(int i=1; i<colValues.Length; i++)
|
|
{
|
|
queryString+=", " + colNames[i] +$"='{colValues[i]}'" ;
|
|
}
|
|
queryString += " WHERE " + key + operation + $" '{value}' ";
|
|
return ExecuteQuery(queryString).RecordsAffected>0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除指定数据表内的数据
|
|
/// </summary>
|
|
/// <returns>The values.</returns>
|
|
/// <param name="tableName">数据表名称</param>
|
|
/// <param name="colNames">字段名</param>
|
|
/// <param name="colValues">字段名对应的数据</param>
|
|
public bool DeleteValuesOR(string tableName,string[] colNames,string[] operations,string[] colValues)
|
|
{
|
|
//当字段名称和字段数值不对应时引发异常
|
|
if(colNames.Length!=colValues.Length || operations.Length!=colNames.Length || operations.Length!=colValues.Length) {
|
|
throw new SqliteException("colNames.Length!=colValues.Length || operations.Length!=colNames.Length || operations.Length!=colValues.Length");
|
|
}
|
|
|
|
string queryString = "DELETE FROM " + tableName + " WHERE " + colNames[0] + operations[0] + colValues[0];
|
|
for(int i=1; i<colValues.Length; i++)
|
|
{
|
|
queryString+="OR " + colNames[i] + operations[0] + colValues[i];
|
|
}
|
|
return ExecuteQuery(queryString).RecordsAffected > 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除指定数据表内的数据
|
|
/// </summary>
|
|
/// <returns>The values.</returns>
|
|
/// <param name="tableName">数据表名称</param>
|
|
/// <param name="colNames">字段名</param>
|
|
/// <param name="operations">运算符</param>
|
|
/// <param name="colValues">字段名对应的数据</param>
|
|
public bool DeleteValuesAND(string tableName,string[] colNames,string[] operations,string[] colValues)
|
|
{
|
|
//当字段名称和字段数值不对应时引发异常
|
|
if(colNames.Length!=colValues.Length || operations.Length!=colNames.Length || operations.Length!=colValues.Length) {
|
|
throw new SqliteException("colNames.Length!=colValues.Length || operations.Length!=colNames.Length || operations.Length!=colValues.Length");
|
|
}
|
|
string queryString = "DELETE FROM " + tableName + " WHERE " + colNames[0] + operations[0] + colValues[0];
|
|
for(int i=1; i<colValues.Length; i++)
|
|
{
|
|
queryString+=" AND " + colNames[i] + operations[i] + colValues[i];
|
|
}
|
|
return ExecuteQuery(queryString).RecordsAffected>0;
|
|
}
|
|
|
|
|
|
///<summary>
|
|
///在数据库中创建表格
|
|
///</summary>
|
|
///<param name="name">表格名称</param>
|
|
///<param name="col">表格所有的列名</param>
|
|
///<param name="colType">表格所有列所对应的格式</param>
|
|
///<returns></returns>
|
|
public SqliteDataReader CreatTable(string name,string [] col,string []colType)
|
|
{
|
|
if(col.Length!=colType.Length)
|
|
{
|
|
throw new SqliteException("创建的数据类型与数据本身未对应!");
|
|
}
|
|
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 插入表格内容
|
|
/// </summary>
|
|
/// <param name="tableName">表格名称</param>
|
|
/// <param name="values">插入的值,需对应数据库中该表格的行格式</param>
|
|
/// <returns></returns>
|
|
public SqliteDataReader InsterInto(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>
|
|
/// 根据条件查找相应的值
|
|
/// </summary>
|
|
/// <param name="tableName">表格命</param>
|
|
/// <param name="items">需要得到值的列名</param>
|
|
/// <param name="key">条件的列名</param>
|
|
/// <param name="value">条件值</param>
|
|
/// <returns></returns>
|
|
public SqliteDataReader Select(string tableName, string[] items, string[] key,string[] value)
|
|
{
|
|
if(key.Length!=value.Length)
|
|
{
|
|
throw new SqliteException("比较条件未满足!");
|
|
}
|
|
string query = "SELECT " + items[0];
|
|
for (int i = 1; i < items.Length; i++)
|
|
{
|
|
query += "," + items[i];
|
|
}
|
|
query += " FROM " + tableName + " WHERE " + key[0] + "=" + $"'{value[0]}'";
|
|
for (int i = 1; i < key.Length; i++)
|
|
{
|
|
query += " AND " + key[i] + "=" + $"'{value[i]}'";
|
|
}
|
|
return ExecuteQuery(query);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询一个表中指定列的所有数据
|
|
/// </summary>
|
|
/// <param name="tableName"></param>
|
|
/// <param name="item">列名称</param>
|
|
/// <returns></returns>
|
|
public SqliteDataReader GetAllLineMess(string tableName,string item)
|
|
{
|
|
string query="SELECT DISTINCT "+item+" FROM "+tableName;
|
|
return ExecuteQuery(query);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 按时间段查找所有的值
|
|
/// </summary>
|
|
/// <param name="tableName"></param>
|
|
/// <param name="startTime">开始时间 注意格式为"yyyy-m-dd hh:mm:ss"</param>
|
|
/// <param name="finishTime">结束时间 注意格式为"yyyy-m-dd hh:mm:ss"</param>
|
|
/// <returns></returns>
|
|
public SqliteDataReader SelectTime(string tableName,string key,string startTime,string finishTime)
|
|
{
|
|
string query = "SELECT * FROM " + tableName + " WHERE " + key + " BETWEEN " + $"'{startTime}'" + " AND " + $"'{finishTime}'";
|
|
return ExecuteQuery(query);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据一个键和值查找
|
|
/// </summary>
|
|
/// <param name="tableName"></param>
|
|
/// <param name="key"></param>
|
|
/// <param name="value"></param>
|
|
/// <returns></returns>
|
|
public SqliteDataReader Select(string tableName, string key, string value)
|
|
{
|
|
string query = "SELECT * FROM " + tableName + " WHERE " + key + "=" +$"'{value}'" ;
|
|
return ExecuteQuery(query);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据时间段和一个键和值进行查找
|
|
/// </summary>
|
|
/// <param name="tableName"></param>
|
|
/// <param name="timeKey"></param>
|
|
/// <param name="startTime">注意格式为"yyyy-m-dd hh:mm:ss"</param>
|
|
/// <param name="finishTime">注意格式为"yyyy-m-dd hh:mm:ss"</param>
|
|
/// <param name="nameKey"></param>
|
|
/// <param name="nameValue"></param>
|
|
/// <returns></returns>
|
|
public SqliteDataReader SelectDataAndName(string tableName, string timeKey, string startTime, string finishTime,string nameKey,string nameValue)
|
|
{
|
|
string query = "SELECT * FROM " + tableName + " WHERE " + timeKey + " BETWEEN " +$"'{startTime}'" + " AND " + $"'{finishTime}'" + " AND " + nameKey + "=" + $"'{nameValue}'";
|
|
return ExecuteQuery(query);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据多个条件查询所有数据
|
|
/// </summary>
|
|
/// <param name="tableName"></param>
|
|
/// <param name="key"></param>
|
|
/// <param name="value"></param>
|
|
/// <returns></returns>
|
|
public SqliteDataReader Select(string tableName, string[] key, string[] value)
|
|
{
|
|
string query = "SELECT *";
|
|
query += " FROM " + tableName + " WHERE " + key[0] + "=" + $"'{value[0]}'";
|
|
for (int i = 1; i < key.Length; i++)
|
|
{
|
|
query += " AND " + key[i] + "=" + $"'{value[i]}'";
|
|
}
|
|
return ExecuteQuery(query);
|
|
}
|
|
|
|
|
|
|
|
}
|