毕业设计: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/1835504218178416640.htm" title="Google earth studio 简介" target="_blank">Google earth studio 简介</a> <span class="text-muted">陟彼高冈yu</span> <a class="tag" taget="_blank" href="/search/%E6%97%85%E6%B8%B8/1.htm">旅游</a> <div>GoogleEarthStudio是一个基于Web的动画工具,专为创作使用GoogleEarth数据的动画和视频而设计。它利用了GoogleEarth强大的三维地图和卫星影像数据库,使用户能够轻松地创建逼真的地球动画、航拍视频和动态地图可视化。网址为https://www.google.com/earth/studio/。GoogleEarthStudio是一个基于Web的动画工具,专为创作使用G</div> </li> <li><a href="/article/1835501821569888256.htm" title="关于提高复杂业务逻辑代码可读性的思考" target="_blank">关于提高复杂业务逻辑代码可读性的思考</a> <span class="text-muted">编程经验分享</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E7%BB%8F%E9%AA%8C/1.htm">开发经验</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</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%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目录前言需求场景常规写法拆分方法领域对象总结前言实际工作中大部分时间都是在写业务逻辑,一般都是三层架构,表示层(Controller)接收客户端请求,并对入参做检验,业务逻辑层(Service)负责处理业务逻辑,一般开发都是在这一层中写具体的业务逻辑。数据访问层(Dao)是直接和数据库交互的,用于查数据给业务逻辑层,或者是将业务逻辑层处理后的数据写入数据库。简单的增删改查接口不用多说,基本上写好一</div> </li> <li><a href="/article/1835499681732456448.htm" title="SQL Server_查询某一数据库中的所有表的内容" target="_blank">SQL Server_查询某一数据库中的所有表的内容</a> <span class="text-muted">qq_42772833</span> <a class="tag" taget="_blank" href="/search/SQL/1.htm">SQL</a><a class="tag" taget="_blank" href="/search/Server/1.htm">Server</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/sqlserver/1.htm">sqlserver</a> <div>1.查看所有表的表名要列出CrabFarmDB数据库中的所有表(名),可以使用以下SQL语句:USECrabFarmDB;--切换到目标数据库GOSELECTTABLE_NAMEFROMINFORMATION_SCHEMA.TABLESWHERETABLE_TYPE='BASETABLE';对这段SQL脚本的解释:SELECTTABLE_NAME:这个语句的作用是从查询结果中选择TABLE_NAM</div> </li> <li><a href="/article/1835497411179540480.htm" title="深入理解 MultiQueryRetriever:提升向量数据库检索效果的强大工具" target="_blank">深入理解 MultiQueryRetriever:提升向量数据库检索效果的强大工具</a> <span class="text-muted">nseejrukjhad</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/python/1.htm">python</a> <div>深入理解MultiQueryRetriever:提升向量数据库检索效果的强大工具引言在人工智能和自然语言处理领域,高效准确的信息检索一直是一个关键挑战。传统的基于距离的向量数据库检索方法虽然广泛应用,但仍存在一些局限性。本文将介绍一种创新的解决方案:MultiQueryRetriever,它通过自动生成多个查询视角来增强检索效果,提高结果的相关性和多样性。MultiQueryRetriever的工</div> </li> <li><a href="/article/1835493374514262016.htm" title="MongoDB Oplog 窗口" target="_blank">MongoDB Oplog 窗口</a> <span class="text-muted">喝醉酒的小白</span> <a class="tag" taget="_blank" href="/search/MongoDB/1.htm">MongoDB</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>在MongoDB中,oplog(操作日志)是一个特殊的日志系统,用于记录对数据库的所有写操作。oplog允许副本集成员(通常是从节点)应用主节点上已经执行的操作,从而保持数据的一致性。它是MongoDB副本集实现数据复制的基础。MongoDBOplog窗口oplog窗口是指在MongoDB副本集中,从节点可以用来同步数据的时间范围。这个窗口通常由以下因素决定:Oplog大小:oplog的大小是有限</div> </li> <li><a href="/article/1835490974911000576.htm" title="python os 环境变量" target="_blank">python os 环境变量</a> <span class="text-muted">CV矿工</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><a class="tag" taget="_blank" href="/search/numpy/1.htm">numpy</a> <div>环境变量:环境变量是程序和操作系统之间的通信方式。有些字符不宜明文写进代码里,比如数据库密码,个人账户密码,如果写进自己本机的环境变量里,程序用的时候通过os.environ.get()取出来就行了。os.environ是一个环境变量的字典。环境变量的相关操作importos"""设置/修改环境变量:os.environ[‘环境变量名称’]=‘环境变量值’#其中key和value均为string类</div> </li> <li><a href="/article/1835489460372992000.htm" title="【PG】常见数据库、表属性设置" target="_blank">【PG】常见数据库、表属性设置</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>PG的常见属性配置方法数据库复制、备份相关表的复制标识单表操作批量表操作链接数据库复制、备份相关表的复制标识单表操作通过ALTER语句单独更改一张表的复制标识。ALTERTABLE[tablename]REPLICAIDENTITYFULL;批量表操作通过代码块的方式,对某个schema中的所有表一起更新其复制标识。SELECTtablename,CASErelreplidentWHEN'd'TH</div> </li> <li><a href="/article/1835483159630802944.htm" title="nosql数据库技术与应用知识点" target="_blank">nosql数据库技术与应用知识点</a> <span class="text-muted">皆过客,揽星河</span> <a class="tag" taget="_blank" href="/search/NoSQL/1.htm">NoSQL</a><a class="tag" taget="_blank" href="/search/nosql/1.htm">nosql</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%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E9%9D%9E%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">非关系型数据库</a> <div>Nosql知识回顾大数据处理流程数据采集(flume、爬虫、传感器)数据存储(本门课程NoSQL所处的阶段)Hdfs、MongoDB、HBase等数据清洗(入仓)Hive等数据处理、分析(Spark、Flink等)数据可视化数据挖掘、机器学习应用(Python、SparkMLlib等)大数据时代存储的挑战(三高)高并发(同一时间很多人访问)高扩展(要求随时根据需求扩展存储)高效率(要求读写速度快)</div> </li> <li><a href="/article/1835477614848995328.htm" title="insert into select 主键自增_mybatis拦截器实现主键自动生成" target="_blank">insert into select 主键自增_mybatis拦截器实现主键自动生成</a> <span class="text-muted">weixin_39521651</span> <a class="tag" taget="_blank" href="/search/insert/1.htm">insert</a><a class="tag" taget="_blank" href="/search/into/1.htm">into</a><a class="tag" taget="_blank" href="/search/select/1.htm">select</a><a class="tag" taget="_blank" href="/search/%E4%B8%BB%E9%94%AE%E8%87%AA%E5%A2%9E/1.htm">主键自增</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/delete%E8%BF%94%E5%9B%9E%E5%80%BC/1.htm">delete返回值</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/insert%E8%BF%94%E5%9B%9E%E4%B8%BB%E9%94%AE/1.htm">insert返回主键</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/insert%E8%BF%94%E5%9B%9E%E5%AF%B9%E8%B1%A1/1.htm">insert返回对象</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/plus/1.htm">plus</a><a class="tag" taget="_blank" href="/search/insert%E8%BF%94%E5%9B%9E%E4%B8%BB%E9%94%AE/1.htm">insert返回主键</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/plus/1.htm">plus</a><a class="tag" taget="_blank" href="/search/%E6%8F%92%E5%85%A5%E7%94%9F%E6%88%90id/1.htm">插入生成id</a> <div>前言前阵子和朋友聊天,他说他们项目有个需求,要实现主键自动生成,不想每次新增的时候,都手动设置主键。于是我就问他,那你们数据库表设置主键自动递增不就得了。他的回答是他们项目目前的id都是采用雪花算法来生成,因此为了项目稳定性,不会切换id的生成方式。朋友问我有没有什么实现思路,他们公司的orm框架是mybatis,我就建议他说,不然让你老大把mybatis切换成mybatis-plus。mybat</div> </li> <li><a href="/article/1835471689929027584.htm" title="关于Mysql 中 Row size too large (> 8126) 错误的解决和理解" target="_blank">关于Mysql 中 Row size too large (> 8126) 错误的解决和理解</a> <span class="text-muted">秋刀prince</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>提示:啰嗦一嘴,数据库的任何操作和验证前,一定要记得先备份!!!不会有错;文章目录问题发现一、问题导致的可能原因1、页大小2、行格式2.1compact格式2.2Redundant格式2.3Dynamic格式2.4Compressed格式3、BLOB和TEXT列二、解决办法1、修改页大小(不推荐)2、修改行格式3、修改数据类型为BLOB和TEXT列4、其他优化方式(可以参考使用)4.1合理设置数据</div> </li> <li><a href="/article/1835454921990828032.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/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E4%BB%BB%E5%8A%A1/1.htm">任务</a><a class="tag" taget="_blank" href="/search/html%E8%A7%A3%E6%9E%90%E5%99%A8/1.htm">html解析器</a><a class="tag" taget="_blank" href="/search/%E5%AD%98%E5%82%A8/1.htm">存储</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%AD%90%E5%95%86%E5%8A%A1/1.htm">电子商务</a> <div>一、架构图那里搜网络爬虫框架主要针对电子商务网站进行数据爬取,分析,存储,索引。爬虫:爬虫负责爬取,解析,处理电子商务网站的网页的内容数据库:存储商品信息索引:商品的全文搜索索引Task队列:需要爬取的网页列表Visited表:已经爬取过的网页列表爬虫监控平台:web平台可以启动,停止爬虫,管理爬虫,task队列,visited表。二、爬虫1.流程1)Scheduler启动爬虫器,TaskMast</div> </li> <li><a href="/article/1835451016456269824.htm" title="MongoDB知识概括" target="_blank">MongoDB知识概括</a> <span class="text-muted">GeorgeLin98</span> <a class="tag" taget="_blank" href="/search/%E6%8C%81%E4%B9%85%E5%B1%82/1.htm">持久层</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>MongoDB知识概括MongoDB相关概念单机部署基本常用命令索引-IndexSpirngDataMongoDB集成副本集分片集群安全认证MongoDB相关概念业务应用场景:传统的关系型数据库(如MySQL),在数据操作的“三高”需求以及应对Web2.0的网站需求面前,显得力不从心。解释:“三高”需求:①Highperformance-对数据库高并发读写的需求。②HugeStorage-对海量数</div> </li> <li><a href="/article/1835447985601867776.htm" title="Mongodb Error: queryTxt ETIMEOUT xxxx.wwwdz.mongodb.net" target="_blank">Mongodb Error: queryTxt ETIMEOUT xxxx.wwwdz.mongodb.net</a> <span class="text-muted">佛一脚</span> <a class="tag" taget="_blank" href="/search/error/1.htm">error</a><a class="tag" taget="_blank" href="/search/react/1.htm">react</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>背景每天都能遇到奇怪的问题,做个记录,以便有缘人能得到帮助!换了一台电脑开发nextjs程序。需要连接mongodb数据,对数据进行增删改查。上一台电脑好好的程序,新电脑死活连不上mongodb数据库。同一套代码,没任何修改,搞得我怀疑人生了,打开浏览器进入mongodb官网毫无问题,也能进入线上系统查看数据,网络应该是没问题。于是我尝试了一下手机热点,这次代码能正常跑起来,连接数据库了!!!是不</div> </li> <li><a href="/article/1835443013749403648.htm" title="入门MySQL——查询语法练习" target="_blank">入门MySQL——查询语法练习</a> <span class="text-muted">K_un</span> <div>前言:前面几篇文章为大家介绍了DML以及DDL语句的使用方法,本篇文章将主要讲述常用的查询语法。其实MySQL官网给出了多个示例数据库供大家实用查询,下面我们以最常用的员工示例数据库为准,详细介绍各自常用的查询语法。1.员工示例数据库导入官方文档员工示例数据库介绍及下载链接:https://dev.mysql.com/doc/employee/en/employees-installation.h</div> </li> <li><a href="/article/1835437775344726016.htm" title="博客网站制作教程" target="_blank">博客网站制作教程</a> <span class="text-muted">2401_85194651</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>首先就是技术框架:后端:Java+SpringBoot数据库:MySQL前端:Vue.js数据库连接:JPA(JavaPersistenceAPI)1.项目结构blog-app/├──backend/│├──src/main/java/com/example/blogapp/││├──BlogApplication.java││├──config/│││└──DatabaseConfig.java</div> </li> <li><a href="/article/1835434126874865664.htm" title="ubuntu安装wordpress" target="_blank">ubuntu安装wordpress</a> <span class="text-muted">lissettecarlr</span> <div>1安装nginx网上安装方式很多,这就就直接用apt-get了apt-getinstallnginx不用启动啥,然后直接在浏览器里面输入IP:80就能看到nginx的主页了。如果修改了一些配置可以使用下列命令重启一下systemctlrestartnginx.service2安装mysql输入安装前也可以更新一下软件源,在安装过程中将会让你输入数据库的密码。sudoapt-getinstallmy</div> </li> <li><a href="/article/1835432358141063168.htm" title="深入浅出 -- 系统架构之负载均衡Nginx的性能优化" target="_blank">深入浅出 -- 系统架构之负载均衡Nginx的性能优化</a> <span class="text-muted">xiaoli8748_软件开发</span> <a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/1.htm">系统架构</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/1.htm">系统架构</a><a class="tag" taget="_blank" href="/search/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/1.htm">负载均衡</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a> <div>一、Nginx性能优化到这里文章的篇幅较长了,最后再来聊一下关于Nginx的性能优化,主要就简单说说收益最高的几个优化项,在这块就不再展开叙述了,毕竟影响性能都有多方面原因导致的,比如网络、服务器硬件、操作系统、后端服务、程序自身、数据库服务等,对于性能调优比较感兴趣的可以参考之前《JVM性能调优》中的调优思想。优化一:打开长连接配置通常Nginx作为代理服务,负责分发客户端的请求,那么建议开启H</div> </li> <li><a href="/article/1835432106029838336.htm" title="【RabbitMQ 项目】服务端:数据管理模块之绑定管理" target="_blank">【RabbitMQ 项目】服务端:数据管理模块之绑定管理</a> <span class="text-muted">月夜星辉雪</span> <a class="tag" taget="_blank" href="/search/rabbitmq/1.htm">rabbitmq</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a> <div>文章目录一.编写思路二.代码实践一.编写思路定义绑定信息类交换机名称队列名称绑定关键字:交换机的路由交换算法中会用到没有是否持久化的标志,因为绑定是否持久化取决于交换机和队列是否持久化,只有它们都持久化时绑定才需要持久化。绑定就好像一根绳子,两端连接着交换机和队列,当一方不存在,它就没有存在的必要了定义绑定持久化类构造函数:如果数据库文件不存在则创建,打开数据库,创建binding_table插入</div> </li> <li><a href="/article/1835428821877223424.htm" title="计算机毕业设计PHP仓储综合管理系统(源码+程序+VUE+lw+部署)" target="_blank">计算机毕业设计PHP仓储综合管理系统(源码+程序+VUE+lw+部署)</a> <span class="text-muted">java毕设程序源码王哥</span> <a class="tag" taget="_blank" href="/search/php/1.htm">php</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/vue.js/1.htm">vue.js</a> <div>该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流项目运行环境配置:phpStudy+Vscode+Mysql5.7+HBuilderX+Navicat11+Vue+Express。项目技术:原生PHP++Vue等等组成,B/S模式+Vscode管理+前后端分离等等。环境需要1.运行环境:最好是小皮phpstudy最新版,我们在这个版本上开发的。其他版本理论上也可以。2.开发</div> </li> <li><a href="/article/1835403761783238656.htm" title="3.增删改查--连接查询" target="_blank">3.增删改查--连接查询</a> <span class="text-muted">问女何所忆</span> <div>关系型数据库的一个特点就是,多张表之间存在关系,以致于我们可以连接多张表进行查询操作,所以连接查询会是关系型数据库中最常见的操作。连接查询主要分为三种,交叉连接、内连接和外连接,我们一个个说。1、交叉连接交叉连接其实连接查询的第一个阶段,它简单表现为两张表的笛卡尔积形式,具体例子:如果你没学过数学中的笛卡尔积概念,你可以这样简单的理解这里的交叉连接:两张表的交叉连接就是一个连接合并的过程,T1表中</div> </li> <li><a href="/article/1835399957885054976.htm" title="docker from指令的含义_多个FROM-含义" target="_blank">docker from指令的含义_多个FROM-含义</a> <span class="text-muted">weixin_39722188</span> <a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/from%E6%8C%87%E4%BB%A4%E7%9A%84%E5%90%AB%E4%B9%89/1.htm">from指令的含义</a> <div>小编典典什么是基本图片?一组文件,加上EXPOSE端口ENTRYPOINT和CMD。您可以添加文件并基于该基础图像构建新图像,Dockerfile并以FROM指令开头:后面提到的图像FROM是新图像的“基础图像”。这是否意味着如果我neo4j/neo4j在FROM指令中声明,则在运行映像时,neo数据库将自动运行并且可在端口7474的容器中使用?仅当您不覆盖CMD和时ENTRYPOINT。但是图像</div> </li> <li><a href="/article/1835397685104963584.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/java/1.htm">java</a> <div>缓存击穿(热点key):部分key(被高并发访问且缓存重建业务复杂的)失效,无数请求会直接到数据库,造成巨大压力1.互斥锁:可以保证强一致性线程一:未命中之后,获取互斥锁,再查询数据库重建缓存,写入缓存,释放锁线程二:查询未命中,未获得锁(已由线程一获得),等待一会,缓存命中互斥锁实现方式:redis中setnxkeyvalue:改变对应key的value,仅当value不存在时执行,以此来实现互</div> </li> <li><a href="/article/1835396299915096064.htm" title="mysql学习教程,从入门到精通,TOP 和MySQL LIMIT 子句(15)" target="_blank">mysql学习教程,从入门到精通,TOP 和MySQL LIMIT 子句(15)</a> <span class="text-muted">知识分享小能手</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/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/MySQL/1.htm">MySQL</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/adb/1.htm">adb</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>1、TOP和MySQLLIMIT子句内容在SQL中,不同的数据库系统对于限制查询结果的数量有不同的实现方式。TOP关键字主要用于SQLServer和Access数据库中,而LIMIT子句则主要用于MySQL、PostgreSQL(通过LIMIT/OFFSET语法)、SQLite等数据库中。下面将分别详细介绍这两个功能的语法、语句以及案例。1.1、TOP子句(SQLServer和Access)1.1</div> </li> <li><a href="/article/1835394913257222144.htm" title="ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your" target="_blank">ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your</a> <span class="text-muted">†徐先森®</span> <a class="tag" taget="_blank" href="/search/Oracle%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">Oracle数据库</a><a class="tag" taget="_blank" href="/search/Web%E7%9B%B8%E5%85%B3/1.htm">Web相关</a><a class="tag" taget="_blank" href="/search/%E9%94%99%E8%AF%AF%E9%9B%86/1.htm">错误集</a> <div>createtablestudents(idintunsignedprimarykeyauto_increment,namevarchar(50)notnull,ageintunsigned,highdecimal(3,2),genderenum('男','女','中性','保密','妖')default'保密',cls_idintunsigned);在对数据库插入如上带有中文带有默认值的字段的时</div> </li> <li><a href="/article/1835390120858054656.htm" title="Redis 有哪些危险命令?如何防范?" target="_blank">Redis 有哪些危险命令?如何防范?</a> <span class="text-muted">花小疯</span> <a class="tag" taget="_blank" href="/search/redis/1.htm">redis</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/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E5%8D%B1%E9%99%A9%E5%91%BD%E4%BB%A4/1.htm">危险命令</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>Redis有哪些危险命令?Redis的危险命令主要有以下几个:1.keys客户端可查询出所有存在的键。2.flushdb删除Redis中当前所在数据库中的所有记录,并且此命令从不会执行失败。3.flushall删除Redis中所有数据库中的所有记录,不止是当前所在数据库,并且此命令从不会执行失败。4.config客户端可修改Redis配置。怎么禁用和重命名危险命令?看下redis.conf默认配置</div> </li> <li><a href="/article/1835372217710505984.htm" title="【Golang】 Golang 的 GORM 库中的 Rows 函数" target="_blank">【Golang】 Golang 的 GORM 库中的 Rows 函数</a> <span class="text-muted">不爱洗脚的小滕</span> <a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>文章目录前言一、Rows函数解释二、代码实现三、总结前言在使用Go语言进行数据库操作时,GORM(GoObject-RelationalMapping)库是一个常用的工具。它提供了一种简洁和强大的方式来处理数据库操作。本文将介绍GORM库中的Rows函数,这是一个用于执行原生SQL查询并返回结果的函数。一、Rows函数解释在GORM库中,Rows函数用于执行原生SQL查询并返回*sql.Rows结</div> </li> <li><a href="/article/1835359345194397696.htm" title="接口测试如何设计测试用例" target="_blank">接口测试如何设计测试用例</a> <span class="text-muted">李蕴Ronnie</span> <div>接口测试用例设计方式针对每个必填参数,都设计一条参数为空的测试用例必填参数不存在传的参数值在数据库中不存在添加数据接口,传入已有的数据重复添加编辑数据接口,各个字段分别编辑,合并编辑参数数据类型限制,针对每个参数设计一条参数值类型不符合的逆向用例参数自身取值范围,针对所有参数,设计一条每个参数值在取值范围内最大值的正向测试用例是否满足前提条件(token、headers),几个前提条件几条用例针对</div> </li> <li><a href="/article/1835353690928672768.htm" title="Hadoop架构" target="_blank">Hadoop架构</a> <span class="text-muted">henan程序媛</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/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案例概述现在已经进入了大数据(BigData)时代,数以万计用户的互联网服务时时刻刻都在产生大量的交互,要处理的数据量实在是太大了,以传统的数据库技术等其他手段根本无法应对数据处理的实时性、有效性的需求。HDFS顺应时代出现,在解决大数据存储和计算方面有很多的优势。1.2案列前置知识点1.什么是大数据大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的大量数据集合,</div> </li> <li><a href="/article/1835349024102772736.htm" title="非关系型数据库" target="_blank">非关系型数据库</a> <span class="text-muted">天秤-white</span> <a class="tag" taget="_blank" href="/search/nosql/1.htm">nosql</a> <div>一、为什么要用Nosql1.单机MySQL的时代。一个基本的网站访问量一般不会太大,单个数据库完全足够。那时候更多使用的静态网页html,服务器根本没有太大压力。这时候网站的瓶颈是什么?-数据量如果太大,一个机器放不下。-数据量太大需要建立数据的索引(B+Tree),一个服务器内存放不下。-访问量读写混合,一个服务器承受不了。2.memcached缓存+MySQL+垂直拆分(读写分离)。网站80%</div> </li> <li><a href="/article/1835348889474002944.htm" title="六、全局锁和表锁:给表加个字段怎么有这么多阻碍" target="_blank">六、全局锁和表锁:给表加个字段怎么有这么多阻碍</a> <span class="text-muted">nieniemin</span> <div>数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。6.1全局锁全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是Flushtableswithreadlock(FTWRL)。当你需要让整个库处于</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>