目 录
论文总页数: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所示。
图1 SVG基本要素
图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/1892742201390198784.htm"
title="Django连接mysql数据库" target="_blank">Django连接mysql数据库</a>
<span class="text-muted">NiHaoChiLeMa</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
<div>前篇已配置好了Django的运行环境,接下来连接数据库,Django数据库默认保存在SQLite3上,但是不熟悉SQLite的操作,想更换为mysql数据库.一、新建数据库在mysql新建一个数据库,库名为:testsql二、配置Django项目环境1、配置settings.py在settings.py找到DATABASES,修改里面的参数为:DATABASES={'default':{'ENGI</div>
</li>
<li><a href="/article/1892735643163881472.htm"
title="django连接mysql数据库" target="_blank">django连接mysql数据库</a>
<span class="text-muted">独白不白</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
<div>1.下载mysqlclient第三方库2.在settings.py里连接数据库(提前建好)DATABASES={'default':{'ENGINE':'django.db.backends.mysql','NAME':'学生信息','USER':'root','PASSWORD':'999123457','HOST':'localhost','POST':'3306',}}3.在models.p</div>
</li>
<li><a href="/article/1892733122995351552.htm"
title="学习 `@PreDestroy`:Java EE/Jakarta EE 生命周期回调" target="_blank">学习 `@PreDestroy`:Java EE/Jakarta EE 生命周期回调</a>
<span class="text-muted">和烨</span>
<a class="tag" taget="_blank" href="/search/%E5%85%B6%E5%AE%83/1.htm">其它</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/java-ee/1.htm">java-ee</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
<div>学习`@PreDestroy`:JavaEE/JakartaEE生命周期回调前言1.什么是`@PreDestroy`?2.`@PreDestroy`的用途3.使用`@PreDestroy`的条件4.代码示例运行结果:5.`@PreDestroy`的调用时机6.注意事项7.实际应用场景场景1:数据库连接管理场景2:文件资源释放8.总结前言在JavaEE(EnterpriseEdition)和Jaka</div>
</li>
<li><a href="/article/1892730468894306304.htm"
title="算法(algorithm)、CS入门技能树测评和使用体验" target="_blank">算法(algorithm)、CS入门技能树测评和使用体验</a>
<span class="text-muted">沉迷单车的追风少年</span>
<a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E9%97%AE%E9%A2%98%E6%B1%87%E6%80%BB/1.htm">经验问题汇总</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
<div>目录前言CSDN技能树使用体验1、入口地址不太友好2、全面的技能点3、算法选择题里的代码单一4、知识技能学习规划5、讨论区讨论很少身边的同学反馈与建议1、对于正在找工作的同学来说一天限制6题不够练习2、评论区不活跃,有问题没有人及时讨论3、选项里语言单一,希望能多元化总结其他平台同步发布前言CSDN上线了技能树的功能,技能的范围非常全面,有算法、语言基础、数据库、Git等等,作为一名算法题和Lin</div>
</li>
<li><a href="/article/1892727193239351296.htm"
title="使用 EXPLAIN分析结果来优化 SQL 查询" target="_blank">使用 EXPLAIN分析结果来优化 SQL 查询</a>
<span class="text-muted">小俊学长</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
<div>使用EXPLAIN分析结果优化SQL查询是数据库性能调优中的一项重要技能。EXPLAIN语句能够展示数据库查询优化器对SQL查询的处理计划,从而帮助开发者识别查询中的瓶颈和低效部分。本文将详细介绍如何使用EXPLAIN分析结果来优化SQL查询。一、什么是EXPLAINEXPLAIN语句是SQL中用于显示查询执行计划的关键字。通过EXPLAIN,你可以看到数据库引擎是如何解析、优化和执行你的SQL查</div>
</li>
<li><a href="/article/1892726689327280128.htm"
title="Mysql-EXPLAIN分析sql语句-项目中慢SQL优化思路和示例" target="_blank">Mysql-EXPLAIN分析sql语句-项目中慢SQL优化思路和示例</a>
<span class="text-muted">axiao321123</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
<div>1.概述项目越来越大,业务越来越多,数据量也持续上升。这时候数据库处理的压力也在逐渐增大,所以需要对慢sql进行处理和优化。以下是项目中利用EXPLAIN分析sql语句-优化慢SQL优化思路和示例。2.示例2.1查询参数不一样,导致用到的索引不一样这是一个典型的例子,一个sql被多个地方调用,索引的情况不一样。这个sql在上次的慢sql中,已经被优化过了。这次的慢sql中又看到了它,发现这次成为慢</div>
</li>
<li><a href="/article/1892726561182904320.htm"
title="C++ 课程设计 汇总(含源码)" target="_blank">C++ 课程设计 汇总(含源码)</a>
<span class="text-muted">三雷科技</span>
<a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1/1.htm">课程设计</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
<div>C++课程设计[C++课程设计个人账务管理系统(含源码)](https://arv000.blog.csdn.net/article/details/145601695)[C++课程设计运动会分数统计(含源码)](https://arv000.blog.csdn.net/article/details/145601819)[C++课程设计打印万年历(含源码)](https://arv000.blo</div>
</li>
<li><a href="/article/1892720766068256768.htm"
title="MySQL 如何使用EXPLAIN工具优化SQL" target="_blank">MySQL 如何使用EXPLAIN工具优化SQL</a>
<span class="text-muted">谢同学咯</span>
<a class="tag" taget="_blank" href="/search/SQL/1.htm">SQL</a><a class="tag" taget="_blank" href="/search/MySQL%E5%AD%A6%E4%B9%A0/1.htm">MySQL学习</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
<div>EXPLAIN是SQL查询优化中的一个重要工具,主要用于分析和诊断查询执行计划。通过EXPLAIN,我们可以了解数据库引擎(如MySQL、PostgreSQL等)是如何执行特定的查询语句的,包括是否使用了索引、表连接的方式、扫描的行数等信息。这对于优化查询性能非常有帮助。主要用途查看索引使用情况:确认查询是否正确使用了索引。评估查询效率:了解查询的执行路径和成本。优化查询语句:根据EXPLAIN的</div>
</li>
<li><a href="/article/1892717616296947712.htm"
title="oracle数据库awr取间隔调整" target="_blank">oracle数据库awr取间隔调整</a>
<span class="text-muted">deadknight9</span>
<a class="tag" taget="_blank" href="/search/Oracle/1.htm">Oracle</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
<div>一、查看取值间隔SQL>select*fromdba_hist_wr_control;DBIDSNAP_INTERVALRETENTIONTOPNSQL--------------------------------------------------------------------------------1549435079+0000001:00:00.0+0000800:00:00.0DE</div>
</li>
<li><a href="/article/1892689378627612672.htm"
title="mysql登陆方式_盘点Mysql的登陆方式" target="_blank">mysql登陆方式_盘点Mysql的登陆方式</a>
<span class="text-muted">李day</span>
<a class="tag" taget="_blank" href="/search/mysql%E7%99%BB%E9%99%86%E6%96%B9%E5%BC%8F/1.htm">mysql登陆方式</a>
<div>前置知识我们想登陆到MysqL中前提是肯定需要一个用户名和密码:比如rootroot在MysqL中用户的信息会存放在MysqL数据库下的user表中可以select*fromuser\G;查看到系统上的所用的用户信息;其中有一列叫做HOST,HOST的不同值决定了用户拥有不同的登陆方式:比如:标识符含义%任意ip均等登陆localhost只允许本地登陆127.0.0.1只允许本地登陆sv1主机名为</div>
</li>
<li><a href="/article/1892688239559503872.htm"
title="深入理解 MySQL 8 C++ 源码:SELECT MOD(MONTH(NOW()), 2) 的函数执行过程" target="_blank">深入理解 MySQL 8 C++ 源码:SELECT MOD(MONTH(NOW()), 2) 的函数执行过程</a>
<span class="text-muted">蚰蜒螟</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
<div>MySQL作为最流行的关系型数据库之一,其内部实现机制一直是开发者探索的热点。本文将以一条简单的SQL查询SELECTMOD(MONTH(NOW()),2)为例,深入分析MySQL8源码中内置函数MOD、MONTH和NOW的执行过程,揭示其底层实现逻辑。一、SQL语句的解析与表达式树构建当MySQL接收到SQL查询时,首先会通过解析器将文本转化为内部的表达式树结构。对于MOD(MONTH(NOW(</div>
</li>
<li><a href="/article/1892684582298382336.htm"
title="【含文档+PPT+源码】基于Python的图书推荐系统的设计与实现" target="_blank">【含文档+PPT+源码】基于Python的图书推荐系统的设计与实现</a>
<span class="text-muted">小咕聊编程</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
<div>课程简介:本课程演示的是一款基于python的图书推荐系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料2.带你从零开始部署运行本套系统3.该项目附带的源码资料可作为毕设使用图书推荐系统的重要核心功能用户注册和登录、图书推荐、浏览图书、图书评分、图书收藏、图书数据可视化分析等。具体功能模块如</div>
</li>
<li><a href="/article/1892684329725784064.htm"
title="Flutter 中 path_provider的具体应用示例" target="_blank">Flutter 中 path_provider的具体应用示例</a>
<span class="text-muted">爱吃鱼的锅包肉</span>
<a class="tag" taget="_blank" href="/search/Flutter/1.htm">Flutter</a><a class="tag" taget="_blank" href="/search/flutter/1.htm">flutter</a>
<div>path_provider是一种本地存储解决方案,它具有以下优点灵活性高:可以创建和管理任意类型的文件,包括文本、图片、音频、视频等,适合存储结构化或非结构化的大量数据。适应性强:适合需要自定义文件组织结构和格式的应用,比如数据库文件、缓存文件等。跨平台兼容:提供统一接口来获取不同平台的特定目录路径,简化了文件系统操作的平台差异处理。但是它也有一定的缺点,相比于shared_preferences</div>
</li>
<li><a href="/article/1892682684140941312.htm"
title="使用 Pinecone 和 SelfQueryRetriever 进行电影查询" target="_blank">使用 Pinecone 和 SelfQueryRetriever 进行电影查询</a>
<span class="text-muted">dgay_hua</span>
<a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
<div>在本篇文章中,我们将深入探索如何使用Pinecone作为向量数据库并结合SelfQueryRetriever进行电影数据查询。我们将通过实例代码演示如何创建一个Pinecone向量存储,并在其中存储包含电影摘要的小型数据集。技术背景介绍Pinecone是一个功能全面的向量数据库,非常适合需要处理矢量数据的应用场景。SelfQueryRetriever是一个强大的工具,可以通过自然语言和元数据条件来</div>
</li>
<li><a href="/article/1892680038306869248.htm"
title="MySQL大师之路:从入门到精通的全方位实战指南" target="_blank">MySQL大师之路:从入门到精通的全方位实战指南</a>
<span class="text-muted">热心码民阿振</span>
<a class="tag" taget="_blank" href="/search/MySql/1.htm">MySql</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
<div>前言MySQL,作为一款广受欢迎的关系型数据库管理系统,以其卓越的性能、稳定性及灵活性,成为了众多企业和个人开发者的数据存储首选。本指南旨在为初学者及有经验的数据库管理员提供一条由浅入深的学习路径,覆盖MySQL的方方面面,从基础概念到高级应用,再到最佳实践,助您成为MySQL领域的专家。一、MySQL基础入门了解关系型数据库关系型数据库是数据存储与管理的重要工具,它以表格的形式高效地组织和处理数</div>
</li>
<li><a href="/article/1892679407647125504.htm"
title="【进阶】redis篇" target="_blank">【进阶】redis篇</a>
<span class="text-muted">lil_侯昊</span>
<a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a>
<div>redis是什么nosqlnotonlysql(不仅仅是sql)泛指非关系型数据库一般把非关系型数据库称为nosql数据库.redismongodbredis是一个nosql类型的数据库(非关系型数据库),数据在内存中以键值对形式存储.读写速度快,也提供数据持久化方式.一般最常用的场景就是把redis用来做缓存.redis使用场景1.缓存2.计数器点赞3.排行榜数据结构,zset按照分数排序4.数</div>
</li>
<li><a href="/article/1892678019005345792.htm"
title="Redis 持久化:从零到掌握" target="_blank">Redis 持久化:从零到掌握</a>
<span class="text-muted">库库林_沙琪马</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Redis/1.htm">Redis</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a>
<div>Redis作为一款广泛使用的内存数据库,虽然核心功能是基于内存提供高性能的数据存取,但在实际应用中,数据的持久化是不可忽视的。毕竟,内存中的数据一旦出现故障或重启,就会面临数据丢失的风险。因此,Redis提供了多种持久化机制,确保数据能够安全地存储在磁盘中。本文将详细介绍Redis的持久化机制,包括RDB和AOF两种持久化方式的工作原理、配置方法、优缺点以及实际应用场景。Redis持久化的重要性R</div>
</li>
<li><a href="/article/1892675877016236032.htm"
title="分布式同步锁:原理、实现与应用" target="_blank">分布式同步锁:原理、实现与应用</a>
<span class="text-muted">和烨</span>
<a class="tag" taget="_blank" href="/search/%E5%85%B6%E5%AE%83/1.htm">其它</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
<div>分布式同步锁:原理、实现与应用引言1.分布式同步锁的基本概念1.1什么是分布式同步锁?1.2分布式锁的特性2.分布式锁的实现方式2.1基于数据库的分布式锁实现原理优缺点示例2.2基于Redis的分布式锁实现原理优缺点示例Redlock算法2.3基于ZooKeeper的分布式锁实现原理优缺点示例3.分布式锁的应用场景3.1分布式任务调度3.2缓存更新3.3库存扣减4.分布式锁的挑战与解决方案4.1锁</div>
</li>
<li><a href="/article/1892672597770956800.htm"
title="电商分布式场景中如何保证数据库与缓存的一致性?实战方案与Java代码详解" target="_blank">电商分布式场景中如何保证数据库与缓存的一致性?实战方案与Java代码详解</a>
<span class="text-muted">Jayden </span>
<a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%BC%93%E5%AD%98%E4%B8%80%E8%87%B4%E6%80%A7/1.htm">数据库缓存一致性</a>
<div>文章目录一、缓存一致性问题的本质写后读不一致:更新数据库后,缓存未及时失效并发读写竞争:多个线程同时修改同一数据缓存与数据库事务不同步:部分成功导致数据错乱二、4大核心解决方案与代码实现方案1:延迟双删策略(针对写后读不一致)原理适用场景方案2:订阅数据库Binlog异步更新缓存(最终一致性)原理适用场景方案3:分布式锁保证强一致性(针对并发写)原理适用场景方案4:先更新数据库再删缓存原理适用场景</div>
</li>
<li><a href="/article/1892670954186797056.htm"
title="深入解析 JPA Joined Subclass 继承策略的实现与应用" target="_blank">深入解析 JPA Joined Subclass 继承策略的实现与应用</a>
<span class="text-muted">t0_54manong</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/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E4%B8%AA%E4%BA%BA%E5%BC%80%E5%8F%91/1.htm">个人开发</a>
<div>在Java持久化领域,JPA(JavaPersistenceAPI)提供了多种强大的功能来帮助开发者高效地管理数据库操作。其中,继承策略是JPA中一个非常重要的概念,它允许我们将类的继承关系映射到数据库表结构中。今天,我们就来深入探讨一下JPA中的JoinedSubclass继承策略,并通过一个完整的实例来展示它的实现和应用。一、JoinedSubclass继承策略概述JoinedSubclass</div>
</li>
<li><a href="/article/1892670324479160320.htm"
title="黑神话悟空风格事务解读snapshot" target="_blank">黑神话悟空风格事务解读snapshot</a>
<span class="text-muted">我会有心仪offer</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
<div>第一幕:编程式事务の「五指山压顶」场景:天庭财务部手动记账,悟空大闹数据库//手动挡事务(玉帝亲自执笔版)publicclass蟠桃园会计系统{publicvoid分发蟠桃(神仙领桃人,int数量){Connectionconn=null;try{conn=南天门数据源.getConnection();conn.setAutoCommit(false);//关闭自动提交(玉帝的朱砂笔悬停)//第一</div>
</li>
<li><a href="/article/1892669568892071936.htm"
title="Mysql的索引" target="_blank">Mysql的索引</a>
<span class="text-muted">jdbcmeng</span>
<a class="tag" taget="_blank" href="/search/MySQL/1.htm">MySQL</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
<div>什么是索引在mysql中,索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列即可。参考:什么是mysql索引索引有哪些MySQL主要有五种索引类型,分别是:普通索引(NORMAL)唯一索引(UNIQUE)主键索引(PRIMARY)组合索引全文索引(FULLTEXT)1、B+树索引Inn</div>
</li>
<li><a href="/article/1892656251456778240.htm"
title="python读取ftp记录并入数据库" target="_blank">python读取ftp记录并入数据库</a>
<span class="text-muted">一个高效工作的家伙</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</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>记录python读取ftp记录并入数据库。保存一些常用方法,分享给大家。1、ftp操作fromftplibimportFTP#连接defftpconnect(host,username,password): ftp=FTP() #ftp.set_debuglevel(2) #打开调试级别2,显示详细信息 ftp.connect(host,21) #连接 ftp.login(usern</div>
</li>
<li><a href="/article/1892643504849481728.htm"
title="【MyBatis】处理数据库字段名和Java实体类的属性名不一致的5种方法" target="_blank">【MyBatis】处理数据库字段名和Java实体类的属性名不一致的5种方法</a>
<span class="text-muted">卡文迪许的引力常量</span>
<a class="tag" taget="_blank" href="/search/MyBatis/1.htm">MyBatis</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</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/java/1.htm">java</a>
<div>在MyBatis中,数据库表中的字段名和实体类的属性名可能不一致,下面是常见的几种方法来处理这种不一致的命名规则。方法1:SQL别名AS在SELECT语句中设置列别名(这是一个基本的SQL特性)可以强行使之匹配。selectuser_idas"id",user_nameas"userName",hashed_passwordas"hashedPassword"fromsome_tablewhere</div>
</li>
<li><a href="/article/1892642117717651456.htm"
title="课外补充InnoDB知识:InnoDB表的优势" target="_blank">课外补充InnoDB知识:InnoDB表的优势</a>
<span class="text-muted">1.01^1000</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">关系型数据库</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
<div>MySQL优化学习大纲1.InnoDB存储引擎在实际应用中拥有诸多优势,比如操作便利、提高了数据库的性能、维护成本低等。如果由于硬件或软件的原因导致服务器崩溃,那么在重启服务器之后不需要进行额外的操作。InnoDB崩溃恢复功能自动将之前提交的内容定型,然后撤销没有提交的进程,重启之后继续从崩溃点开始执行。2.InnoDB存储引擎在主内存中维护缓冲池,高频率使用的数据将在内存中直接被处理。这种缓存方</div>
</li>
<li><a href="/article/1892641360008245248.htm"
title="Oracle和MySQL的分页查询语句" target="_blank">Oracle和MySQL的分页查询语句</a>
<span class="text-muted">命中的缘分</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</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>在数据库系统中,特别是在Oracle和MySQL中,分页查询是一种常见需求,用于处理大量数据时只展示部分结果。下面分别介绍在Oracle和MySQL中实现分页查询的语句。Oracle中的分页在Oracle中,你可以使用ROWNUM或者FETCHFIRST和OFFSET子句来实现分页。使用ROWNUMSELECT*FROM(SELECTyour_columns,ROWNUMrnumFROMyour_</div>
</li>
<li><a href="/article/1892640352028913664.htm"
title="【大数据分析】Spark SQL查询:使用SQL命令" target="_blank">【大数据分析】Spark SQL查询:使用SQL命令</a>
<span class="text-muted">sword_csdn</span>
<a class="tag" taget="_blank" href="/search/Spark/1.htm">Spark</a><a class="tag" taget="_blank" href="/search/spark/1.htm">spark</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/sql/1.htm">sql</a>
<div>对于使用关系型数据库或分布式数据库的用户可能更容易和更自然地使用SQL,比如Hive。在SparkSQL编写SQL命令时,它们将被转换为DataFrame上的操作。通过连接到Spark的Thrift服务器,它们可以通过标准的JDBC或ODBC协议从应用服务器连接到Spark。Spark支持两种SQL方言:SQL和HQL。Spark社区推荐的是HQL,因为HQL具有更丰富的功能。要使用HQL,需要使</div>
</li>
<li><a href="/article/1892639593170268160.htm"
title="使用SingleStoreDB构建高效的AI检索器" target="_blank">使用SingleStoreDB构建高效的AI检索器</a>
<span class="text-muted">qahaj</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
<div>在构建现代AI应用时,高效存储和检索向量数据是不可或缺的一环。SingleStoreDB是一款高性能的分布式SQL数据库,不仅支持云端和本地部署,还具备向量存储能力及相关函数(如dot_product和euclidean_distance),能够很好地支持基于向量的应用场景,如文本相似度匹配。本文将以SingleStoreDB为核心,结合LangChain生态系统,展示如何实现一个简单但功能强大的</div>
</li>
<li><a href="/article/1892633161351884800.htm"
title="sql注入之python脚本进行时间盲注和布尔盲注" target="_blank">sql注入之python脚本进行时间盲注和布尔盲注</a>
<span class="text-muted">温柔小胖</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a>
<div>一、什么是时间盲注和布尔盲注?答:时间盲注是攻击者通过构造恶意sql语句利用sleep()等延迟函数来观察数据库响应时间差异来进行推断信息和条件判断。如果条件为真,数据库会执行延时操作,如果为假则立即返回。响应时间较短。SELECTIF(1=1,SLEEP(5),0);如果条件为真、数据库会暂停5s如果条件为假、数据库会立即返回布尔盲注通过观察数据库返回的不同响应(如真或假)来推断信息。攻击者构造</div>
</li>
<li><a href="/article/1892629505915285504.htm"
title="Oracle 迁移到 PostgreSQL" target="_blank">Oracle 迁移到 PostgreSQL</a>
<span class="text-muted">@Ycoder</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/postgresql/1.htm">postgresql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
<div>前言:因为公司技术调整,数据库需要从oracle替换为PostgreSQL,替换后很多地方需要对应调整,在此记录方便自己和大家避坑。数据类型对比项OraclePostgreSQL大文本clobtext数字NUMBERNUMERIC可变长字符VARCHAR2VARCHAR函数对比项OraclePostgreSQL行号rownumrow_number()over(orderby…)asrownum取一</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>