毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)

目  录

论文总页数:25页

1 引言... 1

1.1 项目背景... 1

1.2 本项目的应用价值... 1

1.3 本项目的相关开发技术... 1

2 SVG技术... 1

2.1 XML介绍... 1

2.2 SVG介绍... 2

2.3 SVG的特点... 2

2.4 SVG规范... 2

3 雨量分析系统的需求分析... 4

3.1 系统需求... 4

3.2 功能分析... 4

3.3 用例分析... 5

4 雨量分析系统的设计... 6

4.1 系统模块结构... 6

4.2 数据库的设计... 7

4.2.1 总体设计... 7

4.2.2 数据库表字段说明... 8

4.3 开发技术及过程... 10

4.3.1 三层架构... 10

4.3.2 SVG文档的表示... 14

5 系统实现... 15

5.1 雨量数据管理的实现... 15

5.2 雨量数据分析与SVG图像的生成... 16

5.3 使用Web Service方式提供开放的外部接口... 20

5.3.1 Web Service介绍... 20

5.3.2 使用Web Service的意义... 20

5.3.3 Web Service接口的实现... 21

6 系统测试... 21

结    论... 22

参考文献... 22

致    谢... 24

声    明... 25

1 引言

1.1 项目背景

雨量监测对于工农业生产以及人民生活中的灾害预防、有效利用水资源具有重要意义,建立完整高效的雨量监测系统显得非常有必要。雨量分析系统是应用于防汛、水文等部门的,用于辅助分析自动气象站雨量监测的数据。雨量分析系统通常都会生成一些图表,但由于这些图表是二进制格式的,其可重用性不高,而且这些系统通常都缺乏开放性,大量的数据无法提供给外部研究人员使用,造成资源浪费。

该自动站雨量分析系统在雨量分析领域中作了新的尝试,它采用了基于XML(eXtensible Markup Language,可扩展标记语言)的开放的SVG(Scalable Vector Graphics,可伸缩矢量图形)作为图形格式,在引入先进技术的同时,提高了系统的可重用性,而且该系统与Web服务的结合也使系统的开放性大大地提高。作为示例,该系统要实现对四川省部分市县的城市及雨量数据进行管理与分析,能查询各市县的历史雨量数据并以SVG格式的曲线图显示出来,实现简单地统计分析功能。作为一个完整的系统,还要实现对系统内各个模块以及用户权限的管理。

1.2 本项目的应用价值

本套系统是基于SVG的雨量分析系统,实现的主要功能是对各地收集的雨量数据加以分析,并以SVG矢量图形方式进行显示,使用户能够更加直观地了解某一区域的历史雨量。雨量分析系统主要应用于防汛、水文等部门,通过对各地雨量数据的统计与分析,来预防可能会造成的洪水灾害并有效的调配和利用水资源。

1.3 本项目的相关开发技术

该项目采用.NET开发,开发环境采用Visual Studio 2003,数据库采用MSSQLServer,并使用.NET的三层架构技术,使业务逻辑与数据表示隔离开来,提高系统的模块化程序;在图像显示上使用了基于XML的矢量图形语言SVG,并使用.NET XML DOM(Document Object Model,文档对象模型)来生成和操作SVG图形;并使用Web服务来提供外部接口,以提高系统的开放性。

2 SVG技术

2.1 XML介绍

XML是可扩展标记语言的简称,它定义了结构化表示数据的标准格式。XML是W3C(World Wide Web Consortium,万维网联盟)为适应互联网的发展而推出的新型Web语言,是国际标准化组织所制订的SGML(Standard Generalized Markup Language,标准通用标记语言)的子集。它是用于定义其他标识语言的一种元语言。它具有可扩展性、平台独立性、数据与表现分离以及结构化数据等特点,非常适合网络环境下的数据传输和表达。XML通过其可扩展性提供了一种通用的数据格式,不同的软件系统之间可以通过这种新的数据描述方式进行通信,从而实现完全的交互操作,这源于XML将结构化的数据表示为一个纯文本的特性。可以通过XML对信息加以规范化定义和描述,并且在互联网上进行数据的传输。SVG就是XML在图形图像领域的一个应用。

2.2 SVG介绍

SVG是一种基于XML的开放的标准文本式矢量图形描述语言,即它是用XML元语言定义的语言。SVG图像是与XML1.0兼容的文档,SVG元素是指示如何绘制图像的一些指令,阅读器解释这些指令,把SVG图像在指定设备上显示出来。使用SVG可以在网页上显示出各种各样的高质量的矢量图形,包括许多图像处理中常见的功能,如图形、文字、动画、颜色、滤镜效果等。最关键的是SVG完全用普通文本来描述,也就是说,这是一种专门为网络而设计的基于文本的图像格式。由于SVG是基于XML的,所以可扩展性很强,能够描述任何复杂的图像,甚至动态交互式图像。

2.3 SVG的特点

虽然SVG的“矢量描述”并不是一个全新的概念,但它综合了矢量图形、点阵图像和纯文字的优点,以一种标准将其统一起来描述。它由计算机根据矢量数据计算后绘制而成,相较于位图图像矢量图像有以下特点:(1)文件的大小与图形的复杂程度有关,而与图形的具体尺寸无关;(2)图形的显示尺寸可以无限缩放,变化后不影响图形的质量。正是由于矢量图像的这些特征,使得它尤其适合于网上传播。图片和交互在以前是两个独立的概念,而在SVG中,文字与图形并非封装于SVG内,而是可以借助DOM和脚本语言等手段与外界交互,使得在图片内进行交互成为可能,这是以往的图像所不能做到的。统一的标准和开放性是SVG的强大生命力所在。标准统一可增强网络的交流,结束目前业界各种格式并存的混乱局面;开放性则有利于日后的各种新的元素加入其中扩充其功能。SVG使用时,客户端的软件负责解释SVG文本并将其转化成实际的矢量图像,文字仍是文字,线条仍是线条,可在客户端即时修改,这也是SVG的一大特色。

2.4 SVG规范

SVG规范定义了6种类型的对象,包括矢量图形、图像、渐变填充、滤镜、可重用单元和文本。图形对象可以进行组合、添加样式、几何变换等操作。根据功能不同,这些主要对象可归结为基本要素对象和页面描述功能对象两大类,具体请见图1和图2所示。

毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第1张图片

图1 SVG基本要素

毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第2张图片

图2 SVG页面描述功能

框架元素,就是组成一个完整SVG文档的基本元素,主要包括元素和元素等等。<svg>元素是文档元素,必不可少的,它相当于指定一块画布,内部的所有图形元素都将显示在这块画布指定的区域中。因此它有一些标记位置的属性像x,y,width,height。<desc>和<title>元素是用来描述图像的注释性元素。还有一些表示基本图形的标记,如rect,circle等等,SVG图形就是通过组合这些基本的元素和组件,来生成复杂的图形的。</p> <h2 style="margin-left:0;text-align:left;">3 雨量分析系统的需求分析</h2> <h3 style="margin-left:0;text-align:justify;">3.1 系统需求</h3> <p style="margin-left:.0001pt;text-align:justify;">需求分析是一种软件工程活动,它在系统需求工程和软件设计间起到桥梁的作用,主要任务是将用户的需求变为软件的功能和性能描述。基于SVG的自动站雨量分析系统要实现对四川省部分市县及其雨量数据进行管理与分析,能够以各种时间方式查询各市县的历史雨量数据并以SVG格式的曲线图显示出来,要求实现简单地统计分析功能,例如统计同一时间段内两个不同地区的雨量数据,对其进行分析,并生成SVG图形以辅助工作人员判断某一时间数据点过高的城市是否有发生灾害的可能性。作为一个完整的系统,还要能够管理系统内各个模块及设置不同用户的权限。由于会涉及到大量数据,因此要有对数据库的管理,实现数据备份功能,以保障数据的安全性。</p> <p style="margin-left:.0001pt;text-align:justify;">系统功能模块主要包括以下几个方面:</p> <p style="margin-left:.0001pt;text-align:justify;">1、系统管理;</p> <p style="margin-left:.0001pt;text-align:justify;">2、雨量数据管理;</p> <p style="margin-left:.0001pt;text-align:justify;">3、城市信息管理;</p> <p style="margin-left:.0001pt;text-align:justify;">4、前台管理;</p> <p style="margin-left:.0001pt;text-align:justify;">5、数据备份。</p> <h3 style="margin-left:0;text-align:justify;">3.2 功能分析</h3> <p style="margin-left:.0001pt;text-align:justify;">以下按照不同的模块进行功能描述:</p> <p style="margin-left:.0001pt;text-align:justify;">1、系统管理实现以下四个功能:</p> <p style="margin-left:.0001pt;text-align:justify;">(1)模块管理:管理系统中所有模块,对模块进行添加、更新及删除;</p> <p style="margin-left:.0001pt;text-align:justify;">(2)用户管理:添加系统用户,选择对应的角色,对系统中已有用户进行更新(包括登陆密码及角色)、删除;</p> <p style="margin-left:.0001pt;text-align:justify;">(3)角色管理:新增、更新、删除系统角色,分配角色权限;</p> <p style="margin-left:.0001pt;text-align:justify;">(4)日志管理:能根据选择条件对已有日志进行查询、删除和下载。</p> <p style="margin-left:.0001pt;text-align:justify;">2、雨量数据管理页面管理后台的所有雨量数据,有如下功能:</p> <p style="margin-left:.0001pt;text-align:justify;">(1)数据查看:可根据选择条件(包括日期和城市选择)显示雨量数据,也可根据选择的显示方式,以SVG图形方式查看雨量数据;</p> <p style="margin-left:.0001pt;text-align:justify;">(2)数据录入:选择某一城市后,可以选择任意一天进行雨量数据输入;</p> <p style="margin-left:.0001pt;text-align:justify;">(3)数据更新:在选定城市某一天的雨量数据后,点击更新可以修改雨量数据。</p> <p style="margin-left:.0001pt;text-align:justify;">3、城市信息管理页面管理地图页面中出现的所有城市的雨量数据,通过输入城市名及选择上级城市新增城市数据,也可以对已有城市数据进行更新(修改名称或上级城市)、删除操作。</p> <p style="margin-left:.0001pt;text-align:justify;">4、前台管理页面放置了将前台查询页面,这一模块是整个系统的重点部分,包括地图管理、选择显示方式、选择查询方式并生成图形显示页面。区别于其它系统,本套系统对于数据图形使用了SVG这种文本式矢量图形描述语言。</p> <p style="margin-left:.0001pt;text-align:justify;">用户查询数据,并生成SVG曲线图的操作流程如图3所示。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/bc3fbc8b58a74353970b09a126eafe81.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第3张图片" height="364" src="http://img.e-com-net.com/image/info8/bc3fbc8b58a74353970b09a126eafe81.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图3 SVG页面描述功能</p> <p style="margin-left:.0001pt;text-align:justify;">5、系统的数据备份操作能够实现将数据库文件备份到本机上的指定目录下,需要时再进行数据恢复,以保证数据的安全性。备份管理有如下功能:</p> <p style="margin-left:.0001pt;text-align:justify;">(1)数据备份:利用SQLServer的备份操作backup database进行数据备份;</p> <p style="margin-left:.0001pt;text-align:justify;">(2)数据恢复:利用SQLServer的恢复操作restore database进行数据恢复。</p> <h3 style="margin-left:0;text-align:justify;">3.3 用例分析</h3> <p style="margin-left:.0001pt;text-align:justify;">系统全局管理员用例图如图4所示。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/124a9e7f08c44ab0933680708290893d.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第4张图片" height="364" src="http://img.e-com-net.com/image/info8/124a9e7f08c44ab0933680708290893d.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图4 系统全局管理员用例图</p> <h2 style="margin-left:0;text-align:left;">4 雨量分析系统的设计</h2> <h3 style="margin-left:0;text-align:justify;">4.1 系统模块结构</h3> <p style="margin-left:.0001pt;text-align:justify;">系统主要分为系统管理、雨量数据管理、城市信息管理、前台管理等几大模块,其结构关系如图5所示。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/e4d4110fbce64f5fb882242b248371ac.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第5张图片" height="364" src="http://img.e-com-net.com/image/info8/e4d4110fbce64f5fb882242b248371ac.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图5 系统模块结构</p> <h3 style="margin-left:0;text-align:justify;">4.2 数据库的设计</h3> <h4 style="margin-left:0;text-align:justify;">4.2.1 总体设计</h4> <p style="margin-left:.0001pt;text-align:justify;">数据库的E-R模型图如图6所示。图6中,用户在具有某些角色之后,才有权限使用系统功能,而不能直接使用,因此设计中将角色与系统功能关联起来,并将用户与系统功能隔离开来;日志的生成是在用户使用系统功能的过程中自动生成的,其中需要保存当前用户的ID和对应的系统功能的ID。</p> <p style="margin-left:.0001pt;text-align:center;"></p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/c7d1721c4ab24d53a0a3a5629d604a76.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第6张图片" height="364" src="http://img.e-com-net.com/image/info8/c7d1721c4ab24d53a0a3a5629d604a76.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图6 数据库E-R图</p> <h4 style="margin-left:0;text-align:justify;">4.2.2 数据库表字段说明</h4> <p style="margin-left:.0001pt;text-align:justify;">1、城市数据表(City)存储的是地图上所有城市的相关信息,具体见表1所示。</p> <p style="margin-left:.0001pt;text-align:center;">表1 城市数据表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">CityId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">城市号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">CityName</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">100</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">城市名称</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">3</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">FatherCityId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">上级城市号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">4</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">OrderId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">bigint</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">8</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">排序号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">5</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">CityDes</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">500</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">城市描述</p> </td> </tr> </tbody> </table> <p style="margin-left:.0001pt;text-align:justify;">2、每小时降雨量表(RainPerHour)存储的是城市中具体一天24小时的雨量数据,Hour01表示0~1时的雨量数据,依此类推,中间省略部分行,具体见表2所示。</p> <p style="margin-left:.0001pt;text-align:center;">表2 雨量数据表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">RecordID</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">记录号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">CityID</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">城市号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">3</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Year</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">年</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">4</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Month</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">月</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">5</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Day</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">日</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">6</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Hour01</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">0~1小时</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">7</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Hour12</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">1~2小时</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">8</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Hour23</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">2~3小时</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">9</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">……</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;"></p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Hour2223</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">22~23小时</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">11</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Hour2324</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">23~24小时</p> </td> </tr> </tbody> </table> <p style="margin-left:.0001pt;text-align:justify;">3、模块表(Func)存储的是系统中所有模块的信息,具体见表3所示。</p> <p style="margin-left:.0001pt;text-align:center;">表3 模块信息表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">FuncId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">110</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">模块号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">FuncName</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">50</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">模块名称</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">3</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">FatherFunc</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">上级模块号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">4</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">PagePath</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">100</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">页面路径</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">5</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">OrderId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">bigint</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">8</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">排序号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">6</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Des</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">200</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">描述</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">7</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">SystemId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;"></p> </td> </tr> </tbody> </table> <p style="margin-left:.0001pt;text-align:justify;">4、日志表(Log)中存储管理员对某一模块进行添加、修改等操作的记录,无论成功与否,系统都会自动记录相应的信息,具体见表4所示。</p> <p style="margin-left:.0001pt;text-align:center;">表4 日志信息表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">LogId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">日志号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">OptTime</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">datetime</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">8</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">操作时间</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">3</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">OptDes</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">100</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">操作描述</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">4</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">OptResult</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">操作结构</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">5</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">OptType</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">操作类型</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">6</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">UserId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">用户号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">7</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">FuncId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">110</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">模块号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">8</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">OptIP</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">操作者IP</p> </td> </tr> </tbody> </table> <p style="margin-left:.0001pt;text-align:justify;">5、用户表(User)中存储用户登陆系统的ID号、名称和密码等信息,具体见表5所示。</p> <p style="margin-left:.0001pt;text-align:center;">表5 用户表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">UserId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">用户号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">UserName</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">datetime</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">50</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">用户名</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">3</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">UserPwd</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">50</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">密码</p> </td> </tr> </tbody> </table> <p style="margin-left:.0001pt;text-align:justify;">6、用户角色关系表(UserRoleRel)存储用户在系统中属于哪一角色的信息,具体见表6所示。</p> <p style="margin-left:.0001pt;text-align:center;">表6 用户角色关系表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">UserId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">用户号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">RoleId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">角色号</p> </td> </tr> </tbody> </table> <p style="margin-left:.0001pt;text-align:justify;">7、角色表(Role)存储每一个角色的角色名及对它权限的描述,具体见表7所示。</p> <p style="margin-left:.0001pt;text-align:center;">表7 角色表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">RoleId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">角色号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">RoleName</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">50</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">角色名</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">3</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">Des</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">200</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">是</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">权限描述</p> </td> </tr> </tbody> </table> <p style="margin-left:.0001pt;text-align:justify;">8、角色权限关系表(RoleFuncRel)存储角色对于某一模块是否具有读取、增加、更新、删除等操作的权限,具体见表8所示。</p> <p style="margin-left:.0001pt;text-align:center;">表8 角色权限关系表</p> <table align="center" border="1"> <tbody> <tr> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">字段</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">字段名</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">数据类型</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">长度</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">允许为空</p> </td> <td style="background-color:#e5e5e5;border-color:#000000;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">备注</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">FuncId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">110</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">模块号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">2</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">RoleId</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">varchar</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">10</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">角色号</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">3</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">PRead</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">读取</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">4</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">PAdd</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">增加</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">5</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">PUpdate</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">更新</p> </td> </tr> <tr> <td style="border-color:#000000;vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">6</p> </td> <td style="vertical-align:top;width:67.05pt;"> <p style="margin-left:.0001pt;text-align:center;">PDelete</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">char</p> </td> <td style="vertical-align:top;width:66.4pt;"> <p style="margin-left:.0001pt;text-align:center;">1</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">否</p> </td> <td style="vertical-align:top;width:66.45pt;"> <p style="margin-left:.0001pt;text-align:center;">删除</p> </td> </tr> </tbody> </table> <h3 style="margin-left:0;text-align:justify;">4.3 开发技术及过程</h3> <h4 style="margin-left:0;text-align:justify;">4.3.1 三层架构</h4> <p style="margin-left:.0001pt;text-align:justify;">三层架构也称三层体系结构,即表现层、业务逻辑层和数据访问层。表现层主要指用户界面,它要求尽可能的简单,使最终用户不需要进行任何培训就能方便地访问信息;第二层就是业务逻辑层,也就是常说的中间件,所有的应用系统、应用逻辑、控制都在这一层,系统的复杂性也主要体现在业务逻辑层;最后的数据访问层存储大量的数据信息和数据逻辑,所有与数据有关的安全、完整性控制、数据的一致性、并发操作等都是在第三层完成。三层架构的层次关系见图7所示。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/4ee3617c440145748facfa014a037c62.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第7张图片" height="364" src="http://img.e-com-net.com/image/info8/4ee3617c440145748facfa014a037c62.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图7 三层架构示意图</p> <p style="margin-left:.0001pt;text-align:justify;">这些层相互之间独立性好,可以单独开发,单独测试。三层架构另一个优点是它的安全性,客户端只能通过上一层来访问下一层的服务,减少了入口点,把很多危险的系统功能都屏蔽了。</p> <p style="margin-left:.0001pt;text-align:justify;">表现层位于最上层,离用户最近,用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。通过表现层,用户输入数据、获取数据。表现层同时也提供一定的安全性,确保用户没有机会看到机密的信息。中间的业务逻辑层是表现层和数据访问层的桥梁,它响应表现层的用户请求,负责处理用户输入的信息,或者是将这些信息发送给数据访问层进行保存,或者是调用数据访问层中的函数再次读出这些数据。业务逻辑层也可以包括一些对“商业逻辑”描述的代码在里面。数据访问层定义和维护数据的完整性、安全性,它响应业务逻辑层的请求来访问数据,仅实现对数据的保存和读取操作。访问的数据可以是数据库系统、二进制文件、文本文档或是XML文档等等。</p> <p style="margin-left:.0001pt;text-align:justify;">本项目中.NET三层架构中各个包之间的关系结构如图8所示。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/c726d98153ec482483beb17f92b8ce1d.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第8张图片" height="364" src="http://img.e-com-net.com/image/info8/c726d98153ec482483beb17f92b8ce1d.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图8 三层架构名称空间关系图</p> <p style="margin-left:.0001pt;text-align:justify;">其中,Model命名空间中的类对应于数据库中的表,为整个架构提供方便的数据表示形式;IDAL和SQLServerDAL对应于数据访问层,IDAL命名空间中定义了一整套用于操作数据库的接口,具体的数据访问操作在SQLServerDAL命名空间中实现;DALFactory命名空间中定义了获取数据访问操作的方法,在BLL命名空间中,就使用这些方法来获取符合IDAL中定义的接口的对象,再用它来对数据库进行操作,显然它们属于业务逻辑层;而表现层对应于前台页面代码,包括获取用户响应和请求,再通过BLL来获取数据并返回给用户。</p> <p style="margin-left:.0001pt;text-align:justify;">下面给出具体例子说明数据和指令是如何在各层之间流动和传递的。</p> <p style="margin-left:.0001pt;text-align:justify;">首先,表现层中的某一对象调用业务逻辑层BLL中的Add函数,来向数据库中添加数据:</p> <p style="margin-left:.0001pt;text-align:justify;">BLL.SVGRAS_City.Add(city);</p> <p style="margin-left:.0001pt;text-align:justify;">其中city是Model.City类型的参数,BLL.SVGRAS_City.Add为被调用方法的完整路径。</p> <p style="margin-left:.0001pt;text-align:justify;">此时,数据流向业务逻辑层,指令执行到业务层,如下:</p> <p style="margin-left:.0001pt;text-align:justify;">public static string Add(SVGRAS.Model.SVGRAS_City model)</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       ISVGRAS_City dal=SVGRAS.DALFactory.SVGRAS_City.Create();</p> <p style="margin-left:.0001pt;text-align:justify;">       return dal.Add(model);</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">业务层接收到表现层传入的参数model,首先进行业务逻辑处理(比如数据完整性,合法性以及其他一些业务处理),然后调用工厂中相应的方法来创建相应的SQLServerDAL对象,以获得访问数据访问层的对象。</p> <p style="margin-left:.0001pt;text-align:justify;">工厂类中对应方法如下:</p> <p style="margin-left:.0001pt;text-align:justify;">public static SVGRAS.IDAL.ISVGRAS_City Create()</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       SQLServerDAL.SVGRAS_City obj=new SQLServerDAL.SVGRAS_City();</p> <p style="margin-left:.0001pt;text-align:justify;">       return obj;</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">此时,数据流向数据访问层,指令执行到数据访问层:</p> <p style="margin-left:.0001pt;text-align:justify;">public string Add(SVGRAS.Model.SVGRAS_City model)</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       model.CityID=Common.GetNextIdByTable("SVGRAS_City","CityID","SingleLayer",null,10);</p> <p style="margin-left:.0001pt;text-align:justify;">       model.OrderID=model.CityID;</p> <p style="margin-left:.0001pt;text-align:justify;">       StringBuilder strSql=new StringBuilder();</p> <p style="margin-left:.0001pt;text-align:justify;">       strSql.Append("insert into SVGRAS_City(CityID,FatherCityID,OrderID, CityName,CityDes) values (");</p> <p style="margin-left:.0001pt;text-align:justify;">       strSql.Append("'"+model.CityID+"',");</p> <p style="margin-left:.0001pt;text-align:justify;">       strSql.Append("'"+model.FatherCityID+"',");</p> <p style="margin-left:.0001pt;text-align:justify;">       strSql.Append(""+model.OrderID+",");</p> <p style="margin-left:.0001pt;text-align:justify;">       strSql.Append("'"+model.CityName+"',");</p> <p style="margin-left:.0001pt;text-align:justify;">       strSql.Append("'"+model.CityDes+"')");</p> <p style="margin-left:.0001pt;text-align:justify;">       DbHelperSQL.ExecuteSql(strSql.ToString());</p> <p style="margin-left:.0001pt;text-align:justify;">       return model.CityID;</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">在数据访问层,通过调用存储过程的方式,将数据传递到数据库,并执行相应的操作。DbHelperSQL.ExecuteSql()表示封装好的方法,strSql.ToString()放置添加语句。此时,调用DbHelperSQL.ExecuteSql(),执行SQL语句。</p> <p style="margin-left:.0001pt;text-align:justify;">public static int ExecuteSql(string SQLString)</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       using (SqlConnection connection = new SqlConnection(connectionString))</p> <p style="margin-left:.0001pt;text-align:justify;">       {</p> <p style="margin-left:.0001pt;text-align:justify;">              using (SqlCommand cmd = new SqlCommand(SQLString,connection))</p> <p style="margin-left:.0001pt;text-align:justify;">              {</p> <p style="margin-left:.0001pt;text-align:justify;">                     try</p> <p style="margin-left:.0001pt;text-align:justify;">                     {</p> <p style="margin-left:.0001pt;text-align:justify;">                            connection.Open();</p> <p style="margin-left:.0001pt;text-align:justify;">                            int rows=cmd.ExecuteNonQuery();</p> <p style="margin-left:.0001pt;text-align:justify;">                            return rows;</p> <p style="margin-left:.0001pt;text-align:justify;">                     }</p> <p style="margin-left:.0001pt;text-align:justify;">                     catch(System.Data.SqlClient.SqlException E)</p> <p style="margin-left:.0001pt;text-align:justify;">                     {</p> <p style="margin-left:.0001pt;text-align:justify;">                            connection.Close();</p> <p style="margin-left:.0001pt;text-align:justify;">                            throw new Exception(E.Message);</p> <p style="margin-left:.0001pt;text-align:justify;">                     }</p> <p style="margin-left:.0001pt;text-align:justify;">              }</p> <p style="margin-left:.0001pt;text-align:justify;">       }</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">到此,完成了一条城市数据的添加操作。</p> <h4 style="margin-left:0;text-align:justify;">4.3.2 SVG文档的表示</h4> <p style="margin-left:.0001pt;text-align:justify;">SVG文档的生成使用了.NET XML程序集,它提供了一整套封装了XML操作的类,可以很方便的创建和处理XML文档,它的整体结构符合文档对象模型的定义。将SVG文档用DOM表示,其结构见图9所示。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/dd58696a29944ba397579615370e51ae.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第9张图片" height="364" src="http://img.e-com-net.com/image/info8/dd58696a29944ba397579615370e51ae.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图9 SVG文档的DOM对象结构</p> <p style="margin-left:.0001pt;text-align:justify;">图9对应的XML文档部分代码如下:</p> <pre style="margin-left:.0001pt;"><?xml version="1.0" standalone="yes"?></pre> <pre style="margin-left:.0001pt;"><svg viewBox="0 0 500 600"></pre> <pre style="margin-left:.0001pt;">  <text x="10" y="20" stroke="red"></pre> <pre style="margin-left:.0001pt;">    成都信息工程学院</pre> <pre style="margin-left:.0001pt;">  </text></pre> <pre style="margin-left:.0001pt;"></svg></pre> <h2 style="margin-left:0;text-align:left;">5 系统实现</h2> <h3 style="margin-left:0;text-align:justify;">5.1 雨量数据管理的实现</h3> <p style="margin-left:.0001pt;text-align:justify;">在雨量数据管理页面中进行雨量数据录入时,必须先选中要添加雨量数据的城市及日期,点击“确定”后系统首先查看是否有该城市这一天的数据,有的话就直接显示,没有的话会创建一条新的雨量数据记录,自动生成随机数作为这一天24小时的雨量数据,并将数据写入数据库中。这里创建新雨量数据记录是基于三层架构来做的,首先创建Model.SVGRAS_RainPerHour对象,然后将数据保存到其成员变量中,再调用BLL.SVGRAS_RainPerHour.Add方法来将此对象包含的数据写入到数据库中。其相关代码如下:</p> <p style="margin-left:.0001pt;text-align:justify;">DataTable table1=null;</p> <p style="margin-left:.0001pt;text-align:justify;">if(this.RecordID!=null)//如果是修改的话,则返回的有RecordID则显示被修改的雨量数据</p> <p style="margin-left:.0001pt;text-align:justify;">       table1=BLL.SVGRAS_RainPerHour.GetList("RecordID="+this.RecordID).Tables[0]; //获取已有条件的雨量数据</p> <p style="margin-left:.0001pt;text-align:justify;">else if(this.RecordID==null || this.RecordID=="")</p> <p style="margin-left:.0001pt;text-align:justify;">       table1=BLL.SVGRAS_RainPerHour.GetList("CityID="+this.SelectedCity+" and Year="+this.Year+" and Month= "+this.Month+" and Day="+this.Day).Tables[0];</p> <p style="margin-left:.0001pt;text-align:justify;">if (table1.Rows.Count>0)</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       this.dgData.DataSource=table1;</p> <p style="margin-left:.0001pt;text-align:justify;">       this.dgData.DataBind();</p> <p style="margin-left:.0001pt;text-align:justify;">       this.RecordID=table1.Rows[0]["RecordID"].ToString();</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">else if (table1.Rows.Count<1)</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       //string temp="0";</p> <p style="margin-left:.0001pt;text-align:justify;">       Random rand = new Random();</p> <p style="margin-left:.0001pt;text-align:justify;">       SVGRAS.Model.SVGRAS_RainPerHour model=new SVGRAS.Model.SVGRAS_RainPerHour();</p> <p style="margin-left:.0001pt;text-align:justify;">       model.CityID=this.SelectedCity;</p> <p style="margin-left:.0001pt;text-align:justify;">       model.Year=this.Year;</p> <p style="margin-left:.0001pt;text-align:justify;">       model.Month=this.Month;</p> <p style="margin-left:.0001pt;text-align:justify;">       model.Day=this.Day;</p> <p style="margin-left:.0001pt;text-align:justify;">       model.hour01=rand.Next(0,200).ToString ();</p> <p style="margin-left:.0001pt;text-align:justify;">       model.hour12=rand.Next(0,200).ToString ();</p> <p style="margin-left:.0001pt;text-align:justify;">       //model.hournn=…;        </p> <p style="margin-left:.0001pt;text-align:justify;">       SVGRAS.BLL.SVGRAS_RainPerHour.Add(model);</p> <p style="margin-left:.0001pt;text-align:justify;">       DataTable table2=BLL.SVGRAS_RainPerHour.GetList( "CityID="+this.SelectedCity+" and Year="+this.Year+" and Month= "+this.Month+" and Day="+this.Day).Tables[0];</p> <p style="margin-left:.0001pt;text-align:justify;">       this.dgData.DataSource=table2;</p> <p style="margin-left:.0001pt;text-align:justify;">       this.dgData.DataBind();</p> <p style="margin-left:.0001pt;text-align:justify;">       this.RecordID=table2.Rows[0]["RecordID"].ToString();</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">页面效果如图10所示。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/4a1db9ea682345a09a72537f6379738b.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第10张图片" height="364" src="http://img.e-com-net.com/image/info8/4a1db9ea682345a09a72537f6379738b.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图10 雨量数据录入界面</p> <p style="margin-left:.0001pt;text-align:justify;">在实际应用中,这里生成的数据全部为0,而具体的数据需要通过数据更新功能来输入。这里采用自动生成数据方式,是为了方便系统的测试与演示。用户要填入新的雨量数据,需要点击更新按钮进入数据更新页面,在其中填入新数据后点击提交按钮完成更新。</p> <h3 style="margin-left:0;text-align:justify;">5.2 雨量数据分析与SVG图像的生成</h3> <p style="margin-left:.0001pt;text-align:justify;">1、获取用户设置的查询参数</p> <p style="margin-left:.0001pt;text-align:justify;">用户在查询页面中设置相应的查询参数,如查询方式、查询日期等等,并点击确定按钮(即选择某一城市)后,程序首先会验证用户的参数设置是否正确,若不正确,则弹出错误提示;若通过验证,再按照用户设置的查询参数传到后续程序中。</p> <p style="margin-left:.0001pt;text-align:justify;">这里的验证分为两部分,一部分是在浏览器端进行的,使用javascript代码,在向服务器发送数据前完成验证,这里的验证是测试用户输入的数据是否合法,如日期格式是否正确,参数是否设置完整等等,如果用户设置的是按多日查询,却只设置了起始日期,那么就不会通过验证。只有通过验证才会将参数数据发送到服务器端,这样可以在一定程度上减轻服务器端的压力。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/6f676e2f4979422796614c43a90c00cd.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第11张图片" height="364" src="http://img.e-com-net.com/image/info8/6f676e2f4979422796614c43a90c00cd.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图11 前台界面</p> <p style="margin-left:.0001pt;text-align:justify;">另一部分验证是在服务器端进行的,它主要验证用户是否拥有操作权限,以及数据库中是否存在数据。只有通过验证后,才能在数据库中查询相应的雨量数据。</p> <p style="margin-left:.0001pt;text-align:justify;">2、从数据库中查询数据</p> <p style="margin-left:.0001pt;text-align:justify;">按照用户设置的查询模式,转到相应模式的查询代码中。然后再根据查询参数,从数据库中获取相应的数据。如:用户设置的查询模式为按天查询,查询城市为成都,日期为2007-5-27,然后调用strWhere()方法来生成查询参数,再传入三层架构中的业务逻辑层中的getList()方法,就得到了查询的结果,代码如下:</p> <p style="margin-left:.0001pt;text-align:justify;">DataTable table1=BLL.SVGRAS_RainPerHour.GetList(strWhere("days")).Tables[0];</p> <p style="margin-left:.0001pt;text-align:justify;">3、对数据进行分析处理,并组织为适合显示的形式</p> <p style="margin-left:.0001pt;text-align:justify;">前面查询得到的是一个DataTable表,里面的数据是与数据库中对应起来的,但这样的数据却不便于生成图像,因此要对它进行重组,转换为雨量数据和相关文字信息。在这里定义了一个类RainfallData来辅助,这个类包含了城市信息、时间信息、相应的雨量信息等等,具体代码如下:</p> <p style="margin-left:.0001pt;text-align:justify;">public class RainfallData</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       public string cityId;</p> <p style="margin-left:.0001pt;text-align:justify;">       public string cityName;</p> <p style="margin-left:.0001pt;text-align:justify;">       public int max = 0;</p> <p style="margin-left:.0001pt;text-align:justify;">       public int min = 1000000;</p> <p style="margin-left:.0001pt;text-align:justify;">       public double average;</p> <p style="margin-left:.0001pt;text-align:justify;">       public string startY;</p> <p style="margin-left:.0001pt;text-align:justify;">       public string startM;</p> <p style="margin-left:.0001pt;text-align:justify;">       public string startD;</p> <p style="margin-left:.0001pt;text-align:justify;">       public string endY;</p> <p style="margin-left:.0001pt;text-align:justify;">       public string endM;</p> <p style="margin-left:.0001pt;text-align:justify;">       public string endD;</p> <p style="margin-left:.0001pt;text-align:justify;">       //计算出最大最小值</p> <p style="margin-left:.0001pt;text-align:justify;">       public void calMaxMin ()</p> <p style="margin-left:.0001pt;text-align:justify;">       {</p> <p style="margin-left:.0001pt;text-align:justify;">              double tmp = 0;</p> <p style="margin-left:.0001pt;text-align:justify;">              for (int i=0; i < data.Length; ++i)</p> <p style="margin-left:.0001pt;text-align:justify;">              {</p> <p style="margin-left:.0001pt;text-align:justify;">                     if ( data[i] > max )</p> <p style="margin-left:.0001pt;text-align:justify;">                            max = data[i];</p> <p style="margin-left:.0001pt;text-align:justify;">                     else if ( data[i] < min )</p> <p style="margin-left:.0001pt;text-align:justify;">                            min = data[i];</p> <p style="margin-left:.0001pt;text-align:justify;">                     tmp += data[i];</p> <p style="margin-left:.0001pt;text-align:justify;">              }</p> <p style="margin-left:.0001pt;text-align:justify;">       average =  (tmp / data.Length);</p> <p style="margin-left:.0001pt;text-align:justify;">       }</p> <p style="margin-left:.0001pt;text-align:justify;">       public int[] data;</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">然后将每一组雨量数据都存到该类的对象中,并将这些对象传给SVG显示模块。</p> <p style="margin-left:.0001pt;text-align:justify;">此外,若查询模式是多日查询或多月查询,还需要将数据按日或月累加起来。</p> <p style="margin-left:.0001pt;text-align:justify;">4、使用XML对象来生成SVG文档</p> <p style="margin-left:.0001pt;text-align:justify;">项目中定义了一个SVG文档类SVGDocument,它继承自XMLDocument,在它内部封装了加载SVG文档元素的操作,以后创建好文档中的元素后就直接插入到该文档中即可。另外定义了一个辅助类SVGHelper,里面定义了一些向某个结点添加基本SVG元素的操作,以方便向文档中添加SVG图形。现在,创建一个SVG文档,并且添加一条线、一个圆、一个矩形和一行文本的代码如下:</p> <p style="margin-left:.0001pt;text-align:justify;">SVGDocument document = new SVGDocument(800,700);</p> <p style="margin-left:.0001pt;text-align:justify;">SVGHelper.InsertLine (document.DocumentElement, 1,1,300,350, Color.BlueViolet, 5);</p> <p style="margin-left:.0001pt;text-align:justify;">SVGHelper.InsertCircle (document.DocumentElement,100,100,50,Color.Red,Color.Gold,2.5);</p> <p style="margin-left:.0001pt;text-align:justify;">SVGHelper.InsertRect (document.DocumentElement,300,400,80,70,Color.Gray,Color.Honeydew,3);</p> <p style="margin-left:.0001pt;text-align:justify;">SVGHelper.InsertText (document.DocumentElement,"网络工程",10,100,15,"楷体",Color.Blue);</p> <p style="margin-left:.0001pt;text-align:justify;">5、向SVG文档中添加坐标系</p> <p style="margin-left:.0001pt;text-align:justify;">为了方便坐标系的创建,定义了坐标系类CoordinateFrame,在它里面封装了坐标系的细节,并提供创建坐标系、向坐标系中添加点、添加线等接口操作,相应的也定义了坐标类Coordinate,来对坐标信息进行封装。现在,向SVG文档中添加坐标系,并向坐标系中添加一系列点和线的代码如下:</p> <p style="margin-left:.0001pt;text-align:justify;">CoordinateFrame frame = new CoordinateFrame (10,10,600,500,5,9,document.DocumentElement);</p> <p style="margin-left:.0001pt;text-align:justify;">Coordinate point = new Coordinate(50,40);</p> <p style="margin-left:.0001pt;text-align:justify;">frame.InsertPoint(point);</p> <p style="margin-left:.0001pt;text-align:justify;">Coordinate []points = new Coordinate [5];</p> <p style="margin-left:.0001pt;text-align:justify;">//... 在此获取坐标数据 ...</p> <p style="margin-left:.0001pt;text-align:justify;">frame.InsertLine (points,"成都",Color.Chocolate);</p> <p style="margin-left:.0001pt;text-align:justify;">6、将数据转换为坐标点的数组</p> <p style="margin-left:.0001pt;text-align:justify;">处理按照用户参数查询获得的数据,并将其转换为对应于坐标系中的坐标点的数组。这里需要求出所有雨量数据的最大值和最小值,并计算出合理的纵坐标的坐标点数,然后将每一个雨量数据除以一个纵坐标点代表的雨量数据,以转换为坐标位置。然后将坐标点添加到坐标系上,并连成曲线。</p> <p style="margin-left:.0001pt;text-align:justify;">7、添加相应的文字标签及均值线</p> <p style="margin-left:.0001pt;text-align:justify;">在点上以及线上面,加上说明文字。不同的线会用不同的颜色显示,并标注相应的说明文字。同时,将求出的每组数据的均值以均值线的方式画到坐标系上。</p> <p style="margin-left:.0001pt;text-align:justify;">8、修改响应类型为SVG文档类型(image/svg+xml)</p> <p style="margin-left:.0001pt;text-align:justify;">将要返回的响应类型改为image/svg+xml,这样浏览器才会将页面作为SVG图形来解析。然后将SVG文档(以XML对象表示)的内容发送到客户端。具体代码如下:</p> <p style="margin-left:.0001pt;text-align:justify;">Response.ContentType="image/svg+xml";</p> <p style="margin-left:.0001pt;text-align:justify;">document.Save( Response.OutputStream );</p> <p style="margin-left:.0001pt;text-align:justify;">Response.Flush();</p> <p style="margin-left:.0001pt;text-align:justify;">Response.End();</p> <p style="margin-left:.0001pt;text-align:justify;">现在客户端就可以看到如图12所示的SVG格式的图形了。</p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/abb3caa8f5c444989b5fff637d54cd1a.jpg" target="_blank"><img alt="毕业设计:asp.net基于SVG的自动站雨量分析系统论文(源代码+论文)_第12张图片" height="364" src="http://img.e-com-net.com/image/info8/abb3caa8f5c444989b5fff637d54cd1a.jpg" width="650" style="border:1px solid black;"></a></p> <p style="margin-left:.0001pt;text-align:center;">图12 SVG图形生成界面</p> <h3 style="margin-left:0;text-align:justify;">5.3 使用Web Service方式提供开放的外部接口</h3> <h4 style="margin-left:0;text-align:justify;">5.3.1 Web Service介绍</h4> <p style="margin-left:.0001pt;text-align:justify;">Web Service是建立在HTTP协议、SOAP协议和UDDI等标准以及XML等技术之上的,其主要目标就是在现有的各种异构平台的基础上构建一个通用的,与平台和语言无关的接口层,各种不同平台之上的应用通过这个接口层来集成已有的服务。</p> <p style="margin-left:.0001pt;text-align:justify;">Web Service具有以下一些特征:</p> <p style="margin-left:.0001pt;text-align:justify;">1、完好的封装性:Web Service既然是一种部署在Web上的对象,自然具备对象的良好封装性。对使用者而言,只能看到该对象提供的功能列表。</p> <p style="margin-left:.0001pt;text-align:justify;">2、松散耦合:当一个Web Service的实现发生变化时,调用者完全不会感觉到。对调用者来说,只要调用的接口不变,其内部实现的任何变化对用户来说都是透明的。</p> <p style="margin-left:.0001pt;text-align:justify;">3、高度可集成能力:由于Web Service采用简单的、易于理解的XML作为接口描述,完全屏蔽了不同平台和系统的差异性,因此,任何符合协议的应用都可以集成已有的Web Service。</p> <h4 style="margin-left:0;text-align:justify;">5.3.2 使用Web Service的意义</h4> <p style="margin-left:.0001pt;text-align:justify;">使用Web Service可以引入很高的开放性,使得系统可以方便的集成到其它应用中,同时,也为系统的二次开发预留了很好的接口。此外,作为雨量数据分析系统,必然会涉及到大量的雨量数据,而这些雨量数据是从全国各地的设备终端采集汇总而来的,一旦有了这一开放的接口,所有的数据都可以通过它来写入到数据库中。另外,这些雨量数据的采集是相当不容易的,一般的科研机构和学校是不可能获取如此大量的真实数据的,例如本套系统就无法获得到这些真实数据,只能通过随机数来生成假的数据。这样就限制了这些数据的科研作用。然而,通过Web Service来提供开放的接口后,所有的用户都可以通过它来很容易的获取这些雨量数据,还可以通过接口使用系统中已经做好的各种功能,避免了重复开发的浪费。因此,使用Web Service来提供开放的接口是有很大的积极意义的。</p> <h4 style="margin-left:0;text-align:justify;">5.3.3 Web Service接口的实现</h4> <p style="margin-left:.0001pt;text-align:justify;">在系统中只提供简单功能的实现,主要接口有:</p> <p style="margin-left:.0001pt;text-align:justify;">1、获取城市ID</p> <p style="margin-left:.0001pt;text-align:justify;">通过该接口可以查询指定城市在系统中分配的ID值,其参数为城市名称。在查询城市数据前,首先要通过此接口获得城市的ID值。</p> <p style="margin-left:.0001pt;text-align:justify;">2、获取雨量数据</p> <p style="margin-left:.0001pt;text-align:justify;">通过输入查询条件,来获得雨量数据。这里的查询条件就是SQL查询语句中的where子句,用户可以指定某一天、某几天或某几个月的等条件。例如最简单的查询“江油”的所有雨量数据的参数为“CityId = ‘0000000013’”。</p> <p style="margin-left:.0001pt;text-align:justify;">接口实现代码如下:</p> <p style="margin-left:.0001pt;text-align:justify;">[WebMethod]</p> <p style="margin-left:.0001pt;text-align:justify;">public string getCityId (string city)</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       return SVGRAS.BLL.SVGRAS_City.GetList ("CityName='" + city + "'").Tables[0].Rows[0]["CityId"].ToString ();</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <p style="margin-left:.0001pt;text-align:justify;">[WebMethod]</p> <p style="margin-left:.0001pt;text-align:justify;">public DataSet getRainData (string sql)</p> <p style="margin-left:.0001pt;text-align:justify;">{</p> <p style="margin-left:.0001pt;text-align:justify;">       return SVGRAS.BLL.SVGRAS_RainPerHour.GetList (sql);</p> <p style="margin-left:.0001pt;text-align:justify;">}</p> <h2 style="margin-left:0;text-align:left;">6 系统测试</h2> <p style="margin-left:.0001pt;text-align:justify;">在前台页面中,对每种查询方式都进行了测试,所有数据查询、分析以及图像生成功能都能正确工作。例如,选择同一城市不同时间段比较模式,并设置起止日期和时间,这里的日期跨越两个月,即4月30日到5月1日,设置显示均值线方式;点击城市名称就可以选择城市,并将其加边框标注出来,再次点击即可取消相应城市的选择,并去掉相应边框;点击确定按钮后,就会打开新的窗口显示查询结果。</p> <p style="margin-left:.0001pt;text-align:justify;">用户管理界面列出了系统当前的所有用户,点击“选择”选中一个用户后,可修改用户名、密码,并为用户指定系统角色。系统当前共有三种角色,角色的权限由管理员指定,例如要为系统管理员指定系统管理这一模块的权限,选中这一角色,在权限分配区选中相应的模块权限即可。角色的选择可以是一个或多个,默认角色选择为空,若没有为用户指定系统角色,则用户登陆系统后不会出现系统树型菜单,用户也就不能进行任何操作。</p> <p style="margin-left:.0001pt;text-align:justify;">日志是根据用户操作自动生成的,在后台管理中可以根据选择条件进行日志的查询、删除和下载,若选择条件为空则默认为选择所有日志。</p> <p style="margin-left:.0001pt;text-align:justify;">系统中的城市分为两级,每一个城市都有其上级城市。通过输入城市名称并选择上级城市后可新增一个城市,若要更新或删除城市,则先要点击对应的选择按钮来选中一个城市,然后可对选中的城市信息进行更新或删除等操作。</p> <h2 style="margin-left:0;text-align:center;">结    论</h2> <p style="margin-left:.0001pt;text-align:justify;">雨量分析系统实现了对四川省部分市县及其雨量数据的管理与分析功能,能够以各种方式(例如相同城市不同时间或相同时间不同城市)查询各市县的历史雨量数据,并以SVG格式的图形显示出来。此外还实现了管理系统内各个模块及设置不同用户权限的功能,以及数据库备份和还原功能。通过本项目的开发,对C#语言有了更多的体会,也更多地了解了B/S架构系统的开发。在开发过程中,学会了SVG这门新型的可伸缩矢量图形语言,在使用时体会到了这门语言的实用性及它带来的乐趣。</p> <p style="margin-left:.0001pt;text-align:justify;">在项目实现过程中也遇到过不少问题和困难,同时由于缺乏编程经验,在编写代码的过程中,碰到了很多难以解决的问题和障碍,在老师的指导和同学的帮助下,查找各种资料,这些问题得以解决,并积累了一定的开发经验。例如刚开始不太了解雨量数据如何转换为SVG图形来显示,便从网上找了一个现有的将数据显示为SVG格式的图形的库来使用。在查看各种相关资料,了解了SVG并进行深入学习后,反复尝试各种生成SVG图形的方法。由于SVG本身就是XML文档,因此选择了用生成XML文档的方式来生成SVG,并封装了SVG的基本图形元素,最终完成了一个较方便的创建SVG图形的工具类。</p> <p style="margin-left:.0001pt;text-align:justify;">当然,该雨量分析系统还是有很多不完善的地方。地图信息本来应该用SVG来组织和表示,这样可以将其中的各种数据元素分离出来,实现按选择条件在地图上显示城市及相应雨量数据的功能;而且SVG的交互效果没有体现出来,对雨量数据的分析也不够充分。但由于实现难度及时间限制,以上功能没能实现。</p> <h2 style="margin-left:0;text-align:center;">参考文献</h2> <p style="margin-left:.0001pt;text-align:justify;">[1] Joseph Bustos, Karli Watson[美]..NET Web服务入门经典——C#编程篇[M].侯彧译.北京:清华大学出版社,2003。</p> <p style="margin-left:.0001pt;text-align:justify;">[2] Dinar Dalvi, Joe Gray[美]..NET XML高级编程[M].英宇,林琪译.北京:清华大学出版社,2002。</p> <p style="margin-left:.0001pt;text-align:justify;">[3] Jesse Liberty, Dan Hurwitz[美].Programming ASP.NET[M].南京:东南大学出版社,2006。</p> <p style="margin-left:.0001pt;text-align:justify;">[4] 石磊,但正刚.ASP.NET数据库编程详解C#版[M].北京:高等教育出版社,2004。</p> <p style="margin-left:.0001pt;text-align:justify;">[5] 徐谡.ASP.NET应用与开发案例教程[M].北京:清华大学出版社,2005。</p> <p style="margin-left:.0001pt;text-align:justify;">[6] 李安渝.Web Services技术与实现[M].北京:国防工业出版社,2003。</p> <p style="margin-left:.0001pt;text-align:justify;">[7] 蔡月茹,柳面玲.Web Service基础教程[M].北京:清华大学出版社,2005。</p> <p style="margin-left:.0001pt;text-align:justify;">[8] Seely[美].SOAP XML跨平台Web Service开发技术[M].杨涛,杨晓云,王建桥译.北京:机械工业出版社,2002。</p> <p style="margin-left:.0001pt;text-align:justify;">[9] Bill Trippe,Kate Binder[美].SVG设计在下一代Web站点中使用可缩放矢量图形[M].高伟,英宇译.北京:机械工业出版社,2003。</p> <p style="margin-left:.0001pt;text-align:justify;"></p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1743593490442371072"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(课程设计,asp.net,数据库)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1892795922966966272.htm" title="MySQL 默认事务隔离级别及原因" target="_blank">MySQL 默认事务隔离级别及原因</a> <span class="text-muted">少林码僧</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>MySQL默认事务隔离级别及原因一、引言在MySQL数据库中,事务隔离级别决定了一个事务与其他事务之间的隔离程度。不同的隔离级别会对数据库的并发性能和数据一致性产生不同的影响。了解MySQL默认的事务隔离级别以及选择这个级别的原因,对于正确使用数据库事务和优化数据库性能至关重要。二、MySQL的事务隔离级别MySQL支持四种事务隔离级别,分别是:读未提交(Readuncommitted):一个事务</div> </li> <li><a href="/article/1892793018948317184.htm" title="redis的缓存击穿,雪崩,穿透" target="_blank">redis的缓存击穿,雪崩,穿透</a> <span class="text-muted">卑微的小鬼</span> <a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>缓存击穿(CacheBreakdown)指某个热点数据在缓存中过期或失效的瞬间,大量请求直接打到数据库上,导致数据库压力骤增。原因:热点数据在缓存中过期。大量并发请求同时访问该数据。解决方法:永不过期:对热点数据设置永不过期,但需要定期更新。互斥锁:在缓存失效时,使用互斥锁(如Redis的SETNX命令)确保只有一个请求去数据库加载数据,其他请求等待并重试。异步更新:在缓存即将过期时,异步更新缓存</div> </li> <li><a href="/article/1892787854875095040.htm" title="java八股文之Redis" target="_blank">java八股文之Redis</a> <span class="text-muted">qq_45923849</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>1.Rdis常见的使用场景缓存分布式锁(redision,setnx)计数器保存token消息队列延迟队列2.说明一下缓存雪崩,缓存穿透和缓存击穿以及解决方式1.缓存雪崩定义:缓存雪崩指的是当大量的缓存数据同时失效,或者Redis服务器突然宕机,导致后端数据库突然承受大量请求的压力,从而可能导致数据库崩溃的情况。解决:1.分散缓存过期时间:给缓存设置不同的过期时间,避免同时失效。2.使用Rdis集</div> </li> <li><a href="/article/1892783434208702464.htm" title="Spring Boot ShardingJDBC分库分表(草稿)" target="_blank">Spring Boot ShardingJDBC分库分表(草稿)</a> <span class="text-muted">dashalen</span> <a class="tag" taget="_blank" href="/search/SpringBoot/1.htm">SpringBoot</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>ShardingJDBC分库分表1.Maven引用org.apache.shardingspheresharding-jdbc-spring-boot-starter4.1.1org.springframework.bootspring-boot-starter-data-jpamysqlmysql-connector-java2.数据库和表格数据库*****_ch*****_hk*****_us</div> </li> <li><a href="/article/1892781414726823936.htm" title="使用EasyExcel实现Excel的导入导出以及使用过程中遇到的bug" target="_blank">使用EasyExcel实现Excel的导入导出以及使用过程中遇到的bug</a> <span class="text-muted">名字太俊不提也罢i</span> <a class="tag" taget="_blank" href="/search/EasyExcel/1.htm">EasyExcel</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/excel/1.htm">excel</a> <div>我对EasyExcel的理解:EasyExcel重写了POI对07版Excel的解析,可以把内存消耗从100M降低到10M以内,并且再大的Excel都不会造成内存溢出(OOM)。需要注意的是它只能读取Excel不能读图片。导入导出案例:EasyExcel读取数据并导入数据库导出Excel时生成下拉框、表头添加批注解决下拉框数据过多导致无法显示的bug引入EasyExcel的依赖com.alibab</div> </li> <li><a href="/article/1892767799160401920.htm" title="银河麒麟V10+qt5,12.11编译mysql驱动连接OceanBase数据库" target="_blank">银河麒麟V10+qt5,12.11编译mysql驱动连接OceanBase数据库</a> <span class="text-muted">小米的修行之路</span> <a class="tag" taget="_blank" href="/search/QT/1.htm">QT</a><a class="tag" taget="_blank" href="/search/oceanbase/1.htm">oceanbase</a><a class="tag" taget="_blank" href="/search/%E9%93%B6%E6%B2%B3%E9%BA%92%E9%BA%9F/1.htm">银河麒麟</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a> <div>1、下载mysql数据库,解压后里面包含编译所需要的lib和include文件夹,下载地址:https://www.mysql.com/downloads/选择适合自己系统的版本:解压后的文件夹中包含需要的lib和include文件夹:使用qt打开mysql源码项目:根据自己qt安装路径,找到项目:注释掉如图:</div> </li> <li><a href="/article/1892764787692072960.htm" title="或许我们都被分库分表约束了思维" target="_blank">或许我们都被分库分表约束了思维</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a> <div>作者:张俊杰##**概述**这篇文章没什么太多的干货,纯纯是一篇讨论和思考帖。从业数据库领域三年有余了,从分库分表中间件到数据库团队内核学到了很多东西。也接触了很多项目,包括TiDB、Vitess、Polardb、StarDB等等。国内的项目好像很多都聚焦于分库分表的概念,包括很多的数据库团队都在尝试这个概念的落地和沉溺于性能的跑分。最近我在预览MySQL官方,看到了Partitioning的概念</div> </li> <li><a href="/article/1892758213921665024.htm" title="ASP.NET MVC 下载文件" target="_blank">ASP.NET MVC 下载文件</a> <span class="text-muted">csdn_aspnet</span> <a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/asp.net/1.htm">asp.net</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a> <div>如何从MVC控制器(.NETFramework)下载文件。使用从ASP.NETMVC中的控制器下载任何文件类型FileStreamResult。注意:如果使用ASP.NETCore,请参阅此页面,如果想要将文件上传到服务器,请参阅此页面。//downloadazipfileasanattachmentpublicFileStreamResultDownloadZipFile(){stringpat</div> </li> <li><a href="/article/1892757852783702016.htm" title="YashanDB并发控制和一致性" target="_blank">YashanDB并发控制和一致性</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>本文内容来自YashanDB官网,原文内容请见https://doc.yashandb.com/yashandb/23.3/zh/%E6%A6%82%E5%BF%B5%...为了充分利用系统资源(内存、CPU、网络等),YashanDB允许多个会话并行访问、修改数据库内容,如果对并发操作没有加以控制,就会破坏数据库的完整性和一致性。YashanDB通过多版本并发控制、事务隔离级别以及锁来维护数据库</div> </li> <li><a href="/article/1892757598466273280.htm" title="YashanDB事务机制" target="_blank">YashanDB事务机制</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>本文内容来自YashanDB官网,原文内容请见https://doc.yashandb.com/yashandb/23.3/zh/%E6%A6%82%E5%BF%B5%...事务是包含一个或一组SQL语句的工作单元,将数据修改应用至数据库后,这些SQL语句全部被提交则数据修改生效,或全部被回滚则数据修改被撤销。YashanDB为每个事务分配全局唯一的事务ID作为标识,所有YashanDB事务都满足</div> </li> <li><a href="/article/1892746364312416256.htm" title="web网络安全:SQL 注入攻击" target="_blank">web网络安全:SQL 注入攻击</a> <span class="text-muted">爱编程的小庄</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a> <div>SQL注入攻击(SQLInjection)概述SQL注入(SQLInjection)是Web应用程序中最常见的安全漏洞之一。攻击者通过在应用程序的输入字段中插入恶意SQL代码,能够操控数据库执行非预期操作,导致数据泄露、篡改甚至系统完全失控。本文将详细介绍SQL注入的工作原理、常见类型、危害以及防御方法。SQL注入的工作原理SQL注入攻击的核心在于应用程序未正确验证或转义用户输入,导致恶意SQL代</div> </li> <li><a href="/article/1892742201390198784.htm" title="Django连接mysql数据库" target="_blank">Django连接mysql数据库</a> <span class="text-muted">NiHaoChiLeMa</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>前篇已配置好了Django的运行环境,接下来连接数据库,Django数据库默认保存在SQLite3上,但是不熟悉SQLite的操作,想更换为mysql数据库.一、新建数据库在mysql新建一个数据库,库名为:testsql二、配置Django项目环境1、配置settings.py在settings.py找到DATABASES,修改里面的参数为:DATABASES={'default':{'ENGI</div> </li> <li><a href="/article/1892735643163881472.htm" title="django连接mysql数据库" target="_blank">django连接mysql数据库</a> <span class="text-muted">独白不白</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>1.下载mysqlclient第三方库2.在settings.py里连接数据库(提前建好)DATABASES={'default':{'ENGINE':'django.db.backends.mysql','NAME':'学生信息','USER':'root','PASSWORD':'999123457','HOST':'localhost','POST':'3306',}}3.在models.p</div> </li> <li><a href="/article/1892733122995351552.htm" title="学习 `@PreDestroy`:Java EE/Jakarta EE 生命周期回调" target="_blank">学习 `@PreDestroy`:Java EE/Jakarta EE 生命周期回调</a> <span class="text-muted">和烨</span> <a class="tag" taget="_blank" href="/search/%E5%85%B6%E5%AE%83/1.htm">其它</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/java-ee/1.htm">java-ee</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>学习`@PreDestroy`:JavaEE/JakartaEE生命周期回调前言1.什么是`@PreDestroy`?2.`@PreDestroy`的用途3.使用`@PreDestroy`的条件4.代码示例运行结果:5.`@PreDestroy`的调用时机6.注意事项7.实际应用场景场景1:数据库连接管理场景2:文件资源释放8.总结前言在JavaEE(EnterpriseEdition)和Jaka</div> </li> <li><a href="/article/1892730468894306304.htm" title="算法(algorithm)、CS入门技能树测评和使用体验" target="_blank">算法(algorithm)、CS入门技能树测评和使用体验</a> <span class="text-muted">沉迷单车的追风少年</span> <a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E9%97%AE%E9%A2%98%E6%B1%87%E6%80%BB/1.htm">经验问题汇总</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>目录前言CSDN技能树使用体验1、入口地址不太友好2、全面的技能点3、算法选择题里的代码单一4、知识技能学习规划5、讨论区讨论很少身边的同学反馈与建议1、对于正在找工作的同学来说一天限制6题不够练习2、评论区不活跃,有问题没有人及时讨论3、选项里语言单一,希望能多元化总结其他平台同步发布前言CSDN上线了技能树的功能,技能的范围非常全面,有算法、语言基础、数据库、Git等等,作为一名算法题和Lin</div> </li> <li><a href="/article/1892727193239351296.htm" title="使用 EXPLAIN分析结果来优化 SQL 查询" target="_blank">使用 EXPLAIN分析结果来优化 SQL 查询</a> <span class="text-muted">小俊学长</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>使用EXPLAIN分析结果优化SQL查询是数据库性能调优中的一项重要技能。EXPLAIN语句能够展示数据库查询优化器对SQL查询的处理计划,从而帮助开发者识别查询中的瓶颈和低效部分。本文将详细介绍如何使用EXPLAIN分析结果来优化SQL查询。一、什么是EXPLAINEXPLAIN语句是SQL中用于显示查询执行计划的关键字。通过EXPLAIN,你可以看到数据库引擎是如何解析、优化和执行你的SQL查</div> </li> <li><a href="/article/1892726689327280128.htm" title="Mysql-EXPLAIN分析sql语句-项目中慢SQL优化思路和示例" target="_blank">Mysql-EXPLAIN分析sql语句-项目中慢SQL优化思路和示例</a> <span class="text-muted">axiao321123</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>1.概述项目越来越大,业务越来越多,数据量也持续上升。这时候数据库处理的压力也在逐渐增大,所以需要对慢sql进行处理和优化。以下是项目中利用EXPLAIN分析sql语句-优化慢SQL优化思路和示例。2.示例2.1查询参数不一样,导致用到的索引不一样这是一个典型的例子,一个sql被多个地方调用,索引的情况不一样。这个sql在上次的慢sql中,已经被优化过了。这次的慢sql中又看到了它,发现这次成为慢</div> </li> <li><a href="/article/1892726561182904320.htm" title="C++ 课程设计 汇总(含源码)" target="_blank">C++ 课程设计 汇总(含源码)</a> <span class="text-muted">三雷科技</span> <a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1/1.htm">课程设计</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>C++课程设计[C++课程设计个人账务管理系统(含源码)](https://arv000.blog.csdn.net/article/details/145601695)[C++课程设计运动会分数统计(含源码)](https://arv000.blog.csdn.net/article/details/145601819)[C++课程设计打印万年历(含源码)](https://arv000.blo</div> </li> <li><a href="/article/1892720766068256768.htm" title="MySQL 如何使用EXPLAIN工具优化SQL" target="_blank">MySQL 如何使用EXPLAIN工具优化SQL</a> <span class="text-muted">谢同学咯</span> <a class="tag" taget="_blank" href="/search/SQL/1.htm">SQL</a><a class="tag" taget="_blank" href="/search/MySQL%E5%AD%A6%E4%B9%A0/1.htm">MySQL学习</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>EXPLAIN是SQL查询优化中的一个重要工具,主要用于分析和诊断查询执行计划。通过EXPLAIN,我们可以了解数据库引擎(如MySQL、PostgreSQL等)是如何执行特定的查询语句的,包括是否使用了索引、表连接的方式、扫描的行数等信息。这对于优化查询性能非常有帮助。主要用途查看索引使用情况:确认查询是否正确使用了索引。评估查询效率:了解查询的执行路径和成本。优化查询语句:根据EXPLAIN的</div> </li> <li><a href="/article/1892717616296947712.htm" title="oracle数据库awr取间隔调整" target="_blank">oracle数据库awr取间隔调整</a> <span class="text-muted">deadknight9</span> <a class="tag" taget="_blank" href="/search/Oracle/1.htm">Oracle</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>一、查看取值间隔SQL>select*fromdba_hist_wr_control;DBIDSNAP_INTERVALRETENTIONTOPNSQL--------------------------------------------------------------------------------1549435079+0000001:00:00.0+0000800:00:00.0DE</div> </li> <li><a href="/article/1892689378627612672.htm" title="mysql登陆方式_盘点Mysql的登陆方式" target="_blank">mysql登陆方式_盘点Mysql的登陆方式</a> <span class="text-muted">李day</span> <a class="tag" taget="_blank" href="/search/mysql%E7%99%BB%E9%99%86%E6%96%B9%E5%BC%8F/1.htm">mysql登陆方式</a> <div>前置知识我们想登陆到MysqL中前提是肯定需要一个用户名和密码:比如rootroot在MysqL中用户的信息会存放在MysqL数据库下的user表中可以select*fromuser\G;查看到系统上的所用的用户信息;其中有一列叫做HOST,HOST的不同值决定了用户拥有不同的登陆方式:比如:标识符含义%任意ip均等登陆localhost只允许本地登陆127.0.0.1只允许本地登陆sv1主机名为</div> </li> <li><a href="/article/1892688239559503872.htm" title="深入理解 MySQL 8 C++ 源码:SELECT MOD(MONTH(NOW()), 2) 的函数执行过程" target="_blank">深入理解 MySQL 8 C++ 源码:SELECT MOD(MONTH(NOW()), 2) 的函数执行过程</a> <span class="text-muted">蚰蜒螟</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>MySQL作为最流行的关系型数据库之一,其内部实现机制一直是开发者探索的热点。本文将以一条简单的SQL查询SELECTMOD(MONTH(NOW()),2)为例,深入分析MySQL8源码中内置函数MOD、MONTH和NOW的执行过程,揭示其底层实现逻辑。一、SQL语句的解析与表达式树构建当MySQL接收到SQL查询时,首先会通过解析器将文本转化为内部的表达式树结构。对于MOD(MONTH(NOW(</div> </li> <li><a href="/article/1892684582298382336.htm" title="【含文档+PPT+源码】基于Python的图书推荐系统的设计与实现" target="_blank">【含文档+PPT+源码】基于Python的图书推荐系统的设计与实现</a> <span class="text-muted">小咕聊编程</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>课程简介:本课程演示的是一款基于python的图书推荐系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料2.带你从零开始部署运行本套系统3.该项目附带的源码资料可作为毕设使用图书推荐系统的重要核心功能用户注册和登录、图书推荐、浏览图书、图书评分、图书收藏、图书数据可视化分析等。具体功能模块如</div> </li> <li><a href="/article/1892684329725784064.htm" title="Flutter 中 path_provider的具体应用示例" target="_blank">Flutter 中 path_provider的具体应用示例</a> <span class="text-muted">爱吃鱼的锅包肉</span> <a class="tag" taget="_blank" href="/search/Flutter/1.htm">Flutter</a><a class="tag" taget="_blank" href="/search/flutter/1.htm">flutter</a> <div>path_provider是一种本地存储解决方案,它具有以下优点灵活性高:可以创建和管理任意类型的文件,包括文本、图片、音频、视频等,适合存储结构化或非结构化的大量数据。适应性强:适合需要自定义文件组织结构和格式的应用,比如数据库文件、缓存文件等。跨平台兼容:提供统一接口来获取不同平台的特定目录路径,简化了文件系统操作的平台差异处理。但是它也有一定的缺点,相比于shared_preferences</div> </li> <li><a href="/article/1892682684140941312.htm" title="使用 Pinecone 和 SelfQueryRetriever 进行电影查询" target="_blank">使用 Pinecone 和 SelfQueryRetriever 进行电影查询</a> <span class="text-muted">dgay_hua</span> <a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>在本篇文章中,我们将深入探索如何使用Pinecone作为向量数据库并结合SelfQueryRetriever进行电影数据查询。我们将通过实例代码演示如何创建一个Pinecone向量存储,并在其中存储包含电影摘要的小型数据集。技术背景介绍Pinecone是一个功能全面的向量数据库,非常适合需要处理矢量数据的应用场景。SelfQueryRetriever是一个强大的工具,可以通过自然语言和元数据条件来</div> </li> <li><a href="/article/1892680038306869248.htm" title="MySQL大师之路:从入门到精通的全方位实战指南" target="_blank">MySQL大师之路:从入门到精通的全方位实战指南</a> <span class="text-muted">热心码民阿振</span> <a class="tag" taget="_blank" href="/search/MySql/1.htm">MySql</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>前言MySQL,作为一款广受欢迎的关系型数据库管理系统,以其卓越的性能、稳定性及灵活性,成为了众多企业和个人开发者的数据存储首选。本指南旨在为初学者及有经验的数据库管理员提供一条由浅入深的学习路径,覆盖MySQL的方方面面,从基础概念到高级应用,再到最佳实践,助您成为MySQL领域的专家。一、MySQL基础入门了解关系型数据库关系型数据库是数据存储与管理的重要工具,它以表格的形式高效地组织和处理数</div> </li> <li><a href="/article/1892679407647125504.htm" title="【进阶】redis篇" target="_blank">【进阶】redis篇</a> <span class="text-muted">lil_侯昊</span> <a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a> <div>redis是什么nosqlnotonlysql(不仅仅是sql)泛指非关系型数据库一般把非关系型数据库称为nosql数据库.redismongodbredis是一个nosql类型的数据库(非关系型数据库),数据在内存中以键值对形式存储.读写速度快,也提供数据持久化方式.一般最常用的场景就是把redis用来做缓存.redis使用场景1.缓存2.计数器点赞3.排行榜数据结构,zset按照分数排序4.数</div> </li> <li><a href="/article/1892678019005345792.htm" title="Redis 持久化:从零到掌握" target="_blank">Redis 持久化:从零到掌握</a> <span class="text-muted">库库林_沙琪马</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Redis/1.htm">Redis</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a> <div>Redis作为一款广泛使用的内存数据库,虽然核心功能是基于内存提供高性能的数据存取,但在实际应用中,数据的持久化是不可忽视的。毕竟,内存中的数据一旦出现故障或重启,就会面临数据丢失的风险。因此,Redis提供了多种持久化机制,确保数据能够安全地存储在磁盘中。本文将详细介绍Redis的持久化机制,包括RDB和AOF两种持久化方式的工作原理、配置方法、优缺点以及实际应用场景。Redis持久化的重要性R</div> </li> <li><a href="/article/1892675877016236032.htm" title="分布式同步锁:原理、实现与应用" target="_blank">分布式同步锁:原理、实现与应用</a> <span class="text-muted">和烨</span> <a class="tag" taget="_blank" href="/search/%E5%85%B6%E5%AE%83/1.htm">其它</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a> <div>分布式同步锁:原理、实现与应用引言1.分布式同步锁的基本概念1.1什么是分布式同步锁?1.2分布式锁的特性2.分布式锁的实现方式2.1基于数据库的分布式锁实现原理优缺点示例2.2基于Redis的分布式锁实现原理优缺点示例Redlock算法2.3基于ZooKeeper的分布式锁实现原理优缺点示例3.分布式锁的应用场景3.1分布式任务调度3.2缓存更新3.3库存扣减4.分布式锁的挑战与解决方案4.1锁</div> </li> <li><a href="/article/1892672597770956800.htm" title="电商分布式场景中如何保证数据库与缓存的一致性?实战方案与Java代码详解" target="_blank">电商分布式场景中如何保证数据库与缓存的一致性?实战方案与Java代码详解</a> <span class="text-muted">Jayden </span> <a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%BC%93%E5%AD%98%E4%B8%80%E8%87%B4%E6%80%A7/1.htm">数据库缓存一致性</a> <div>文章目录一、缓存一致性问题的本质写后读不一致:更新数据库后,缓存未及时失效并发读写竞争:多个线程同时修改同一数据缓存与数据库事务不同步:部分成功导致数据错乱二、4大核心解决方案与代码实现方案1:延迟双删策略(针对写后读不一致)原理适用场景方案2:订阅数据库Binlog异步更新缓存(最终一致性)原理适用场景方案3:分布式锁保证强一致性(针对并发写)原理适用场景方案4:先更新数据库再删缓存原理适用场景</div> </li> <li><a href="/article/81.htm" title="java短路运算符和逻辑运算符的区别" target="_blank">java短路运算符和逻辑运算符的区别</a> <span class="text-muted">3213213333332132</span> <a class="tag" taget="_blank" href="/search/java%E5%9F%BA%E7%A1%80/1.htm">java基础</a> <div> /* * 逻辑运算符——不论是什么条件都要执行左右两边代码 * 短路运算符——我认为在底层就是利用物理电路的“并联”和“串联”实现的 * 原理很简单,并联电路代表短路或(||),串联电路代表短路与(&&)。 * * 并联电路两个开关只要有一个开关闭合,电路就会通。 * 类似于短路或(||),只要有其中一个为true(开关闭合)是</div> </li> <li><a href="/article/208.htm" title="Java异常那些不得不说的事" target="_blank">Java异常那些不得不说的事</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/exception/1.htm">exception</a> <div>一、在finally块中做数据回收操作 比如数据库连接都是很宝贵的,所以最好在finally中关闭连接。 JDBCAgent jdbc = new JDBCAgent(); try{ jdbc.excute("select * from ctp_log"); }catch(SQLException e){ ... }finally{ jdbc.close(); </div> </li> <li><a href="/article/335.htm" title="utf-8与utf-8(无BOM)的区别" target="_blank">utf-8与utf-8(无BOM)的区别</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a> <div>BOM——Byte Order Mark,就是字节序标记   在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE"。这样如</div> </li> <li><a href="/article/462.htm" title="JAVA Annotation之定义篇" target="_blank">JAVA Annotation之定义篇</a> <span class="text-muted">周凡杨</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%B3%A8%E8%A7%A3/1.htm">注解</a><a class="tag" taget="_blank" href="/search/annotation/1.htm">annotation</a><a class="tag" taget="_blank" href="/search/%E5%85%A5%E9%97%A8/1.htm">入门</a><a class="tag" taget="_blank" href="/search/%E6%B3%A8%E9%87%8A/1.htm">注释</a> <div>    Annotation: 译为注释或注解 An annotation, in the Java computer programming language, is a form of syntactic metadata that can be added to Java source code. Classes, methods, variables, pa</div> </li> <li><a href="/article/589.htm" title="tomcat的多域名、虚拟主机配置" target="_blank">tomcat的多域名、虚拟主机配置</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a> <div>众所周知apache可以配置多域名和虚拟主机,而且配置起来比较简单,但是项目用到的是tomcat,配来配去总是不成功。查了些资料才总算可以,下面就跟大家分享下经验。 很多朋友搜索的内容基本是告诉我们这么配置: 在Engine标签下增面积Host标签,如下: <Host name="www.site1.com" appBase="webapps"</div> </li> <li><a href="/article/716.htm" title="Linux SSH 错误解析(Capistrano 的cap 访问错误 Permission )" target="_blank">Linux SSH 错误解析(Capistrano 的cap 访问错误 Permission )</a> <span class="text-muted">510888780</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/capistrano/1.htm">capistrano</a> <div> 1.ssh -v hdfs@192.168.18.133 出现 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 错误 运行状况如下: OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 debug1: Reading configuratio</div> </li> <li><a href="/article/843.htm" title="log4j的用法" target="_blank">log4j的用法</a> <span class="text-muted">Harry642</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/log4j/1.htm">log4j</a> <div>一、前言:     log4j 是一个开放源码项目,是广泛使用的以Java编写的日志记录包。由于log4j出色的表现,     当时在log4j完成时,log4j开发组织曾建议sun在jdk1.4中用log4j取代jdk1.4 的日志工具类,但当时jdk1.4已接近完成,所以sun拒绝使用log4j,当在java开发中</div> </li> <li><a href="/article/970.htm" title="mysql、sqlserver、oracle分页,java分页统一接口实现" target="_blank">mysql、sqlserver、oracle分页,java分页统一接口实现</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/jave/1.htm">jave</a> <div> 定义:pageStart 起始页,pageEnd 终止页,pageSize页面容量 oracle分页:     select * from ( select mytable.*,rownum num from (实际传的SQL) where rownum<=pageEnd) where num>=pageStart sqlServer分页:  </div> </li> <li><a href="/article/1097.htm" title="Hessian 简单例子" target="_blank">Hessian 简单例子</a> <span class="text-muted">antlove</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/service/1.htm">service</a><a class="tag" taget="_blank" href="/search/hessian/1.htm">hessian</a> <div>hello.hessian.MyCar.java package hessian.pojo; import java.io.Serializable; public class MyCar implements Serializable { private static final long serialVersionUID = 473690540190845543</div> </li> <li><a href="/article/1224.htm" title="数据库对象的同义词和序列" target="_blank">数据库对象的同义词和序列</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E5%BA%8F%E5%88%97/1.htm">序列</a><a class="tag" taget="_blank" href="/search/%E5%90%8C%E4%B9%89%E8%AF%8D/1.htm">同义词</a><a class="tag" taget="_blank" href="/search/ORACLE%E6%9D%83%E9%99%90/1.htm">ORACLE权限</a> <div>回顾简单的数据库权限等命令; 解锁用户和锁定用户 alter user scott account lock/unlock; //system下查看系统中的用户 select * dba_users; //创建用户名和密码 create user wj identified by wj; identified by //授予连接权和建表权 grant connect to </div> </li> <li><a href="/article/1351.htm" title="使用Powermock和mockito测试静态方法" target="_blank">使用Powermock和mockito测试静态方法</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90/1.htm">持续集成</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a><a class="tag" taget="_blank" href="/search/mockito/1.htm">mockito</a><a class="tag" taget="_blank" href="/search/Powermock/1.htm">Powermock</a> <div>        实例: package com.bijian.study; import static org.junit.Assert.assertEquals; import java.io.IOException; import org.junit.Before; import org.junit.Test; import or</div> </li> <li><a href="/article/1478.htm" title="精通Oracle10编程SQL(6)访问ORACLE" target="_blank">精通Oracle10编程SQL(6)访问ORACLE</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a> <div>/* *访问ORACLE */ --检索单行数据 --使用标量变量接收数据 DECLARE v_ename emp.ename%TYPE; v_sal emp.sal%TYPE; BEGIN select ename,sal into v_ename,v_sal from emp where empno=&no; dbms_output.pu</div> </li> <li><a href="/article/1605.htm" title="【Nginx四】Nginx作为HTTP负载均衡服务器" target="_blank">【Nginx四】Nginx作为HTTP负载均衡服务器</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a> <div> Nginx的另一个常用的功能是作为负载均衡服务器。一个典型的web应用系统,通过负载均衡服务器,可以使得应用有多台后端服务器来响应客户端的请求。一个应用配置多台后端服务器,可以带来很多好处:   负载均衡的好处 增加可用资源 增加吞吐量 加快响应速度,降低延时 出错的重试验机制 Nginx主要支持三种均衡算法: round-robin l</div> </li> <li><a href="/article/1732.htm" title="jquery-validation备忘" target="_blank">jquery-validation备忘</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/F%23/1.htm">F#</a><a class="tag" taget="_blank" href="/search/Firebug/1.htm">Firebug</a> <div>留点学习jquery validation总结的代码:   function checkForm(){ validator = $("#commentForm").validate({// #formId为需要进行验证的表单ID errorElement :"span",// 使用"div"标签标记错误, 默认:&</div> </li> <li><a href="/article/1859.htm" title="solr限制admin界面访问(端口限制和http授权限制)" target="_blank">solr限制admin界面访问(端口限制和http授权限制)</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/%E9%99%90%E5%AE%9AIp%E8%AE%BF%E9%97%AE/1.htm">限定Ip访问</a> <div>solr的管理界面可以帮助我们做很多事情,但是把solr程序放到公网之后就要限制对admin的访问了。 可以通过tomcat的http基本授权来做限制,也可以通过iptables防火墙来限制。 我们先看如何通过tomcat配置http授权限制。 第一步: 在tomcat的conf/tomcat-users.xml文件中添加管理用户,比如: <userusername="ad</div> </li> <li><a href="/article/1986.htm" title="多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1" target="_blank">多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a> <div> public class IncDecThread { private int j=10; /* * 题目:用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1 * 两个问题: * 1、线程同步--synchronized * 2、线程之间如何共享同一个j变量--内部类 */ public static </div> </li> <li><a href="/article/2113.htm" title="买房历程" target="_blank">买房历程</a> <span class="text-muted">cfyme</span> <div>    2015-06-21: 万科未来城,看房子   2015-06-26: 办理贷款手续,贷款73万,贷款利率5.65=5.3675   2015-06-27: 房子首付,签完合同   2015-06-28,央行宣布降息 0.25,就2天的时间差啊,没赶上。   首付,老婆找他的小姐妹接了5万,另外几个朋友借了1-</div> </li> <li><a href="/article/2240.htm" title="[军事与科技]制造大型太空战舰的前奏" target="_blank">[军事与科技]制造大型太空战舰的前奏</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E5%88%B6%E9%80%A0/1.htm">制造</a> <div>        天气热了........空调和电扇要准备好..........        最近,世界形势日趋复杂化,战争的阴影开始覆盖全世界..........        所以,我们不得不关</div> </li> <li><a href="/article/2367.htm" title="dateformat" target="_blank">dateformat</a> <span class="text-muted">dai_lm</span> <a class="tag" taget="_blank" href="/search/DateFormat/1.htm">DateFormat</a> <div> "Symbol Meaning Presentation Ex." "------ ------- ------------ ----" "G era designator (Text) AD" "y year</div> </li> <li><a href="/article/2494.htm" title="Hadoop如何实现关联计算" target="_blank">Hadoop如何实现关联计算</a> <span class="text-muted">datamachine</span> <a class="tag" taget="_blank" href="/search/mapreduce/1.htm">mapreduce</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E5%85%B3%E8%81%94%E8%AE%A1%E7%AE%97/1.htm">关联计算</a> <div>    选择Hadoop,低成本和高扩展性是主要原因,但但它的开发效率实在无法让人满意。     以关联计算为例。     假设:HDFS上有2个文件,分别是客户信息和订单信息,customerID是它们之间的关联字段。如何进行关联计算,以便将客户名称添加到订单列表中?   &nbs</div> </li> <li><a href="/article/2621.htm" title="用户模型中修改用户信息时,密码是如何处理的" target="_blank">用户模型中修改用户信息时,密码是如何处理的</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a> <div>当我添加或修改用户记录的时候对于处理确认密码我遇到了一些麻烦,所有我想分享一下我是怎么处理的。 场景是使用的基本的那些(系统自带),你需要有一个数据表(user)并且表中有一个密码字段(password),它使用 sha1、md5或其他加密方式加密用户密码。 面是它的工作流程: 当创建用户的时候密码需要加密并且保存,但当修改用户记录时如果使用同样的场景我们最终就会把用户加密过的密码再次加密,这</div> </li> <li><a href="/article/2748.htm" title="中文 iOS/Mac 开发博客列表" target="_blank">中文 iOS/Mac 开发博客列表</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/Blog/1.htm">Blog</a> <div>  本博客列表会不断更新维护,如果有推荐的博客,请到此处提交博客信息。 本博客列表涉及的文章内容支持 定制化Google搜索,特别感谢 JeOam 提供并帮助更新。 本博客列表也提供同步更新的OPML文件(下载OPML文件),可供导入到例如feedly等第三方定阅工具中,特别感谢 lcepy 提供自动转换脚本。这里有导入教程。 </div> </li> <li><a href="/article/2875.htm" title="js去除空格,去除左右两端的空格" target="_blank">js去除空格,去除左右两端的空格</a> <span class="text-muted">蕃薯耀</span> <a class="tag" taget="_blank" href="/search/%E5%8E%BB%E9%99%A4%E5%B7%A6%E5%8F%B3%E4%B8%A4%E7%AB%AF%E7%9A%84%E7%A9%BA%E6%A0%BC/1.htm">去除左右两端的空格</a><a class="tag" taget="_blank" href="/search/js%E5%8E%BB%E6%8E%89%E6%89%80%E6%9C%89%E7%A9%BA%E6%A0%BC/1.htm">js去掉所有空格</a><a class="tag" taget="_blank" href="/search/js%E5%8E%BB%E9%99%A4%E7%A9%BA%E6%A0%BC/1.htm">js去除空格</a> <div>js去除空格,去除左右两端的空格 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g</div> </li> <li><a href="/article/3002.htm" title="SpringMVC4零配置--web.xml" target="_blank">SpringMVC4零配置--web.xml</a> <span class="text-muted">hanqunfeng</span> <a class="tag" taget="_blank" href="/search/springmvc4/1.htm">springmvc4</a> <div>servlet3.0+规范后,允许servlet,filter,listener不必声明在web.xml中,而是以硬编码的方式存在,实现容器的零配置。 ServletContainerInitializer:启动容器时负责加载相关配置 package javax.servlet; import java.util.Set; public interface ServletContainer</div> </li> <li><a href="/article/3129.htm" title="《开源框架那些事儿21》:巧借力与借巧力" target="_blank">《开源框架那些事儿21》:巧借力与借巧力</a> <span class="text-muted">j2eetop</span> <a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a> <div>同样做前端UI,为什么有人花了一点力气,就可以做好?而有的人费尽全力,仍然错误百出?我们可以先看看几个故事。 故事1:巧借力,乌鸦也可以吃核桃 有一个盛产核桃的村子,每年秋末冬初,成群的乌鸦总会来到这里,到果园里捡拾那些被果农们遗落的核桃。 核桃仁虽然美味,但是外壳那么坚硬,乌鸦怎么才能吃到呢?原来乌鸦先把核桃叼起,然后飞到高高的树枝上,再将核桃摔下去,核桃落到坚硬的地面上,被撞破了,于是,</div> </li> <li><a href="/article/3256.htm" title="JQuery EasyUI 验证扩展" target="_blank">JQuery EasyUI 验证扩展</a> <span class="text-muted">可怜的猫</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/easyui/1.htm">easyui</a><a class="tag" taget="_blank" href="/search/%E9%AA%8C%E8%AF%81/1.htm">验证</a> <div>  最近项目中用到了前端框架-- EasyUI,在做校验的时候会涉及到很多需要自定义的内容,现把常用的验证方式总结出来,留待后用。   以下内容只需要在公用js中添加即可。   使用类似于如下: <input class="easyui-textbox" name="mobile" id="mobile&</div> </li> <li><a href="/article/3383.htm" title="架构师之httpurlconnection----------读取和发送(流读取效率通用类)" target="_blank">架构师之httpurlconnection----------读取和发送(流读取效率通用类)</a> <span class="text-muted">nannan408</span> <div>1.前言.    如题. 2.代码. /* * Copyright (c) 2015, S.F. Express Inc. All rights reserved. */ package com.test.test.test.send; import java.io.IOException; import java.io.InputStream</div> </li> <li><a href="/article/3510.htm" title="Jquery性能优化" target="_blank">Jquery性能优化</a> <span class="text-muted">r361251</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a> <div>一、注意定义jQuery变量的时候添加var关键字 这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下: $loading = $('#loading'); //这个是全局定义,不知道哪里位置倒霉引用了相同的变量名,就会郁闷至死的 二、请使用一个var来定义变量 如果你使用多个变量的话,请如下方式定义: . 代码如下: var page </div> </li> <li><a href="/article/3637.htm" title="在eclipse项目中使用maven管理依赖" target="_blank">在eclipse项目中使用maven管理依赖</a> <span class="text-muted">tjj006</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>概览: 如何导入maven项目至eclipse中 建立自有Maven  Java类库服务器 建立符合maven代码库标准的自定义类库 Maven在管理Java类库方面有巨大的优势,像白衣所说就是非常“环保”。 我们平时用IDE开发都是把所需要的类库一股脑的全丢到项目目录下,然后全部添加到ide的构建路径中,如果用了SVN/CVS,这样会很容易就 把</div> </li> <li><a href="/article/3764.htm" title="中国天气网省市级联页面" target="_blank">中国天气网省市级联页面</a> <span class="text-muted">x125858805</span> <a class="tag" taget="_blank" href="/search/%E7%BA%A7%E8%81%94/1.htm">级联</a> <div>1、页面及级联js <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> &l</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>