1.背景介绍

使用Unity管理较多数据时,数据库的读写便成了较为关键操作。写入不必多说,许多博客都有介绍。而读取则是一个麻烦事,如果使自己读取的数据和结构便于修改,不出错,成了我首先考虑的问题(性能啥的暂且不谈)。

2.代码

using MySql.Data.MySqlClient;
using System.Collections.Generic;
using System.Data;
using System.Text;
using Newtonsoft.Json.Linq;public static class MySqlTool
{private static string openSql ="database=testranqi;" +"server=localhost;" +"user=root;" +"password=123456;" +"port=3306;" +"charSet=utf8;" +"POOLING=FALSE";#region 查询数据public static List<T> SelectData<T>() where T : BaseData{string sqlstr = "select * from userdatas";DataTable dt = SelectDatas(sqlstr);string json = DataTableToJson(dt, dt.Rows.Count);JArray jArray = JToken.Parse(json) as JArray;return jArray.ToObject<List<T>>();}/// <summary>/// 将选择的数据转换为DataTable类型/// </summary>/// <param name="sqlstr"></param>/// <returns></returns>private static DataTable SelectDatas(string sqlstr){using (MySqlConnection conn = new MySqlConnection(openSql)){conn.Open();MySqlCommand cmd = new MySqlCommand(sqlstr, conn);MySqlDataAdapter adapter = new MySqlDataAdapter();adapter.SelectCommand = cmd;DataTable dt = new DataTable();adapter.Fill(dt);conn.Close();return dt;}}/// <summary>/// 将DataTable类型转为Json字符串/// </summary>/// <param name="dt"></param>/// <param name="count"></param>/// <returns></returns>private static string DataTableToJson(DataTable dt, int count){StringBuilder sbjson = new StringBuilder();sbjson.Append("[");if (dt != null){for (int i = 0; i < dt.Rows.Count; i++){if (i > 0){sbjson.Append(",");}sbjson.Append("{");foreach (DataColumn dc in dt.Columns){if (dt.Columns.IndexOf(dc) > 0){sbjson.Append(",");}sbjson.Append("\"" + dc.ColumnName + "\":\"" + dt.Rows[i][dc.ColumnName].ToString().Trim() + "\"");}sbjson.Append("}");}}sbjson.Append("]");return sbjson.ToString();}#endregion 查询数据
}

上述代码中,BaseData是欲读取的数据类的基类,用以限制数据范围,没有其他作用

using System;[Serializable]
public class BaseData
{}

3.思路介绍

读取数据库中的数据时,首先将数据转化成DataTable,再将DataTable转化为Json,再将Json转为所需要的数据类型。由于符合所需条件的数据往往不止一条,所以最终获取的应该是数据类型的List。
        (1)这么转化意义何在?

通过该方式,我们可以获取到所需要的任意数据类型,要求仅仅是C#类与数据库储存类的成员变量类型、变量名一致即可。如果要对储存的结构进行修改,也只需要修改C#类和数据库储存结构即可,无需更改读取代码。

并且,该库中所有表,所有数据都可以用该类型加以读取;如果要求对不同的类加以区分,只需要在该类基础上再封装一层即可,适用性广。

(2)手动构造json字符串

json小巧,便于理解也便于构造。如果有其他更适合的序列化/反序列化手段也可以使用,反正最终目的只有一个:使数据库的读取变得灵活,修改起来方便快捷。

对json的结构简单介绍如下:

json字符串分为两大类,一类是单体,称为JObject;一类是组合,称为JArray。

JObject可以反序列化为具体的一个类。其基本格式为 "name" = value,不同变量之间通过 “,” 隔开,整个类被一对大括号 “{}” 包起来。如现有Student类如下:

public class Student
{int id;string name;
}

现创建一个实例,id = 10086, name = "小明",则序列化之后

jsonObject == "{/"id/"=10086,/"name/"=/"小明/"}";

JArray则可以反序列化为一个数组,其可以转化为对应的数组、List等结构,不同的类之间通过 “,” 分隔,而整个数组被一对中括号 “[]” 包起来。现有一个数组Student[],其中有两个实例,分别是 id=10086的小明 和 id=10000的小红,则序列化之后

jsonArray == "[{/"id/"=10086,/"name/"=/"小明/"},{/"id/"=10000,/"name/"=/"小红/"}]";

Unity读取数据库的简单思路相关推荐

  1. java读取ACCESS数据库的简单示例

    java读取ACCESS数据库的简单示例  虽然简单,对初学者来说,如果没有一段可以成功执行的代码供参考,还真难调试  先用ACCESS建一个数据库 DB1.MDB,里面有一表"table1 ...

  2. 简单开发的android阅读器源码,包含了读取数据库和文件流处理功能

    原文:简单开发的android阅读器源码,包含了读取数据库和文件流处理功能 源代码下载地址:http://www.zuidaima.com/share/1838906559466496.htm 简单地 ...

  3. Unity 2D Spine 外发光实现思路

    Unity 2D Spine 外发光实现思路 前言 对于3D骨骼,要做外发光可以之间通过向法线方向延申来实现. 但是对于2D骨骼,各顶点的法线没有向3D骨骼那样拥有垂直于面的特性,那我们如何做2D骨骼 ...

  4. 绘制图形可以使用什么python数据库_python 读取数据库并绘图的实例

    python 读取数据库并绘图的实例 1.安装相应的库文件 sudo apt-get install python-mysqldb 2.数据库操作 import MySQLdb db = MySQLd ...

  5. jdbc mysql 返回游标_使用JdbcTemplate流式(游标)读取数据库

    前言 生产环境中经常使用数据库分页的方式来控制一次获取的数据量,而数据处理中经常会有另外一种场景: 从一个数据库表中读取所有数据进行处理并将结果保存在其他数据库或文件或NoSql数据库中. 这时候也可 ...

  6. 读取数据库信息构建视图字段的备注信息,方便程序代码生成

    在很多情况下,我们开发都需要有一个快速的代码生成工具用来提高开发效率,代码生成工具很多信息都是读取数据库的表.视图等元数据进行对象表信息的完善,有了这些信息,我们就可以在普通的实体类代码里面添加属性字 ...

  7. json怎么读取数据库_如何:使用Json插入数据库并从中读取

    json怎么读取数据库 在本文中,我们将为Speedment创建一个插件,该插件使用Gson生成序列化和反序列化逻辑,从而使其在数据库实体和JSON字符串之间进行映射非常容易. 这将有助于展示Spee ...

  8. java传入数据库生成柱状图_Java读取数据库数据生成柱状图

    此案例是用swing显示数据的.须要引入jfreechart相关包.不同版本号可能包不同样.本人用的是 此案例在ssi框架下会报错,不用框架就没问题. Java后台逻辑代码: public class ...

  9. jmeter提取mysql数据_通过jmeter读取数据库数据,并取值作为请求的入参

    为提升测试技能,督促自己学习.故写了这篇文章.测试小白一枚,最近感觉达到了自己认为的瓶颈期.总是有想法,想突破,但是无从入手.工具类用过fiddler.jmeter.charels.postman.. ...

最新文章

  1. Python在计算内存时值得注意的几个问题
  2. 小米note3无线显示电脑连接服务器,小米note3如何连接电脑 小米note3连接电脑没反应怎么办...
  3. 反射(操作MetaData)
  4. 呼叫中心如何规划好工作习惯
  5. 几何着色器与细分(镶嵌)着色器
  6. centos6中创建软raid方法
  7. SAP 电商云 Spartacus UI shipping method 切换时的 spinner 显示
  8. redis报错:jedis connection exception unexpected end of stream
  9. 风变的python课程怎么样_风的解释|风的意思|汉典“风”字的基本解释
  10. 干货集中营 ReactiveCocoa+RXSwift+MVVM
  11. ccf 路径解析 java_CCF 201604-3 路径解析
  12. JavaScript—获取参数(23)
  13. 帝豪gs车机系统wince_平顶山到河南,帝豪GS俱乐总部,帝豪GS两年用车感受
  14. Citrix XenApp/XenDesktop 7.15 LTSR发布
  15. 000-Opencv各版本汇总下载
  16. swotppt模板_swot分析ppt(最好swot模板)20285.ppt
  17. 微信40125错误的坑
  18. python给图片加边框,照片加边框,照片加描边,图片加描边,批量给图片加描边
  19. 傻码农嘚瑟啥,HR才是国内公司真正的中流砥柱!
  20. mysql 按每月自定天数统计数据

热门文章

  1. Java:BigDecimal的学习与使用
  2. 基于微信小程序的音乐播放器设计
  3. abb机器人编程手册_002.ABB机器人高级编程--String飞升篇
  4. Unity中单点和多点触控
  5. C程序设计语言之第1章 导言
  6. 用PS做法线,高光贴图的最简图文教程
  7. Opencv去除高光
  8. 分享几套免费漫画字体和卡通字体
  9. Java:File和IO流
  10. 灰狼优化算法(Grey Wolf Optimizer, GWO)