12个最重要的J2EE最佳实践
1. 始终使用 MVC 框架。
MVC 框架可以将业务逻辑(Java beans 和 EJB 组件)、控制器逻辑 (Servlets/Struts 动作)、表示层(JSP、XML/XSLT)清晰地分离开来。良好的分层可以带来许多好处。
MVC 框架对于成功使用 J2EE 是如此重要,以致没有其他最佳实践可以与其相提并论。模型-视图-控制器(MVC)是设计 J2EE 应用程序的基础。MVC 将您的程序代码 简单地划分下面几个部分:
负责业务逻辑的代码(即模型??通常使用 EJB 或者普通的 Java 对象来实现)。
负责用户界面 显示的代码(即视图??通常通过 JSP 及标记库来实现,有时也使用 XML 和 XSLT 来实现)。
负责应用程序流程的代码(即控制器?? 通常使用 Java Servlet 或像 Struts 控制器这样的类来实现)。
如果您不遵循基本的 MVC 框架,在开发过程中就会出现许多的问 题。最常见的问题就是在视图部分添加了太多的成分,例如,可能存在使用 JSP 标记来执行数据库访问,或者在 JSP 中进行应用程序的流程 控制,这在小规模的应用程序中是比较常见的,但是,随着后期的开发,这样做将会带来问题,因为 JSP 逐步变得越来越难以维护和调试。
类似地,我们也经常看到将视图层构建到业务逻辑的情况。例如,一个常见的问题就是将在构建视图时使用的 XML 解析技术直接应用 到业务层。业务层应该对业务对象??而不是绑定到视图的特定数据表示进行操作。
然而,只是具有合适的组件并不一定意味着可以使 您的应用程序得到合适的分层。我们常常见到一些应用程序包含 servlet、JSP 和 EJB 组件所有这三项,然而,其主要的业务逻辑却是在 servlet 层实现的,或者应用程序导航是在 JSP 中处理的。您必须进行严格的代码检查并重构您的代码,以确保应用程序的业务逻辑只在模型 层(Model layer)进行处理,应用程序导航只通过控制器层(Controller layer)进行处理,而您的视图(Views)只是将传递过来的模型对 象以 HTML 及 JavaScript 的形式表示出来。
2. 在应用程序的每一层都使用自动单元测试和测试管理。
不要只是测试您的图形用户界面(GUI)。分层的测试使测试及维护工作变得极其简单。
在过去的几年中,在方法学领域有了 相当大的革新,例如新出现的被称为 Agile(例如 SCRUM [Schwaber] 和极限编程 [Beck1])的轻量级方法现在已经得到了很普遍的应用。几 乎所有的这些方法中的一个共同的特征是它们都提倡使用自动的测试工具,这些工具可以帮助开发人员用更少的时间进行回归测试 (regression testing),并可以帮助他们避免由于不充分的回归测试造成的错误,因此可以用来提高程序员的工作效率。实际上,还有一种被 称为 Test-First Development [Beck2] 的方法,这种方法甚至提倡在开发实际的代码之前就先编写单元测试。然而,在您测试代码之前,您 需要将代码分割成一些可测试的片断。一个"大泥球"是难以测试的,因为它不是只实现一个简单的易于识别的功能。如果您的每个代码片断实 现多个方面的功能,这样的代码将难以保证其完全的正确性。
MVC 框架(以及 J2EE 中的 MVC 实现)的一个优点就是元素的组 件化能够(实际上,相当的简单)对您的应用程序进行单元测试。因此,您可以方便地对实体 bean、会话 bean 以及 JSP 独立编写测试用例 ,而不必考虑其他的代码。现在有许多用于 J2EE 测试的框架和工具,这些框架及工具使得这一过程更加简单。例如,JUnit(是一种由 junit.org 开发的开放源代码工具)和 Cactus(由 Apache 开发的开放源代码工具)对于测试 J2EE 组件都非常有用。[Hightower] 详细探讨 了如何在 J2EE 中使用这些工具。
尽管所有这些详述了怎样彻底地测试您的应用程序,但是我们仍然看到一些人认为只要他们测试了 GUI(可能是基于 Web 的 GUI,或者是独立的 Java 应用程序),则他们就全面地测试了整个应用程序。GUI 测试很难达到全面的测试,有以 下几种原因。首先,使用 GUI 测试很难彻底地测试到系统的每一条路径,GUI 仅仅是影响系统的一种方式,可能存在后台运算、脚本和各种各 样的其他访问点,这也需要进行测试。然而,它们通常并不具有 GUI。第二,GUI 级的测试是一种非常粗粒度的测试。这种测试只是在宏观水 平上测试系统的行为。这意味着一旦发现存在问题,则与此问题相关的整个子系统都要进行检查,这使得找出 bug(缺陷)将是非常困难的事 情。第三,GUI 测试通常只有在整个开发周期的后期才能很好地得到测试,这是因为只有这那个时候 GUI 才得到完整的定义。这意味着只有在 后期才可能发现潜在的 bug。第四,一般的开发人员可能没有自动的 GUI 测试工具。因此,当一个开发人员对代码进行更改时,没有一种简单 的方法来重新测试受到影响的子系统。这实际上不利于进行良好的测试。如果开发人员具有自动的代码级单元测试工具,开发人员就能够很容 易地运行这些工具以确保所做的更改不会破坏已经存在的功能。最后,如果添加了自动构建功能,则在自动构建过程中添加一个自动的单元测 试工具是非常容易的事情。当完成这些设置以后,整个系统就可以有规律地进行重建,并且回归测试几乎不需要人的参与。
另外 ,我们必须强调,使用 EJB 和 Web 服务进行分布式的、基于组件的开发使得测试单个的组件变得非常必要。如果没有"GUI"需要测试,您就必 须进行低级(lower-level)测试。最好以这种方式开始测试,省得当您将分布式的组件或 Web 服务作为您的应用程序的一部分时,您不得不 花费心思重新进行测试。
总之,通过使用自动的单元测试,能够很快地发现系统的缺陷,并且也易于发现这些缺陷,使得测试工作变 得更加系统化,因此整体的质量也得以提高。
3. 按照规范来进行开发,而不是按照应用服务器来进行开发。
要将规范熟记于心,如果要背离规范,要经过慎密的考虑后才可以这样做。这是因为当您背离规则的时候,您所做的事情往往并不是 您应该做的事情。
当您要背离 J2EE 可以允许您做的事情的时候,这很容易让使您遭受不幸。我们发现有一些开发人员钻研一些 J2EE 允许之外的东西,他们认为这样做可以"稍微"改善J2EE的性能,而他们最终只会发现这样做会引起严重的性能问题,或者在以后的移植( 从一个厂商到另一个厂商,或者是更常见的从一个版本到另一个版本)中会出现问题。实际上,这种移植问题是如此严重,以致 [Beaton] 将 此原则称为移植工作的基本最佳实践。
现在有好几个地方如果不直接使用 J2EE 提供的方法肯定会产生问题。一个常见的例子 就是开发人员通过使用 JAAS 模块来替代 J2EE 安全性,而不是使用内置的遵循规范的应用程序服务器机制来进行验证和授权。要注意不要脱 离 J2EE 规范提供的验证机制,如果脱离了此规范,这将是系统存在安全漏洞以及厂商兼容性问题的主要原因。类似地,要使用 servlet 和 EJB 规范提供的授权机制,并且如果您要偏离这些规范的话,要确保使用规范定义的 API(例如 getCallerPrincipal())作为实现的基础。通 过这种方式,您将能够利用厂商提供的强安全性基础设施,其中,业务要求需要支持复杂的授权规则。
其他常见的问题包括使用不遵 循 J2EE 规范的持久性机制(这使得事务管理变得困难)、在J2EE程序中使用不适当的J2SE 方法(例如线程或 singleton),以及使用您自己 的方法解决程序到程序(program-to-program)的通信,而不是使用 J2EE 内在支持的机制(例如 JCA、JMS 或 Web 服务)。当您将一个遵循 J2EE 的服务器移植到其他的服务器上,或者移植到相同服务器的新版本上,上述的设计选择将会造成无数的问题。唯一要背离规范的情况是, 当一个问题在规范的范围内无法解决的时候。例如,安排执行定时的业务逻辑在 EJB2.1 出现之前是一个问题,在类似这样的情况下,我们建 议当有厂商提供的解决方案时就使用厂商提供的解决方案(例如 WebSphere Application Server Enterprise 中的 Scheduler 工具),而在 没有厂商提供的解决方案时就使用第三方提供的工具。如果使用厂商提供的解决方案,应用程序的维护以及将其移植到新的规范版本将是厂商 的问题,而不是您的问题。
最后,要注意不要太早地采用新技术。太过于热衷采用还没有集成到 J2EE 规范的其他部分或者还 没有集成到厂商的产品中的技术常会带来灾难性的后果。支持是关键的??如果您的厂商不直接支持一种特定的在 JSR 中提出的技术,但此技术 还没有被 J2EE 所接受,那么您就不应该采用此技术。毕竟,我们中的大多数人从事解决业务问题,而不是推进技术的发展。
4. 从一开始就计划使用 J2EE 安全性。
启用 WebSphere 安全性。这使您的 EJB 和 URL 至少可以让所 有授权用户访问。不要问为什么??照着做就是了。
在与我们合作的客户中,一开始就打算启用 WebSphere J2EE 安全性的顾客 是非常少的,这一点一直让我们感到吃惊。据我们估计大约只有 50% 的顾客一开始就打算使用此特性。例如,我们曾与一些大型的金融机构( 银行、代理等等)合作过,他们也没有打算启用安全性。幸运的是,这种问题在部署之前的检查时就得以解决.
不使用 J2EE 安全性 是危险的事情。假设您的应用程序需要安全性(几乎所有的应用程序都需要),您敢打赌您的开发人员能够构建出自己的安全性系统,而这个 系统比您从 J2EE 厂商那里买来的更好。这可不是个好的赌注,为分布式的应用程序提供安全性是异常困难的。例如,您需要使用网络安全加 密令牌控制对 EJB 的访问。以我们的经验看来,大多数自己构建的安全性系统是不安全的,并且有重大的缺陷,这使产品系统极其脆弱。
一些不使用 J2EE 安全性的理由包括:担心性能的下降,相信其他的安全性(例如 Netegrity SiteMinder)可以取代 J2EE 安全性, 或者是不知道 WebSphere Application Server 安全特性及功能。不要陷入这些陷阱之中,尤其是,尽管像 Netegrity SiteMinder 这样的产 品能够提供优秀的安全特性,但是仅仅其自身不可能保护整个 J2EE 应用程序。这些产品必须与 J2EE 应用程序服务器联合起来才可能全面地 保护您的系统。
其他的一种常见的不使用 J2EE 安全性的原因是:基于角色的模型没有提供足够的粒度访问控制以满足复杂的业务规 则。尽管事实是这样的,但这也不应该成为不使用 J2EE 安全性的理由。相反地,应该将 J2EE 验证及 J2EE 角色与特定的扩展规则结合起来 。如果复杂的业务规则需要做出安全性决策,那就编写相应的代码,其安全性决策要基于可以直接使用的以及可靠的 J2EE 验证信息(用户 ID 和角色)。
5. 创建您所知道的
反复的开发工作将使您能够逐渐地掌握所有的 J2EE 模块。要从创建小而简单的模块开 始而不是从一开始就马上涉及到所有的模块。
我们必须承认 J2EE 是庞大的体系。如果一个开发小组只是开始使用 J2EE,这将很难 一下子就能掌握它。在 J2EE 中有太多的概念和 API 需要掌握。在这种情况下,成功掌握 J2EE 的关键是从简单的步骤开始做起。
这种方法可以通过在您的应用程序中创建小而简单的模块来得到最好的实现。如果一个开发小组通过创建一个简单的域模型以 及后端的持久性机制(也许使用的是 JDBC),并且对其进行了完整的测试,这会增强他们的自信心,于是他们会使用该域模型去掌握使用 servlet 和 JSP 的前端开发。如果一个开发组发现有必要使用 EJB,他们也会类似地开始在容器管理的持久性 EJB 组件之上使用简单的会话 Facades,或者使用基于 JDBC 的数据访问对象(JDBC-based Data Access Objects,DAO),而不是跳过这些去使用更加复杂的构造(例如消 息驱动bean和JMS)。
这种方法并不是什么新方法,但是很少有开发组以这种方式来培养他们的技能。相反地,多数开发组由于尝试 马上就构建所有的模块,同时涉及 MVC 中的视图层、模型层和控制器层,这样做的结果是他们往往会陷入进度的压力之中。他们应该考虑一些 敏捷(Agile)开发方法,例如极限编程(XP),这种开发方法采用一种增量学习及开发方法。在 XP 中有一种称为 ModelFirst 的过程,这个 过程涉及到首先构建域模型作为一种机制来组织和实现用户场景。基本说来,您要构建域模型作为您要实现的用户场景的首要部分,然后在域 模型之上构建一个用户界面(UI)作为用户场景实现的结果。这种方法非常适合让一个开发组一次只学到一种技术,而不是让他们同时面对很 多种情况(或者让他们读很多书),这会令他们崩溃的。
还有,对每个应用程序层重复的开发可能会包含一些适当的模式及最佳实践 。如果您从应用程序的底层开始应用一些模式如数据访问对象和会话 Facades,您就不应该在您的JSP和其他视图对象中使用域逻辑。
最后,当您开发一些简单的模块时,在开始的初期就可以对您的应用程序进行性能测试。如果直到应用程序开发的后期才进行性能测 试的话,这往往会出现灾难性的后果。
6. 当使用 EJB 组件时,始终使用会话 Facades。
决不 要将实体 bean 直接暴露给任何用户类型。对实体 bean 只可以使用本地 EJB 接口(Local EJB interfaces)。
当使用 EJB 组件时 ,使用一个会话 Facades 是一个确认无疑的最佳实践。实际上,这个通用的实践被广泛地应用到任何分布式的技术中,包括 CORBA、EJB 和 DCOM。从根本上讲,您的应用程序的分布"交叉区域"越是底层化,对小块的数据由于多次重复的网络中继造成的时间消耗就越少。要达到这个 目的的方法就是:创建大粒度的 Facades 对象,这个对象包含逻辑子系统,因而可以通过一个方法调用就可以完成一些有用的业务功能。这种 方法不但能够降低网络开销,而且在 EJB 内部通过为整个业务功能创建一个事务环境也可以大大地减少对数据库的访问次数。
EJB 本地接口(从 EJB 2.0 规范开始使用)为共存的 EJB 提供了性能优化方法。本地接口必须被您的应用程序显式地进行访问,这需要代码的改 变和防止以后配置 EJB 时需要应用程序的改变。由于会话 Facades 和它包含的整个 EJB 对于彼此来说都应该是本地的,我们建议对会话 Facades 后面的实体 bean 使用本地接口。然而,会话 Facades 本身的实现(典型例子如无状态会话 bean)应该设计为远程接口。
为了性能的优化,可以将一个本地接口添加到会话 Facades。这样做利用了这样一个事实:在大多数情况下(至少在 Web 应用程序中),您的 EJB 客户端和 EJB 会共同存在于同一个 Java 虚拟机(JVM)中。另外一种情况,如果会话 Facades 在本地被调用,可以使用 J2EE 应用服务 器配置优化(configuration optimizations),例如 WebSphere 中的"No Local Copies"。然而,您必须注意到这些可供选择的方案会将交互 方法从按值传递(pass-by-value)改变为按引用传递(pass-by-reference)。这可能会在您的代码中产生很微妙的错误。当您要利用这些方 案时,您应该在一开始就考虑其可行性。
如果在您的会话 Facades 中使用远程接口(而不是本地接口),您也可以将同样的会 话 Facades 在 J2EE 1.4 中以兼容的方式作为 Web 服务来配置。这是因为 JSR 109(J2EE 1.4 中的 Web 服务部署部分)要求使用无状态会 话 bean 的远程接口作为 EJB Web 服务和 EJB 实现的接口。这样做是值得的,因为这样做可以为您的业务逻辑增加客户端类型的数量。
7. 使用无状态会话 bean,而不是有状态会话 bean
这样做可以使您的系统经得起错误的终止。使用 HttpSession 存储和用户相关的状态。
以我们的观点看来,有状态会话 bean 的概念已经过时了。如果您仔细对其考虑一下,一个有 状态会话 bean 实际上与一个 CORBA 对象在体系结构上是完全相同的,无非就是一个对象实例,绑定到一个服务器,并且依赖于服务器来管理 其生命周期。如果服务器关闭了,这种对象也就不存在,那么这个 bean 的客户端的信息也就不存在。
J2EE 应用服务器为有状态会 话 bean 提供的故障转移(failover)能够解决一些问题,但是有状态的解决方案没有无状态的解决方案易于扩展。例如,在 WebSphere Application Server 中,对无状态会话 bean 的请求,是通过对部署无状态会话的成员集群进行平衡加载来实现。相反地,J2EE 应用服务器 不能对有状态 bean 的请求进行平衡加载。这意味着您的集群中的服务器的加载过程会是不均衡的。此外,使用有状态会话 bean 将会再添加 一些状态到您的应用服务器上,这也是不好的做法。这样就增加了系统的复杂性,并且在出现故障的情况下使问题变得复杂化。创建健壮的分 布式系统的一个关键原则是尽量使用无状态行为。
因此,我们建议对大多数应用程序使用无状态会话 bean 方法。任何在处理时需要 使用的与用户相关的状态应该以参数的形式传送到 EJB 的方法中(并且通过使用一种机制如 HttpSession 来存储它)或者从持久性的后端存 储(例如通过使用实体 bean)作为 EJB 事务的一部分来进行检索。在合适的情况下,这个信息可以缓存到内存中,但是要注意在分布式的环境 中保存这种缓存所潜在的挑战性。缓存非常适合于只读数据。
总之,您要确保从一开始就要考虑到可伸展性。检查设计中的所有设想 ,并且考虑到当您的应用程序要在多个服务器上运行时,是否也可以正常运行。这个规则不但适合上述情况的应用程序代码,也适用于如 MBean 和其他管理界面的情况下。
避免使用有状态性不只是对 IBM/WebSphere 的建议,这是一个基本的 J2EE 设计原则。
8. 使用容器管理的事务
学习一下 J2EE 中的两阶段提交事务,并且使用这种方式,而不是开放您自己的 事务管理。容器在事务优化方面几乎总是比较好的。
使用容器管理的事务(CMT)提供了两个关键的优势(如果没有容器支持这几乎 是不可能的):可组合的工作单元和健壮的事务行为。
如果您的应用程序代码显式地使用了开始和结束事务(也许使用 javax.jts.UserTransaction 或者甚至是本地资源事务),而将来的要求需要组合模块(也许会是代码重构的一部分),这种情况下往往需要 改变事务代码。例如,如果模块 A 开始了一个数据库事务,更新数据库,随后提交事务,并且有模块 B 做出同样的处理,请考虑一下当您在 模块 C 中尝试使用上述两个模块,会出现什么情况呢?现在,模块 C 正在执行一个逻辑动作,而这个动作实际上将调用两个独立的事务。如 果模块 B 在执行中失败了,而模块 A 的事务仍然能被提交。这是我们所不希望出现的行为。如果,相反地,模块 A 和模块 B 都使用 CMT 的 话,模块 C 也可以开始一个 CMT(通常通过配置描述符),并且在模块 A 和模块 B 中的事务将是同一个事务的隐含部分,这样就不再需要复 杂的重写代码的工作了。
如果您的应用程序在同一个操作中需要访问多种资源,您就要使用两阶段提交事务。例如,如果从 JMS 队 列中删除一个消息,并且随后更新基于这条消息的纪录,这时,要保证这两个操作都会执行或都不会执行就变得尤为重要。如果一条消息已经 从队列中被删除,而系统没有更新与此消息相关的数据库中的纪录,那么这种系统是不稳定的。一些严重的客户及商业纠纷源自不一致的状态 。
我们时常看到一些客户应用程序试图实现他们自己的解决方案。也许会通过应用程序的代码在数据库更新失败的时候 "撤销"对队 列的操作。我们不提倡这样做。这种实现要比您最初的想象要复杂得多,并且还有许多其他的情况(想象一下如果应用程序在执行此操作的过 程中突然崩溃的情况)。作为替代的方式,应该使用两阶段提交事务。如果您使用 CMT,并且在一个单一的 CMT 中访问两阶段提交的资源(例 如 JMS 和大多数数据库),WebSphere 将会处理所有的复杂工作。它将确保整个事务被执行或者都不被执行,包括系统崩溃、数据库崩溃或其 他的情况。其实现在事务日志中保存着事务状态。当应用程序访问多种资源的时候,我们怎么强调使用 CMT 事务的必要性都不为过。
9. 将 JSP 作为表示层的首选
只有在需要多种表示输出类型,并且输出类型被一个单一的控制器及后端支持时才使 用 XML/XSLT。
我们常听到一些争论说,为什么您选择 XML/XSLT 而不是 JSP 作为表示层技术。选择 XML/XSLT 的人的观点是,JSP" 允许您将模型和视图混合在一起",而 XML/XSLT 不会有这种问题。遗憾的是,这种观点并不完全正确,或者至少不像白与黑那样分的清楚。实 际上,XSL 和 XPath 是编程语言。XSL 是图灵完成的(Turing-complete),尽管它不符合大多数人定义的编程语言,因为它是基于规则的, 并且不具备程序员习惯的控制工具。
现在的问题是既然给予了这种灵活性,开发人员就会利用这种灵活性。尽管每个人都认同 JSP 使开发人员容易在视图中加入"类似模型"的行为,而实际上,在 XSL 中也有可能做出一些同样的事情。尽管从 XSL 中进行访问数据库这样的 事情会非常困难,但是我们曾经见到过一些异常复杂的 XSLT 样式表执行复杂的转换,这实际上是模型代码。
然而,应该选择 JSP 作为首选的表示技术的最基本的原因是,JSP 是现在支持最广泛的、也是最被广泛理解的 J2EE 视图技术。而随着自定义标记库、JSTL 和 JSP2.0 的新特性的引入,创建 JSP 变得更加容易,并且不需要任何 Java 代码,以及可以将模型和视图清晰的分离开。在一些开发环境中( 如 WebSphere Studio)加入了对 JSP(包括对调试的支持)的强大支持,并且许多开发人员发现使用 JSP 进行开发要比使用 XLS 简单,一些 支持 JSP 的图形设计工具及其他特征(尤其在 JSF 这样的框架下)使得开发人员可以以所见即所得的方式进行 JSP 的开发,而对于 XSL 有 时不容易做到。
最后一个要谨慎考虑使用 JSP 的原因是速度问题。在 IBM 所作的对比 XSL 和 JSP 相对速度的性能测试显示:在大 多数情况下,JSP 在生成同样的 HTML 的时候,要比 XSL 快好几倍,甚至使用编译过的 XSL 也是如此。尽管多数情况下这不是问题,但在性 能要求很高的情况下,这就会成为问题。
然而,这也不能说,您永远也不要使用 XSL。在一些情况下,XSL 能够表示一组固定的数据 ,并且可以基于不同的样式表来以不同的方式显示这些数据的能力是显示视图的最佳解决方案。然而,这只是一种例外的情况,而不是通用的 规则。如果您只是生成 HTML 来表达每一个页面,那么在大多数情况下,XSL 是一种不必要的技术,并且,它给您的开发人员所带来的问题远 比它所能解决的问题多。
10. 当使用 HttpSession 时,尽量只将当前事务所需要的状态保存其中,其他内容不要保存在 HttpSession 中。
启用会话持久性。
HttpSessions 对于存储应用程序状态信息是非常有用的。其 API 易于使用和理解。遗憾的是,开发人员常常遗忘了 HttpSession 的目的----用来保持暂时的用户状态。它不是任意的数据缓存。我们已经 见到过太多的系统为每个用户的会话放入了大量的数据(达到兆字节)。那好了,如果同时有 1000 个登录系统的用户,每个用户拥有 1MB 的 会话数据,那么就需要 1G 或者更多的内存用于这些会话。要使这些 HTTP 会话数据较小一些,不然的话,您的应用程序的性能将会下降。一 个大约比较合适的数据量应该是每个用户的会话数据在 2K-4K 之间,这不是一个硬性的规则,8K 仍然没有问题,但是显然会比 2K 时的速度 要慢。一定要注意,不要使 HttpSession 变成数据堆积的场所。
一个常见的问题是使用 HttpSession 缓存一些很容易再创建 的信息,如果有必要的话。由于会话是持久性的,进行不必要的序列化以及写入数据是一种很奢侈的决定。相反地,应该使用内存中的哈希表 来缓存数据,并且在会话中保存一个对此数据进行引用的关键字。这样,如果不能成功登录到另外的应用服务器的话,就可以重新创建数据。
当谈及会话持久性时,不要忘记要启用这项功能。如果您没有启用会话持久性,或者服务器因为某种原因停止了(服务器故障或正常 的维护),则所有此应用服务的当前用户的会话将会丢失。这是件令人非常不高兴的事情。用户不得不重新登录,并且重新做一些他们曾经已 经做过的事情。相反地,如果启用了会话持久性,WebSphere 会自动将用户(以及他们的会话)移到另外一个应用服务器上去。用户甚至不知 道会有这种事情的发生。我们曾经见到过一些产品系统因为存在于本地代码中令人难以忍受的 bug(不是 IBM 的代码!)而突然崩溃的情况, 这这种情况下,上述功能仍然可以运行良好。
11. 在 WebSphere 中,使用动态缓存,并使用 WebSphere servlet 缓 存机制。
通过使用这些功能,系统性能可以得到很大的提高,而开销是很小的。并且不影响编程模型。
通 过缓存来提高性能的好处是众所周知的事情。遗憾的是,当前的 J2EE 规范没有包括一种用于 servlet/JSP 缓存的机制。然而,WebSphere 提 供了对页面以及片断缓存的支持,这种支持是通过其动态缓存功能来实现的,并且不需要对应用程序作出任何改变。其缓存的策略是声明性的 ,而且其配置是通过 XML 配置描述符来实现的。因此,您的应用程序不会受到影响,并保持与 J2EE 规范的兼容性和移植性,同时还从 WebSphere 的 servlet 及 JSP 的缓存机制中得到性能的优化。
从 servet 及 JSP 的动态缓存机制得到的性能的提高是显而易见的 ,这取决于应用程序的特性。Cox 和 Martin [Cox] 指出对一个现有的 RDF(资源描述格式)站点摘要 (RSS)servlet,当使用动态缓存时,其 性能可以提高 10%。请注意这个实验只涉及到一个简单的 servlet,这个性能的增长量可能并不能反映一个复杂的应用程序。
为了更 多地提高性能,将 WebSphere servlet/JSP 结果缓存与 WebSphere 插件 ESI Fragment 处理器、IBM HTTP Server Fast Response Cache Accelerator (FRCA) 和 Edge Server 缓存功能集成在一起。对于繁重的基于读取的工作负荷,通过使用这些功能可以得到许多额外的好处。
12. 为了提高程序员的工作效率,将 CMP 实体 bean 作为 O/R 映射的首选解决方案.
通过 WebSphere 框架(readahead、缓存、隔离级别等)优化性能。如果可能,有选择的应用一些模式来达到提高性能的目的,例如 Fast-Lane 阅读器 [Marinescu]。
对象/关系(O/R)映射是使用 Java 创建企业级的应用程序的基础。几乎每个 J2EE 应用程序都需要一些类型的 O/R 映射。J2EE 厂商提供一种 O/R 映射机制,这种机制在不同的厂商间是可移植的,高效的,并且能够被一些标准及工具很好地支持。这就是 EJB 规范中的 CMP(容器管理的持久性)部分。
早期的 CMP 实现以表现不佳及不支持许多 SQL 结构而著称。然而,随着 EJB 2.0 及 2.1 规范的出现,以及被一些厂商所采纳,并且随着像 IBM WebSphere Studio Application Developer 的出现,这些问题已经不再是问题 了。
CMP EJB 组件现在已经被广泛地应用于许多高性能的应用程序中。WebSphere 包括一些优化功能以提高 EJB 组件的性能,优化 功能包括:对生命周期的缓存和 read-ahead 能力。这两者优化功能都是配置时的选项,并且不需要对应用程序进行修改或者影响可移植性。
处于缓存状态的生命周期缓存 CMP 状态数据并提供基于时间的无效性。从处于缓存状态的生命周期得到的性能提高可以达到选项 A 的缓存性能,并且仍然可以为您的应用程序提供可伸展性。Read-ahead 能力和容器管理的关系结合使用。这个特性通过在相同的查询中随意地 检索相关的数据作为父数据而减少与数据库的交互。如果相关的数据要通过使用并发的查询来访问的话,这种方法可以得到性能的改进。 [Gunther]提供了详细的描述以及通过这些特性得到的性能提高的细节。
此外,为了完全优化您的 EJB 组件,当指定隔离级别时要特 别注意。尽可能使用最低的隔离级别,并且仍然保持您的数据的完整性。较低的隔离级别可以提供最佳的性能,并且可以降低出现数据库死锁 的危险。
这是目前最有争议的最佳实践。已经有大量的文章赞扬 CMP EJB,同样的贬斥声也不绝于耳。然而,这里最基本的问题是数 据库开发是困难的。当您开始使用任何持久性解决方案之前,您需要掌握查询以及数据库锁定如何工作这些基础知识。如果您选择使用 CMP EJB,您要确保您已经通过一些书籍(例如 [Brown] 和 [Barcia])知道如何使用它们。在锁定及争用方面有一些微妙的交互难以理解,但是, 在您耗费一定的时间及努力后会将其掌握的。
星期五, 九月 28, 2007
[fwd]CA SiteMinder Web Access Manager
CA SiteMinder Web Access Manager
CA SiteMinder 提供了一种企业级的安全基础架构,可以安全有效地向员工、顾客和业务合作伙伴提供Web应用和Web站点访问。
概述
CA SiteMinder 是什么?
CA SiteMinder 是一种集中式Web访问管理系统,它支持用户身份验证和单点登录,基于策略的授权、身份联盟以及Web应用和门户访问的审计。
CA SiteMinder 面临的访问管理挑战是什么?
CA SiteMinder 可以弱化 IT 安全相关风险,降低应用的开发成本和运用成本,同时还会增强用户的Web应用体验。
CA SiteMinder 具有哪些特性?
CA SiteMinder 隶属于一种高度可管理的、可靠的、可扩展的著名企业安全系统,它具有集中式Web单点登录、身份验证管理、基于策略的授权、身份联盟和审计服务等特征。
CA SiteMinder 支持哪些平台?
CA SiteMinder 支持 UNIX、Linux 以及 Windows,还支持主机、应用服务器、Web服务器、ERP、CRM、RDBMS、目录服务器和其他系统。
星期三, 九月 26, 2007
常用新闻组列表
新闻组是个人向新闻服务器所张贴邮件的集合。
您几乎可以找到任何主题的新闻组。虽然某些新闻组是受到监控的,但大多数不是。对于受监控的新闻组,其“拥有者”可以检查张贴的邮件、提出问题,或删除不适当的邮件等等。任何人都可以向新闻组张贴邮件。新闻组不需要成员资格或加入费用。
Internet 服务提供商必须为您提供与一个或多个新闻服务器的链接,以便在新闻组阅读器中使用新闻组。在新闻组阅读器中为每台需要的服务器设置完帐户后,您就可以在该新闻服务器上的新闻组中随意阅读和张贴邮件了。
找到喜爱的新闻组时,您可以“预订”它,这样它会显示在新闻组阅读器的文件夹列表中。通过预订您可以方便地访问喜欢的新闻组,而不必在每次要访问一个喜欢的新闻组时去翻阅服务器上冗长的新闻组列表了。
常用新闻组服务器
宁波新闻组 news://news.cnnb.net
微软新闻组 news://msnews.microsoft.com
万千新闻组 news://news.webking.cn
希网新闻组 news://news.cn99.com
雅科新闻组 news://news.yaako.com
香港新闻组 news://news.newsgroup.com.hk
前线新闻组 news://freenews.netfront.net
其他新闻组
b.. news://news.freeforum.org
c.. news://news.netteens.net
d.. news://news.so-net.com.hk
e.. news://freenews.netfront.net
f.. news://news.3home.net
g.. news://news.newsgroup.com.hk
h.. news://news.popart.com.hk
i.. news://news.hkhosting.com
j.. news://wonderspace.net
k.. news://news.hkpeople.net
l.. news://news.netgod.org.hk
m.. news://news.tatgod.com
n.. news://ourrice.com
o.. news://hknews.info
p.. news://inhk.net
q.. news://newsgroup.cc
r.. news://news.dial-up.to
s.. news://news.hkbookmarks.com
t.. news://news.school.net.hk
u.. news://news.wonderfuland.net
v.. news://news.imart.com.hk
w.. news://news.hkux.net
x.. news://news.linux.org.hk
y.. news://news.idclub.net
z.. news://news.debugnet.com
aa.. news://news.hkcampus.net
ab.. news://news.nntp.cn
ac.. news://news.ismart.net
ad.. news://hk-system.com/hk.ive
ae.. news://news.whiz.com.hk
af.. news://news.siukeung.com
ag.. news://news.asdfasdf.org
ah.. news://news.visualmedia.com.hk
ai.. news://news.net4hk.com
aj.. news://news.nowstart.com
ak.. news://news.idotworld.com
al.. news://news.hkhost.net
am.. news://news.hkpcug.org
an.. news://news.easy4web.com
ao.. news://news.adtic.com
ap.. news://news.wyk.edu.hk
aq.. news://news.w3.com.hk
ar.. news://news.e-fever.org
as.. news://news.loveclubhk.com
at.. news://newsgroup.com.hk
au.. news://news.d2g.com
av.. news://news.hkxdd.net
aw.. news://news.grace-ip.net
ax.. news://news.chau.com.hk
java高级时间概念[转贴]
如果你的Java 程序向处在不同时区或者不同国家的用户显示时间和日期,那么你需要了解Java日期类的一些更加高级的方面。在“使用Java Date和Calendar类计算,定制和解析日期”的这篇文章里我们提供了对日期,日期数据的格式化,日期数据的解析和日期计算的一个概览。对于这些概念的深入的理解对于讨论更高级的诸如时区,国际化标准格式和SQL日期数据等这些有关日期的问题是关键的。
我们在本文中讨论的类将包含java.text.DateFormat,以及java.util.TimeZone和java.util.Locate。我们还将讨论如何使用一个java.util.Date的子类java.sql.Date来从Oracle数据库里提取和保存Java日期数据。
地区的问题
在我们国际化我们的日期数据以前,我们需要进一步的学习Locale类,也就是java.util.Locale。Locale类的一个实例通常包含国家和语言信息。其中的每一个部分都是由基于国际标准化组织(ISO)制定的国家代码ISO-3166和语言代码ISO-639的两字符的字符串构成的。
让我们来创建两个Locale实例,其中一个对应的是美国英语而另一个对应的是法国法语。见表A。
表A
import java.util.Locale;
public class DateExample6 {
public static void main(String[] args) {
// Create a locale for the English language in the US.
Locale localeEN = new Locale("en", "US");
System.out.println("Display Name: " +
localeEN.getDisplayName());
System.out.println("Country: " + localeEN.getCountry());
System.out.println("Language: " + localeEN.getLanguage());
// Create a locale for the French language in France.
Locale localeFR = new Locale("fr", "FR");
System.out.println("\nDisplay Name: " +
localeFR.getDisplayName());
System.out.println("Country: " + localeFR.getCountry());
System.out.println("Language: " + localeFR.getLanguage());
// Display the English-US locale in French
System.out.println("\nen Display Name in French: " +
localeEN.getDisplayName(localeFR));
}
}
在这个例子中,我们用getDisplayName方法来显示Locale的一个更易读的文本。你还应该注意到我们在最后一次调用getDisplayName的时候,我们在对English Locale对象调用getDisplayName的时候同时传递了French Locale对象。这允许我们选择显示Locale对象所用的语言,让我们用英语显示法语Locale对象的内容。下面是这个例子的输出:
Display Name: English (United States)
Country: US
Language: en
Display Name: French (France)
Country: FR
Language: fr
en Display Name in French: anglais (états-Unis)
多个地域的日期格式化
使用java.util.Locale和java.text.DateFormat类我们就能够格式化日期数据把它显示给在另一个地域的用户,比方法国。表B中的例子为英语和法语各创建了一个完整的日期格式化器。
表 B
import java.util.Locale;
import java.util.Date;
import java.text.DateFormat;
public class DateExample7 {
public static void main(String[] args) {
// Get the current system date and time.
Date date = new Date();
// Get a France locale using a Locale constant.
Locale localeFR = Locale.FRANCE;
// Create an English/US locale using the constructor.
Locale localeEN = new Locale("en", "US" );
// Get a date time formatter for display in France.
DateFormat fullDateFormatFR =
DateFormat.getDateTimeInstance(
DateFormat.FULL,
DateFormat.FULL,
localeFR);
// Get a date time formatter for display in the U.S.
DateFormat fullDateFormatEN =
DateFormat.getDateTimeInstance(
DateFormat.FULL,
DateFormat.FULL,
localeEN);
System.out.println("Locale: " + localeFR.getDisplayName());
System.out.println(fullDateFormatFR.format(date));
System.out.println("Locale: " + localeEN.getDisplayName());
System.out.println(fullDateFormatEN.format(date));
}
}
这个例子的输出是:
Locale: French (France)
vendredi 5 octobre 2001 21 h 05 GMT-04:00
Locale: English (United States)
Friday, October 5, 2001 9:05:54 PM EDT
注意这个输出包括了时区信息:GMT-04:00 和 PM EDT。这个时区是人系统的时区设置里捕获的。你可以看见,日期是以那个地区的用户期望的格式显示的。让我们等一下来看看时区的概念
时区
TimeZone类,即java.util.TimeZone类的实例包含了一个与格林威治标准时间(GMT)相比较得出的以微秒为单位的时区偏移量,而且它还处理夏令时
。要获得一个所有支持的进区的列表,你可以使用方法TimeZone.getAvailableIDs,它将返回一个包含了所有进区ID的字符串数组。要知道关于TimeZone类的更多细节,可以参看Sun公司的Web站点。
为了演示这个概念,我们将创建三个时区对象。第一个对象将使用getDefault从系统时钟返回时区数据;第二个和第三个对象将传入一个时区字符串ID。见表C中的代码。
表 C
import java.util.TimeZone;
import java.util.Date;
import java.text.DateFormat;
import java.util.Locale;
public class DateExample8 {
public static void main(String[] args) {
// Get the system time zone.
TimeZone timeZoneFL = TimeZone.getDefault();
System.out.println("\n" + timeZoneFL.getDisplayName());
System.out.println("RawOffset: " + timeZoneFL.getRawOffset());
System.out.println("Uses daylight saving: " + timeZoneFL.useDaylightTime());
TimeZone timeZoneLondon = TimeZone.getTimeZone("Europe/London");
System.out.println("\n" + timeZoneLondon.getDisplayName());
System.out.println("RawOffset: " + timeZoneLondon.getRawOffset());
System.out.println("Uses daylight saving: " + timeZoneLondon.useDaylightTime());
燭imeZone timeZoneParis = TimeZone.getTimeZone("Europe/Paris");
System.out.println("\n" + timeZoneParis.getDisplayName());
System.out.println("RawOffset: " + timeZoneParis.getRawOffset());
System.out.println("Uses daylight saving: " + timeZoneParis.useDaylightTime());
}
}
其输出如下:
Eastern Standard Time
RawOffset: -18000000
Uses daylight saving: true
GMT+00:00
RawOffset: 0
Uses daylight saving: true
Central European Standard Time
RawOffset: 3600000
Uses daylight saving: true
正如你所看见的,TimeZone对象给我们的是原始的偏移量,也就是与GMT相差的微秒数,而且还会告诉我们这个时区是否使用夏令时。有个这个信息,我们就能够继续将时区对象和日期格式化器结合在一起在其它的时区和其它的语言显示时间了。
国际化的时期显示了时区转换
让我们来看一个结合了国际化显示,时区和日期格式化的例子。表D为一个在迈阿密和巴黎拥有办公室的公司显示了当前的完整日期和时间。对于迈阿密的办公室,我们将在每个办公室里用英语显示完整的日期和时间。对于巴黎的办公室,我们将用法语显示完整的当前日期和时间。
表 D
import java.util.TimeZone;
import java.util.Date;
import java.util.Locale;
import java.text.DateFormat;
public class DateExample9 {
public static void main(String[] args) {
Locale localeEN = Locale.US;
Locale localeFrance = Locale.FRANCE;
TimeZone timeZoneMiami = TimeZone.getDefault();
TimeZone timeZoneParis = TimeZone.getTimeZone("Europe/Paris");
DateFormat dateFormatter = DateFormat.getDateTimeInstance(
DateFormat.FULL,
DateFormat.FULL,
localeEN);
DateFormat dateFormatterParis = DateFormat.getDateTimeInstance(
DateFormat.FULL,
DateFormat.FULL,
localeFrance);
Date curDate = new Date();
System.out.println("Display for Miami office.");
// Print the Miami time zone display name in English
System.out.println(timeZoneMiami.getDisplayName(localeEN));
// Set the time zone of the dateFormatter to Miami time zone.
dateFormatter.setTimeZone(timeZoneMiami);
// Print the formatted date.
System.out.println(dateFormatter.format(curDate));
// Set the time zone of the date formatter to Paris time zone.
dateFormatter.setTimeZone(timeZoneParis);
// Print the Paris time zone display name in English.
System.out.println(timeZoneParis.getDisplayName(localeEN));
// Print the Paris time in english.
System.out.println(dateFormatter.format(curDate));
System.out.println("\nDisplay for Paris office.");
// Print the Miami time zone display name in French
System.out.println(timeZoneMiami.getDisplayName(localeFrance));
// Set the timezone of the
// dateFormatterParis to Miami time zone.
dateFormatterParis.setTimeZone(timeZoneMiami);
// Print the formatted date in French.
燬ystem.out.println(dateFormatterParis.format(curDate));
// Set the timezone of the date formatter to Paris time zone.
dateFormatterParis.setTimeZone(timeZoneParis);
// Print the Paris time zone display name in French.
System.out.println(timeZoneParis.getDisplayName(localeFrance));
// Print the Paris time in French.
System.out.println(dateFormatterParis.format(curDate));
}
}
这个例子的输出是:
Display for Miami office.
Eastern Standard Time
Friday, October 5, 2001 10:28:02 PM EDT
Central European Standard Time
Saturday, October 6, 2001 4:28:02 AM CEST
Display for Paris office.
GMT-05:00
vendredi 5 octobre 2001 22 h 28 GMT-04:00
GMT+01:00
samedi 6 octobre 2001 04 h 28 GMT+02:00
在一个SQL数据库中保存和提取日期数据我们将要使用的下一个类是java.sql.Date,它是java.util.Date的子类但它使用了Java数据库连接(JDBC)方法
。让我们来看一个简单的只有一个表单--LAST_ACCESS的ORACLE数据库,它是用下面的SQL创建的:
create table LAST_ACCESS (
LAST_HIT date
);
这个表单只有一个记录,用下面的插入语句创建:
insert into LAST_ACCESS values (Sysdate);
表E演示了如何修改和提取LAST_HIT数据库域。
表 E
import java.sql.*;
import java.text.DateFormat;
import java.util.Date;
public class DateExample10 {
public static void main(String[] args) {
// Get a full date formatter.
DateFormat dateFormatter = DateFormat.getDateTimeInstance(
DateFormat.FULL,
DateFormat.FULL);
// Get the system date and time.
java.util.Date utilDate = new Date();
// Convert it to java.sql.Date
java.sql.Date date = new java.sql.Date(utilDate.getTime());
// Display the date before storing.
System.out.println(dateFormatter.format(date));
// Save the date to the database.
setLastHit(date);
// Get the date from the database.
Date dateFromDB = getLastHit();
// Display the date from the database.
System.out.println(dateFormatter.format(dateFromDB));
}
public static void setLastHit(java.sql.Date date) {
try {
// Load the class.
Class.forName("oracle.jdbc.driver.OracleDriver");
// Get a connection.
燙onnection connection = DriverManager.getConnection(
// Database URL
"jdbc:oracle:thin:@localhost:1521:buzz2",
"web_site", // Username
"web_site"); // Password
try {
/ Get a prepared statement fromthe connection
// specifying the update SQL.
PreparedStatement ps = connection.prepareStatement(
"update LAST_ACCESS set LAST_HIT=");
try {
/ set the date letting JDBC to the work of
// formatting the SQL appropriately.
ps.setDate(1, date);
// Execute the update statement.
int iRowsUpdated = ps.executeUpdate();
System.out.println("Rows updated: " + iRowsUpdated);
} finally {
ps.close();
}
} finally {
connection.close();
}
} catch (Exception ex) {
System.out.println("Error: " + ex.getMessage());
}
}
public static java.sql.Date getLastHit() {
java.sql.Date returnDate = null;
try {
// Load the driver class.
Class.forName("oracle.jdbc.driver.OracleDriver");
// Get the connection.
Connection connection = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:buzz2",
"web_site", "web_site");
try {
/ Get the prepared statement specifying the
// select SQL.
PreparedStatement ps = connection.prepareStatement(
"select LAST_HIT from LAST_ACCESS");
try {
// Execute the SQL and get the ResultSet object.
ResultSet rs = ps.executeQuery();
try {
// Retreive the record.
if (rs else {
燬ystem.out.println("Did not get last hit.");
}
}
finally {
rs.close();
}
} finally {
ps.close();
爙
} finally {
connection.close();
}
} catch (Exception ex) {
System.out.println("Error: " + ex.getMessage());
}
return returnDate;
}
}
这个例子的输出如下:
Friday, October 5, 2001 10:42:34 PM EDT
Rows updated: 1
Successfully retrieved last hit.
Friday, October 5, 2001 12:00:00 AM EDT
虽然这个例子没有为保存和提取日期数据提供性能上优良的方法,但它确实示范了如何为一条更新和删除语句将Java日期数据转换成SQL日期数据。从一个java.util.Date对象设置Oracle date数据域的过程是由以下的语句处理的:
ps.setDate(1, date);
它是我们预定义语句接口java.sql.PreparedStatement.setDate 的一个方法。
这行代码出现在我们的setLastHit方法里。它将Java以微秒为单位的长整型日期值转换成ORACLE的SQL日期格式。当我们能够在getLastHit方法里用java.sql.PreparedStatement.getDate从数据库取得日期数据的时候这种转换就能够完成。
你还应该注意到只有日期被设置了。小时,分钟,秒,和微秒都没有包括在从Java日期数据到SQL日期数据的转换过程中。
结论
一旦你掌握了这些概念,你就应该能够基于系统时间或者一个输入的时间创建日期对象了。另外,你还应该能够使用标准和定制的格式化过程格式化日期数据,将文本的日期数据解析成日期对象,并以多种语言和多种时区显示一个日期数据。最后,你将能够在一个SQL数据库里保存和提取日期值
全国省市的数据库脚本(postgres测试通过)
--**************************************************************
CREATE TABLE common_Area
(
Area_Id INT,
AreaName NVARCHAR(5'0'); NOTNULL,
RootID INT,
ChildAmount INT,
Depth INT,
Sort INT,
IsOpen BIT
); ;
--中国(2007年:24个省,5个自治区,4个直辖市,2个特别行政区);
INSERT INTO common_Area VALUES(1,'北京市',0,0,1,1,'1');
INSERT INTO common_Area VALUES(2,'天津市',0,0,1,2,'1');
INSERT INTO common_Area VALUES(3,'上海市',0,0,1,3,'1');
INSERT INTO common_Area VALUES(4,'重庆市',0,0,1,4,'1');
INSERT INTO common_Area VALUES(5,'河北省',0,0,1,5,'1');
INSERT INTO common_Area VALUES(6,'山西省',0,0,1,6,'1');
INSERT INTO common_Area VALUES(7,'台湾省',0,0,1,7,'1');
INSERT INTO common_Area VALUES(8,'辽宁省',0,0,1,8,'1');
INSERT INTO common_Area VALUES(9,'吉林省',0,0,1,9,'1');
INSERT INTO common_Area VALUES(10,'黑龙江省',0,0,1,10,'1');
INSERT INTO common_Area VALUES(11,'江苏省',0,0,1,11,'1');
INSERT INTO common_Area VALUES(12,'浙江省',0,0,1,12,'1');
INSERT INTO common_Area VALUES(13,'安徽省',0,0,1,13,'1');
INSERT INTO common_Area VALUES(14,'福建省',0,0,1,14,'1');
INSERT INTO common_Area VALUES(15,'江西省',0,0,1,15,'1');
INSERT INTO common_Area VALUES(16,'山东省',0,0,1,16,'1');
INSERT INTO common_Area VALUES(17,'河南省',0,0,1,17,'1');
INSERT INTO common_Area VALUES(18,'湖北省',0,0,1,18,'1');
INSERT INTO common_Area VALUES(19,'湖南省',0,0,1,19,'1');
INSERT INTO common_Area VALUES(20,'广东省',0,0,1,20,'1');
INSERT INTO common_Area VALUES(21,'甘肃省',0,0,1,21,'1');
INSERT INTO common_Area VALUES(22,'四川省',0,0,1,22,'1');
INSERT INTO common_Area VALUES(23,'贵州省',0,0,1,23,'1');
INSERT INTO common_Area VALUES(24,'海南省',0,0,1,24,'1');
INSERT INTO common_Area VALUES(25,'云南省',0,0,1,25,'1');
INSERT INTO common_Area VALUES(26,'青海省',0,0,1,26,'1');
INSERT INTO common_Area VALUES(27,'陕西省',0,0,1,27,'1');
INSERT INTO common_Area VALUES(28,'广西壮族自治区',0,0,1,28,'1');
INSERT INTO common_Area VALUES(29,'西藏自治区',0,0,1,29,'1');
INSERT INTO common_Area VALUES(30,'宁夏回族自治区',0,0,1,30,'1');
INSERT INTO common_Area VALUES(31,'新疆维吾尔自治区',0,0,1,31,'1');
INSERT INTO common_Area VALUES(32,'内蒙古自治区',0,0,1,32,'1');
INSERT INTO common_Area VALUES(33,'澳门特别行政区',0,0,1,33,'1');
INSERT INTO common_Area VALUES(34,'香港特别行政区',0,0,1,34,'1');
--1北京市
INSERT INTO common_Area VALUES(61,'东城区',1,0,2,1,'0');
INSERT INTO common_Area VALUES(62,'西城区',1,0,2,2,'0');
INSERT INTO common_Area VALUES(63,'崇文区',1,0,2,3,'0');
INSERT INTO common_Area VALUES(64,'宣武区',1,0,2,4,'0');
INSERT INTO common_Area VALUES(65,'朝阳区',1,0,2,5,'0');
INSERT INTO common_Area VALUES(66,'丰台区',1,0,2,6,'0');
INSERT INTO common_Area VALUES(67,'石景山区',1,0,2,7,'0');
INSERT INTO common_Area VALUES(68,'海淀区',1,0,2,8,'0');
INSERT INTO common_Area VALUES(69,'门头沟区',1,0,2,9,'0');
INSERT INTO common_Area VALUES(70,'房山区',1,0,2,10,'0');
INSERT INTO common_Area VALUES(71,'通州区',1,0,2,11,'0');
INSERT INTO common_Area VALUES(72,'顺义区',1,0,2,12,'0');
INSERT INTO common_Area VALUES(73,'昌平区',1,0,2,13,'0');
INSERT INTO common_Area VALUES(74,'大兴区',1,0,2,14,'0');
INSERT INTO common_Area VALUES(75,'怀柔区',1,0,2,15,'0');
INSERT INTO common_Area VALUES(76,'平谷区',1,0,2,16,'0');
INSERT INTO common_Area VALUES(77,'延庆县',1,0,2,17,'0');
INSERT INTO common_Area VALUES(78,'密云县',1,0,2,18,'0');
UPDATE common_Area SET ChildAmount = 18 WHERE Area_Id = 1 ;
--5河北省(2005年辖:11个地级市,36个市辖区、22个县级市、108个县、6个自治县,'1');
INSERT INTO common_Area VALUES(101,'石家庄市',5,0,2,1,'1');
INSERT INTO common_Area VALUES(102,'唐山市',5,0,2,2,'1');
INSERT INTO common_Area VALUES(103,'秦皇岛市',5,0,2,3,'1');
INSERT INTO common_Area VALUES(104,'邯郸市',5,0,2,4,'1');
INSERT INTO common_Area VALUES(105,'邢台市',5,0,2,5,'1');
INSERT INTO common_Area VALUES(106,'保定市',5,0,2,6,'1');
INSERT INTO common_Area VALUES(107,'张家口市',5,0,2,7,'1');
INSERT INTO common_Area VALUES(108,'承德市',5,0,2,8,'1');
INSERT INTO common_Area VALUES(109,'沧州市',5,0,2,9,'1');
INSERT INTO common_Area VALUES(110,'廊坊市',5,0,2,10,'1');
INSERT INTO common_Area VALUES(111,'衡水市',5,0,2,11,'1');
UPDATE common_Area SET ChildAmount = 11 WHERE Area_Id = 5 ;
--6山西省11个城市
INSERT INTO common_Area VALUES(121,'太原市',6,0,2,1,'1');
INSERT INTO common_Area VALUES(122,'大同市',6,0,2,2,'1');
INSERT INTO common_Area VALUES(123,'阳泉市',6,0,2,3,'1');
INSERT INTO common_Area VALUES(124,'长治市',6,0,2,4,'1');
INSERT INTO common_Area VALUES(125,'晋城市',6,0,2,5,'1');
INSERT INTO common_Area VALUES(126,'朔州市',6,0,2,6,'1');
INSERT INTO common_Area VALUES(127,'晋中市',6,0,2,7,'1');
INSERT INTO common_Area VALUES(128,'运城市',6,0,2,8,'1');
INSERT INTO common_Area VALUES(129,'忻州市',6,0,2,9,'1');
INSERT INTO common_Area VALUES(130,'临汾市',6,0,2,10,'1');
INSERT INTO common_Area VALUES(131,'吕梁市',6,0,2,11,'1');
UPDATE common_Area SET ChildAmount = 11 WHERE Area_Id = 6 ;
---7台湾省(台湾本岛和澎湖共设7市、16县,其中台北市和高雄市为“院辖市”,直属“行政院”,其余属台湾省;市下设区,县下设市(县辖市)、镇、乡,合称区市镇乡。,'1');
INSERT INTO common_Area VALUES(141,'台北市',7,0,2,1,'1');
INSERT INTO common_Area VALUES(142,'高雄市',7,0,2,2,'1');
INSERT INTO common_Area VALUES(143,'基隆市',7,0,2,3,'1');
INSERT INTO common_Area VALUES(144,'台中市',7,0,2,4,'1');
INSERT INTO common_Area VALUES(145,'台南市',7,0,2,5,'1');
INSERT INTO common_Area VALUES(146,'新竹市',7,0,2,6,'1');
INSERT INTO common_Area VALUES(147,'嘉义市',7,0,2,7,'1');
INSERT INTO common_Area VALUES(148,'台北县',7,0,2,8,'1');
INSERT INTO common_Area VALUES(149,'宜兰县',7,0,2,9,'1');
INSERT INTO common_Area VALUES(150,'桃园县',7,0,2,10,'1');
INSERT INTO common_Area VALUES(151,'新竹县',7,0,2,11,'1');
INSERT INTO common_Area VALUES(152,'苗栗县',7,0,2,12,'1');
INSERT INTO common_Area VALUES(153,'台中县',7,0,2,13,'1');
INSERT INTO common_Area VALUES(154,'彰化县',7,0,2,14,'1');
INSERT INTO common_Area VALUES(155,'南投县',7,0,2,15,'1');
INSERT INTO common_Area VALUES(156,'云林县',7,0,2,16,'1');
INSERT INTO common_Area VALUES(157,'嘉义县',7,0,2,17,'1');
INSERT INTO common_Area VALUES(158,'台南县',7,0,2,18,'1');
INSERT INTO common_Area VALUES(159,'高雄县',7,0,2,19,'1');
INSERT INTO common_Area VALUES(160,'屏东县',7,0,2,20,'1');
INSERT INTO common_Area VALUES(161,'澎湖县',7,0,2,21,'1');
INSERT INTO common_Area VALUES(162,'台东县',7,0,2,22,'1');
INSERT INTO common_Area VALUES(163,'花莲县',7,0,2,23,'1');
UPDATE common_Area SET ChildAmount = 23 WHERE Area_Id = 7 ;
--8辽宁省(2006年,辖:14个地级市;56个市辖区、17个县级市、19个县、8个自治县。,'1');
INSERT INTO common_Area VALUES(181,'沈阳市',8,0,2,1,'1');
INSERT INTO common_Area VALUES(182,'大连市',8,0,2,2,'1');
INSERT INTO common_Area VALUES(183,'鞍山市',8,0,2,3,'1');
INSERT INTO common_Area VALUES(184,'抚顺市',8,0,2,4,'1');
INSERT INTO common_Area VALUES(185,'本溪市',8,0,2,5,'1');
INSERT INTO common_Area VALUES(186,'丹东市',8,0,2,6,'1');
INSERT INTO common_Area VALUES(187,'锦州市',8,0,2,7,'1');
INSERT INTO common_Area VALUES(188,'营口市',8,0,2,8,'1');
INSERT INTO common_Area VALUES(189,'阜新市',8,0,2,9,'1');
INSERT INTO common_Area VALUES(190,'辽阳市',8,0,2,10,'1');
INSERT INTO common_Area VALUES(191,'盘锦市',8,0,2,11,'1');
INSERT INTO common_Area VALUES(192,'铁岭市',8,0,2,12,'1');
INSERT INTO common_Area VALUES(193,'朝阳市',8,0,2,13,'1');
INSERT INTO common_Area VALUES(194,'葫芦岛市',8,0,2,14,'1');
UPDATE common_Area SET ChildAmount = 14 WHERE Area_Id = 8 ;
--9吉林省(2006年,辖:8个地级市、1个自治州;20个市辖区、20个县级市、17个县、3个自治县。,'1');
INSERT INTO common_Area VALUES(201,'长春市',9,0,2,1,'1');
INSERT INTO common_Area VALUES(202,'吉林市',9,0,2,2,'1');
INSERT INTO common_Area VALUES(203,'四平市',9,0,2,3,'1');
INSERT INTO common_Area VALUES(204,'辽源市',9,0,2,4,'1');
INSERT INTO common_Area VALUES(205,'通化市',9,0,2,5,'1');
INSERT INTO common_Area VALUES(206,'白山市',9,0,2,6,'1');
INSERT INTO common_Area VALUES(207,'松原市',9,0,2,7,'1');
INSERT INTO common_Area VALUES(208,'白城市',9,0,2,8,'1');
INSERT INTO common_Area VALUES(209,'延边朝鲜族自治州',9,0,2,9,'1');
UPDATE common_Area SET ChildAmount = 9 WHERE Area_Id = 9 ;
--10黑龙江省(2006年,辖:12地级市、1地区;64市辖区、18县级市、45县、1自治县,'1');
INSERT INTO common_Area VALUES(221,'哈尔滨市',10,0,2,1,'1');
INSERT INTO common_Area VALUES(222,'齐齐哈尔市',10,0,2,2,'1');
INSERT INTO common_Area VALUES(223,'鹤 岗 市',10,0,2,3,'1');
INSERT INTO common_Area VALUES(224,'双鸭山市',10,0,2,4,'1');
INSERT INTO common_Area VALUES(225,'鸡 西 市',10,0,2,5,'1');
INSERT INTO common_Area VALUES(226,'大 庆 市',10,0,2,6,'1');
INSERT INTO common_Area VALUES(227,'伊 春 市',10,0,2,7,'1');
INSERT INTO common_Area VALUES(228,'牡丹江市',10,0,2,8,'1');
INSERT INTO common_Area VALUES(229,'佳木斯市',10,0,2,9,'1');
INSERT INTO common_Area VALUES(230,'七台河市',10,0,2,10,'1');
INSERT INTO common_Area VALUES(231,'黑 河 市',10,0,2,11,'1');
INSERT INTO common_Area VALUES(232,'绥 化 市',10,0,2,12,'1');
INSERT INTO common_Area VALUES(233,'大兴安岭地区',10,0,2,13,'1');
UPDATE common_Area SET ChildAmount = 13 WHERE Area_Id = 10 ;
--11江苏省(2005年辖:13个地级市;54个市辖区、27个县级市、25个县,'1');
INSERT INTO common_Area VALUES(241,'南京市',11,0,2,1,'1');
INSERT INTO common_Area VALUES(242,'无锡市',11,0,2,2,'1');
INSERT INTO common_Area VALUES(243,'徐州市',11,0,2,3,'1');
INSERT INTO common_Area VALUES(244,'常州市',11,0,2,4,'1');
INSERT INTO common_Area VALUES(245,'苏州市',11,0,2,5,'1');
INSERT INTO common_Area VALUES(246,'南通市',11,0,2,6,'1');
INSERT INTO common_Area VALUES(247,'连云港市',11,0,2,7,'1');
INSERT INTO common_Area VALUES(248,'淮安市',11,0,2,8,'1');
INSERT INTO common_Area VALUES(249,'盐城市',11,0,2,9,'1');
INSERT INTO common_Area VALUES(250,'扬州市',11,0,2,10,'1');
INSERT INTO common_Area VALUES(251,'镇江市',11,0,2,11,'1');
INSERT INTO common_Area VALUES(252,'泰州市',11,0,2,12,'1');
INSERT INTO common_Area VALUES(253,'宿迁市',11,0,2,13,'1');
UPDATE common_Area SET ChildAmount = 13 WHERE Area_Id = 11 ;
--12浙江省(2006年,辖:11个地级市;32个市辖区、22个县级市、35个县、1个自治县。,'1');
INSERT INTO common_Area VALUES(281,'杭州市',12,0,2,1,'1');
INSERT INTO common_Area VALUES(282,'宁波市',12,0,2,2,'1');
INSERT INTO common_Area VALUES(283,'温州市',12,0,2,3,'1');
INSERT INTO common_Area VALUES(284,'嘉兴市',12,0,2,4,'1');
INSERT INTO common_Area VALUES(285,'湖州市',12,0,2,5,'1');
INSERT INTO common_Area VALUES(286,'绍兴市',12,0,2,6,'1');
INSERT INTO common_Area VALUES(287,'金华市',12,0,2,7,'1');
INSERT INTO common_Area VALUES(288,'衢州市',12,0,2,8,'1');
INSERT INTO common_Area VALUES(289,'舟山市',12,0,2,9,'1');
INSERT INTO common_Area VALUES(290,'台州市',12,0,2,10,'1');
INSERT INTO common_Area VALUES(291,'丽水市',12,0,2,11,'1');
UPDATE common_Area SET ChildAmount = 11 WHERE Area_Id = 12 ;
--13安徽省(2005年辖:17个地级市;44个市辖区、5县个级市、56个县。,'1');
INSERT INTO common_Area VALUES(301,'合肥市',13,0,2,1,'1');
INSERT INTO common_Area VALUES(302,'芜湖市',13,0,2,2,'1');
INSERT INTO common_Area VALUES(303,'蚌埠市',13,0,2,3,'1');
INSERT INTO common_Area VALUES(304,'淮南市',13,0,2,4,'1');
INSERT INTO common_Area VALUES(305,'马鞍山市',13,0,2,5,'1');
INSERT INTO common_Area VALUES(306,'淮北市',13,0,2,6,'1');
INSERT INTO common_Area VALUES(307,'铜陵市',13,0,2,7,'1');
INSERT INTO common_Area VALUES(308,'安庆市',13,0,2,8,'1');
INSERT INTO common_Area VALUES(309,'黄山市',13,0,2,9,'1');
INSERT INTO common_Area VALUES(310,'滁州市',13,0,2,10,'1');
INSERT INTO common_Area VALUES(311,'阜阳市',13,0,2,11,'1');
INSERT INTO common_Area VALUES(312,'宿州市',13,0,2,12,'1');
INSERT INTO common_Area VALUES(313,'巢湖市',13,0,2,13,'1');
INSERT INTO common_Area VALUES(314,'六安市',13,0,2,14,'1');
INSERT INTO common_Area VALUES(315,'亳州市',13,0,2,15,'1');
INSERT INTO common_Area VALUES(316,'池州市',13,0,2,16,'1');
INSERT INTO common_Area VALUES(317,'宣城市',13,0,2,17,'1');
UPDATE common_Area SET ChildAmount = 17 WHERE Area_Id = 13 ;
--14福建省(2006年辖:9个地级市;26个市辖区、14个县级市、45个县。,'1');
INSERT INTO common_Area VALUES(321,'福州市',14,0,2,1,'1');
INSERT INTO common_Area VALUES(322,'厦门市',14,0,2,2,'1');
INSERT INTO common_Area VALUES(323,'莆田市',14,0,2,3,'1');
INSERT INTO common_Area VALUES(324,'三明市',14,0,2,4,'1');
INSERT INTO common_Area VALUES(325,'泉州市',14,0,2,5,'1');
INSERT INTO common_Area VALUES(326,'漳州市',14,0,2,6,'1');
INSERT INTO common_Area VALUES(327,'南平市',14,0,2,7,'1');
INSERT INTO common_Area VALUES(328,'龙岩市',14,0,2,8,'1');
INSERT INTO common_Area VALUES(329,'宁德市',14,0,2,9,'1');
UPDATE common_Area SET ChildAmount = 9 WHERE Area_Id = 14 ;
--15江西省(2006年全省辖:11个地级市;19个市辖区、10个县级市、70个县。,'1');
INSERT INTO common_Area VALUES(341,'南昌市',15,0,2,1,'1');
INSERT INTO common_Area VALUES(342,'景德镇市',15,0,2,2,'1');
INSERT INTO common_Area VALUES(343,'萍乡市',15,0,2,3,'1');
INSERT INTO common_Area VALUES(344,'九江市',15,0,2,4,'1');
INSERT INTO common_Area VALUES(345,'新余市',15,0,2,5,'1');
INSERT INTO common_Area VALUES(346,'鹰潭市',15,0,2,6,'1');
INSERT INTO common_Area VALUES(347,'赣州市',15,0,2,7,'1');
INSERT INTO common_Area VALUES(348,'吉安市',15,0,2,8,'1');
INSERT INTO common_Area VALUES(349,'宜春市',15,0,2,9,'1');
INSERT INTO common_Area VALUES(350,'抚州市',15,0,2,10,'1');
INSERT INTO common_Area VALUES(351,'上饶市',15,0,2,11,'1');
UPDATE common_Area SET ChildAmount = 11 WHERE Area_Id = 15 ;
--16山东省(2005年,辖:17个地级市;49个市辖区、31个县级市、60个县。,'1');
INSERT INTO common_Area VALUES(361,'济南市',16,0,2,1,'1');
INSERT INTO common_Area VALUES(362,'青岛市',16,0,2,2,'1');
INSERT INTO common_Area VALUES(363,'淄博市',16,0,2,3,'1');
INSERT INTO common_Area VALUES(364,'枣庄市',16,0,2,4,'1');
INSERT INTO common_Area VALUES(365,'东营市',16,0,2,5,'1');
INSERT INTO common_Area VALUES(366,'烟台市',16,0,2,6,'1');
INSERT INTO common_Area VALUES(367,'潍坊市',16,0,2,7,'1');
INSERT INTO common_Area VALUES(368,'济宁市',16,0,2,8,'1');
INSERT INTO common_Area VALUES(369,'泰安市',16,0,2,9,'1');
INSERT INTO common_Area VALUES(370,'威海市',16,0,2,10,'1');
INSERT INTO common_Area VALUES(371,'日照市',16,0,2,11,'1');
INSERT INTO common_Area VALUES(372,'莱芜市',16,0,2,12,'1');
INSERT INTO common_Area VALUES(373,'临沂市',16,0,2,13,'1');
INSERT INTO common_Area VALUES(374,'德州市',16,0,2,14,'1');
INSERT INTO common_Area VALUES(375,'聊城市',16,0,2,15,'1');
INSERT INTO common_Area VALUES(376,'滨州市',16,0,2,16,'1');
INSERT INTO common_Area VALUES(377,'菏泽市',16,0,2,17,'1');
UPDATE common_Area SET ChildAmount = 17 WHERE Area_Id = 16 ;
--17河南省(2005年辖:17个地级市;50个市辖区、21个县级市、88个县。)
INSERT INTO common_Area VALUES(401,'郑州市',17,0,2,1,'1');
INSERT INTO common_Area VALUES(402,'开封市',17,0,2,2,'1');
INSERT INTO common_Area VALUES(403,'洛阳市',17,0,2,3,'1');
INSERT INTO common_Area VALUES(404,'平顶山市',17,0,2,4,'1');
INSERT INTO common_Area VALUES(405,'安阳市',17,0,2,5,'1');
INSERT INTO common_Area VALUES(406,'鹤壁市',17,0,2,6,'1');
INSERT INTO common_Area VALUES(407,'新乡市',17,0,2,7,'1');
INSERT INTO common_Area VALUES(408,'焦作市',17,0,2,8,'1');
INSERT INTO common_Area VALUES(409,'濮阳市',17,0,2,9,'1');
INSERT INTO common_Area VALUES(410,'许昌市',17,0,2,10,'1');
INSERT INTO common_Area VALUES(411,'漯河市',17,0,2,11,'1');
INSERT INTO common_Area VALUES(412,'三门峡市',17,0,2,12,'1');
INSERT INTO common_Area VALUES(413,'南阳市',17,0,2,13,'1');
INSERT INTO common_Area VALUES(414,'商丘市',17,0,2,14,'1');
INSERT INTO common_Area VALUES(415,'信阳市',17,0,2,15,'1');
INSERT INTO common_Area VALUES(416,'周口市',17,0,2,16,'1');
INSERT INTO common_Area VALUES(417,'驻马店市',17,0,2,17,'1');
INSERT INTO common_Area VALUES(418,'济源市',17,0,2,18,'1');
UPDATE common_Area SET ChildAmount = 18 WHERE Area_Id = 17 ;
--18湖北省(截至2005年12月31日,全省辖13个地级单位(12个地级市、1个自治州);102县级单位(38个市辖区、24个县级市、37个县、2个自治县、1个林区),共有1220个乡级单位(277个街道、733个镇、210个乡)。)
INSERT INTO common_Area VALUES(421,'武汉市',18,0,2,1,'1');
INSERT INTO common_Area VALUES(422,'黄石市',18,0,2,2,'1');
INSERT INTO common_Area VALUES(423,'十堰市',18,0,2,3,'1');
INSERT INTO common_Area VALUES(424,'荆州市',18,0,2,4,'1');
INSERT INTO common_Area VALUES(425,'宜昌市',18,0,2,5,'1');
INSERT INTO common_Area VALUES(426,'襄樊市',18,0,2,6,'1');
INSERT INTO common_Area VALUES(427,'鄂州市',18,0,2,7,'1');
INSERT INTO common_Area VALUES(428,'荆门市',18,0,2,8,'1');
INSERT INTO common_Area VALUES(429,'孝感市',18,0,2,9,'1');
INSERT INTO common_Area VALUES(430,'黄冈市',18,0,2,10,'1');
INSERT INTO common_Area VALUES(431,'咸宁市',18,0,2,11,'1');
INSERT INTO common_Area VALUES(432,'随州市',18,0,2,12,'1');
INSERT INTO common_Area VALUES(433,'仙桃市',18,0,2,13,'1');
INSERT INTO common_Area VALUES(434,'天门市',18,0,2,14,'1');
INSERT INTO common_Area VALUES(435,'潜江市',18,0,2,15,'1');
INSERT INTO common_Area VALUES(436,'神农架林区',18,0,2,16,'1');
INSERT INTO common_Area VALUES(437,'恩施土家族苗族自治州',18,0,2,17,'1');
UPDATE common_Area SET ChildAmount = 17 WHERE Area_Id = 18 ;
--19湖南省(2005年辖:13个地级市、1个自治州;34个市辖区、16个县级市、65个县、7个自治县。)
INSERT INTO common_Area VALUES(441,'长沙市',19,0,2,1,'1');
INSERT INTO common_Area VALUES(442,'株洲市',19,0,2,2,'1');
INSERT INTO common_Area VALUES(443,'湘潭市',19,0,2,3,'1');
INSERT INTO common_Area VALUES(444,'衡阳市',19,0,2,4,'1');
INSERT INTO common_Area VALUES(445,'邵阳市',19,0,2,5,'1');
INSERT INTO common_Area VALUES(446,'岳阳市',19,0,2,6,'1');
INSERT INTO common_Area VALUES(447,'常德市',19,0,2,7,'1');
INSERT INTO common_Area VALUES(448,'张家界市',19,0,2,8,'1');
INSERT INTO common_Area VALUES(449,'益阳市',19,0,2,9,'1');
INSERT INTO common_Area VALUES(450,'郴州市',19,0,2,10,'1');
INSERT INTO common_Area VALUES(451,'永州市',19,0,2,11,'1');
INSERT INTO common_Area VALUES(452,'怀化市',19,0,2,12,'1');
INSERT INTO common_Area VALUES(453,'娄底市',19,0,2,13,'1');
INSERT INTO common_Area VALUES(454,'湘西土家族苗族自治州',19,0,2,14,'1');
UPDATE common_Area SET ChildAmount = 14 WHERE Area_Id = 19 ;
--20广东省(截至2005年12月31日,广东省辖:21个地级市,54个市辖区、23个县级市、41个县、3个自治县,429个街道办事处、1145个镇、4个乡、7个民族乡。)
INSERT INTO common_Area VALUES(455,'广州市',20,0,2,1,'1');
INSERT INTO common_Area VALUES(456,'深圳市',20,0,2,2,'1');
INSERT INTO common_Area VALUES(457,'珠海市',20,0,2,3,'1');
INSERT INTO common_Area VALUES(458,'汕头市',20,0,2,4,'1');
INSERT INTO common_Area VALUES(459,'韶关市',20,0,2,5,'1');
INSERT INTO common_Area VALUES(460,'佛山市',20,0,2,6,'1');
INSERT INTO common_Area VALUES(461,'江门市',20,0,2,7,'1');
INSERT INTO common_Area VALUES(462,'湛江市',20,0,2,8,'1');
INSERT INTO common_Area VALUES(463,'茂名市',20,0,2,9,'1');
INSERT INTO common_Area VALUES(464,'肇庆市',20,0,2,10,'1');
INSERT INTO common_Area VALUES(465,'惠州市',20,0,2,11,'1');
INSERT INTO common_Area VALUES(466,'梅州市',20,0,2,12,'1');
INSERT INTO common_Area VALUES(467,'汕尾市',20,0,2,13,'1');
INSERT INTO common_Area VALUES(468,'河源市',20,0,2,14,'1');
INSERT INTO common_Area VALUES(469,'阳江市',20,0,2,15,'1');
INSERT INTO common_Area VALUES(470,'清远市',20,0,2,16,'1');
INSERT INTO common_Area VALUES(485,'东莞市',20,0,2,17,'1');
INSERT INTO common_Area VALUES(486,'中山市',20,0,2,18,'1');
INSERT INTO common_Area VALUES(487,'潮州市',20,0,2,19,'1');
INSERT INTO common_Area VALUES(488,'揭阳市',20,0,2,20,'1');
INSERT INTO common_Area VALUES(489,'云浮市',20,0,2,21,'1');
UPDATE common_Area SET ChildAmount = 21 WHERE Area_Id = 20 ;
--21甘肃省(2006年辖:12个地级市、2个自治州;17个市辖区、4个县级市、58个县、7个自治县。)
INSERT INTO common_Area VALUES(471,'兰州市',21,0,2,1,'1');
INSERT INTO common_Area VALUES(472,'金昌市',21,0,2,2,'1');
INSERT INTO common_Area VALUES(473,'白银市',21,0,2,3,'1');
INSERT INTO common_Area VALUES(474,'天水市',21,0,2,4,'1');
INSERT INTO common_Area VALUES(475,'嘉峪关市',21,0,2,5,'1');
INSERT INTO common_Area VALUES(476,'武威市',21,0,2,6,'1');
INSERT INTO common_Area VALUES(477,'张掖市',21,0,2,7,'1');
INSERT INTO common_Area VALUES(478,'平凉市',21,0,2,8,'1');
INSERT INTO common_Area VALUES(479,'酒泉市',21,0,2,9,'1');
INSERT INTO common_Area VALUES(480,'庆阳市',21,0,2,10,'1');
INSERT INTO common_Area VALUES(481,'定西市',21,0,2,11,'1');
INSERT INTO common_Area VALUES(482,'陇南市',21,0,2,12,'1');
INSERT INTO common_Area VALUES(483,'临夏回族自治州',21,0,2,13,'1');
INSERT INTO common_Area VALUES(484,'甘南藏族自治州',21,0,2,14,'1');
UPDATE common_Area SET ChildAmount = 14 WHERE Area_Id = 21 ;
--22四川省(2006年辖:18个地级市、3个自治州;43个市辖区、14个县级市、120个县、4个自治县。)
INSERT INTO common_Area VALUES(491,'成都市',22,0,2,1,'1');
INSERT INTO common_Area VALUES(492,'自贡市',22,0,2,2,'1');
INSERT INTO common_Area VALUES(493,'攀枝花市',22,0,2,3,'1');
INSERT INTO common_Area VALUES(494,'泸州市',22,0,2,4,'1');
INSERT INTO common_Area VALUES(495,'德阳市',22,0,2,5,'1');
INSERT INTO common_Area VALUES(496,'绵阳市',22,0,2,6,'1');
INSERT INTO common_Area VALUES(497,'广元市',22,0,2,7,'1');
INSERT INTO common_Area VALUES(498,'遂宁市',22,0,2,8,'1');
INSERT INTO common_Area VALUES(499,'内江市',22,0,2,9,'1');
INSERT INTO common_Area VALUES(500,'乐山市',22,0,2,10,'1');
INSERT INTO common_Area VALUES(501,'南充市',22,0,2,11,'1');
INSERT INTO common_Area VALUES(502,'眉山市',22,0,2,12,'1');
INSERT INTO common_Area VALUES(503,'宜宾市',22,0,2,13,'1');
INSERT INTO common_Area VALUES(504,'广安市',22,0,2,14,'1');
INSERT INTO common_Area VALUES(505,'达州市',22,0,2,15,'1');
INSERT INTO common_Area VALUES(506,'雅安市',22,0,2,16,'1');
INSERT INTO common_Area VALUES(507,'巴中市',22,0,2,17,'1');
INSERT INTO common_Area VALUES(508,'资阳市',22,0,2,18,'1');
INSERT INTO common_Area VALUES(509,'阿坝藏族羌族自治州',22,0,2,19,'1');
INSERT INTO common_Area VALUES(510,'甘孜藏族自治州',22,0,2,20,'1');
INSERT INTO common_Area VALUES(511,'凉山彝族自治州',22,0,2,21,'1');
UPDATE common_Area SET ChildAmount = 21 WHERE Area_Id = 22 ;
--23贵州省(2006年辖:4个地级市、2个地区、3个自治州;10个市辖区、9个县级市、56个县、11个自治县、2个特区。,'1');
INSERT INTO common_Area VALUES(521,'贵阳市',23,0,2,1,'1');
INSERT INTO common_Area VALUES(522,'六盘水市',23,0,2,2,'1');
INSERT INTO common_Area VALUES(523,'遵义市',23,0,2,3,'1');
INSERT INTO common_Area VALUES(524,'安顺市',23,0,2,4,'1');
INSERT INTO common_Area VALUES(525,'铜仁地区',23,0,2,5,'1');
INSERT INTO common_Area VALUES(526,'毕节地区',23,0,2,6,'1');
INSERT INTO common_Area VALUES(527,'黔西南布依族苗族自治州',23,0,2,7,'1');
INSERT INTO common_Area VALUES(528,'黔东南苗族侗族自治州',23,0,2,8,'1');
INSERT INTO common_Area VALUES(529,'黔南布依族苗族自治州',23,0,2,9,'1');
UPDATE common_Area SET ChildAmount = 9 WHERE Area_Id = 23 ;
--24海南省(2003-2005年 全省有2个地级市,6个县级市,4个县,6个民族自治县,4个市辖区,1个办事处(西南中沙群岛办事处,县级)。,'1');
INSERT INTO common_Area VALUES(541,'海口市',24,0,2,1,'1');
INSERT INTO common_Area VALUES(542,'三亚市',24,0,2,2,'1');
INSERT INTO common_Area VALUES(543,'五指山市',24,0,2,3,'1');
INSERT INTO common_Area VALUES(544,'琼海市',24,0,2,4,'1');
INSERT INTO common_Area VALUES(545,'儋州市',24,0,2,5,'1');
INSERT INTO common_Area VALUES(546,'文昌市',24,0,2,6,'1');
INSERT INTO common_Area VALUES(547,'万宁市',24,0,2,7,'1');
INSERT INTO common_Area VALUES(548,'东方市',24,0,2,8,'1');
INSERT INTO common_Area VALUES(549,'澄迈县',24,0,2,9,'1');
INSERT INTO common_Area VALUES(550,'定安县',24,0,2,10,'1');
INSERT INTO common_Area VALUES(551,'屯昌县',24,0,2,11,'1');
INSERT INTO common_Area VALUES(552,'临高县',24,0,2,12,'1');
INSERT INTO common_Area VALUES(553,'白沙黎族自治县',24,0,2,13,'1');
INSERT INTO common_Area VALUES(554,'昌江黎族自治县',24,0,2,14,'1');
INSERT INTO common_Area VALUES(555,'乐东黎族自治县',24,0,2,15,'1');
INSERT INTO common_Area VALUES(556,'陵水黎族自治县',24,0,2,16,'1');
INSERT INTO common_Area VALUES(557,'保亭黎族苗族自治县',24,0,2,17,'1');
INSERT INTO common_Area VALUES(558,'琼中黎族苗族自治县',24,0,2,18,'1');
UPDATE common_Area SET ChildAmount = 18 WHERE Area_Id = 24 ;
--25云南省(2006年辖:8个地级市、8个自治州;12个市辖区、9个县级市、79个县、29个自治县。,'1');
INSERT INTO common_Area VALUES(571,'昆明市',25,0,2,1,'1');
INSERT INTO common_Area VALUES(572,'曲靖市',25,0,2,2,'1');
INSERT INTO common_Area VALUES(573,'玉溪市',25,0,2,3,'1');
INSERT INTO common_Area VALUES(574,'保山市',25,0,2,4,'1');
INSERT INTO common_Area VALUES(575,'昭通市',25,0,2,5,'1');
INSERT INTO common_Area VALUES(576,'丽江市',25,0,2,6,'1');
INSERT INTO common_Area VALUES(577,'思茅市',25,0,2,7,'1');
INSERT INTO common_Area VALUES(578,'临沧市',25,0,2,8,'1');
INSERT INTO common_Area VALUES(579,'文山壮族苗族自治州',25,0,2,9,'1');
INSERT INTO common_Area VALUES(580,'红河哈尼族彝族自治州',25,0,2,10,'1');
INSERT INTO common_Area VALUES(581,'西双版纳傣族自治州',25,0,2,11,'1');
INSERT INTO common_Area VALUES(582,'楚雄彝族自治州',25,0,2,12,'1');
INSERT INTO common_Area VALUES(583,'大理白族自治州',25,0,2,13,'1');
INSERT INTO common_Area VALUES(584,'德宏傣族景颇族自治州',25,0,2,14,'1');
INSERT INTO common_Area VALUES(585,'怒江傈傈族自治州',25,0,2,15,'1');
INSERT INTO common_Area VALUES(586,'迪庆藏族自治州',25,0,2,16,'1');
UPDATE common_Area SET ChildAmount = 16 WHERE Area_Id = 25 ;
--26青海省(2006年辖:1个地级市、1个地区、6个自治州;4个市辖区、2个县级市、30个县、7个自治县。,'1');
INSERT INTO common_Area VALUES(601,'西宁市',26,0,2,1,'1');
INSERT INTO common_Area VALUES(602,'海东地区',26,0,2,2,'1');
INSERT INTO common_Area VALUES(603,'海北藏族自治州',26,0,2,3,'1');
INSERT INTO common_Area VALUES(604,'黄南藏族自治州',26,0,2,4,'1');
INSERT INTO common_Area VALUES(605,'海南藏族自治州',26,0,2,5,'1');
INSERT INTO common_Area VALUES(606,'果洛藏族自治州',26,0,2,6,'1');
INSERT INTO common_Area VALUES(607,'玉树藏族自治州',26,0,2,7,'1');
INSERT INTO common_Area VALUES(608,'海西蒙古族藏族自治州',26,0,2,8,'1');
UPDATE common_Area SET ChildAmount = 8 WHERE Area_Id = 26 ;
--27陕西省(2006年辖:10个地级市;24个市辖区、3个县级市、80个县。,'1');
INSERT INTO common_Area VALUES(621,'西安市',27,0,2,1,'1');
INSERT INTO common_Area VALUES(622,'铜川市',27,0,2,2,'1');
INSERT INTO common_Area VALUES(623,'宝鸡市',27,0,2,3,'1');
INSERT INTO common_Area VALUES(624,'咸阳市',27,0,2,4,'1');
INSERT INTO common_Area VALUES(625,'渭南市',27,0,2,5,'1');
INSERT INTO common_Area VALUES(626,'延安市',27,0,2,6,'1');
INSERT INTO common_Area VALUES(627,'汉中市',27,0,2,7,'1');
INSERT INTO common_Area VALUES(628,'榆林市',27,0,2,8,'1');
INSERT INTO common_Area VALUES(629,'安康市',27,0,2,9,'1');
INSERT INTO common_Area VALUES(630,'商洛市',27,0,2,10,'1');
UPDATE common_Area SET ChildAmount = 10 WHERE Area_Id = 27 ;
--28广西壮族自治区(2005年辖:14个地级市;34个市辖区、7个县级市、56个县、12个自治县。,'1');
INSERT INTO common_Area VALUES(641,'南宁市',28,0,2,1,'1');
INSERT INTO common_Area VALUES(642,'柳州市',28,0,2,2,'1');
INSERT INTO common_Area VALUES(643,'桂林市',28,0,2,3,'1');
INSERT INTO common_Area VALUES(644,'梧州市',28,0,2,4,'1');
INSERT INTO common_Area VALUES(645,'北海市',28,0,2,5,'1');
INSERT INTO common_Area VALUES(646,'防城港市',28,0,2,6,'1');
INSERT INTO common_Area VALUES(647,'钦州市',28,0,2,7,'1');
INSERT INTO common_Area VALUES(648,'贵港市',28,0,2,8,'1');
INSERT INTO common_Area VALUES(649,'玉林市',28,0,2,9,'1');
INSERT INTO common_Area VALUES(650,'百色市',28,0,2,10,'1');
INSERT INTO common_Area VALUES(651,'贺州市',28,0,2,11,'1');
INSERT INTO common_Area VALUES(652,'河池市',28,0,2,12,'1');
INSERT INTO common_Area VALUES(653,'来宾市',28,0,2,13,'1');
INSERT INTO common_Area VALUES(654,'崇左市',28,0,2,14,'1');
UPDATE common_Area SET ChildAmount = 14 WHERE Area_Id = 28 ;
--29西藏自治区(2005年辖:1个地级市、6个地区;1个市辖区、1个县级市、71个县。,'1');
INSERT INTO common_Area VALUES(671,'拉萨市',29,0,2,1,'1');
INSERT INTO common_Area VALUES(672,'那曲地区',29,0,2,2,'1');
INSERT INTO common_Area VALUES(673,'昌都地区',29,0,2,3,'1');
INSERT INTO common_Area VALUES(674,'山南地区',29,0,2,4,'1');
INSERT INTO common_Area VALUES(675,'日喀则地区',29,0,2,5,'1');
INSERT INTO common_Area VALUES(676,'阿里地区',29,0,2,6,'1');
INSERT INTO common_Area VALUES(677,'林芝地区',29,0,2,7,'1');
UPDATE common_Area SET ChildAmount = 7 WHERE Area_Id = 29 ;
--30宁夏回族自治区
INSERT INTO common_Area VALUES(681,'银川市',30,0,2,1,'1');
INSERT INTO common_Area VALUES(682,'石嘴山市',30,0,2,2,'1');
INSERT INTO common_Area VALUES(683,'吴忠市',30,0,2,3,'1');
INSERT INTO common_Area VALUES(684,'固原市',30,0,2,4,'1');
INSERT INTO common_Area VALUES(685,'中卫市',30,0,2,5,'1');
UPDATE common_Area SET ChildAmount = 5 WHERE Area_Id = 30 ;
--31新疆维吾尔自治区(2005年辖:2个地级市、7个地区、5个自治州;11个市辖区、20个县级市、62个县、6个自治县,'1');
INSERT INTO common_Area VALUES(691,'乌鲁木齐市',31,0,2,1,'1');
INSERT INTO common_Area VALUES(692,'克拉玛依市',31,0,2,2,'1');
INSERT INTO common_Area VALUES(693,'石河子市 ',31,0,2,3,'1');
INSERT INTO common_Area VALUES(694,'阿拉尔市',31,0,2,4,'1');
INSERT INTO common_Area VALUES(695,'图木舒克市',31,0,2,5,'1');
INSERT INTO common_Area VALUES(696,'五家渠市',31,0,2,6,'1');
INSERT INTO common_Area VALUES(697,'吐鲁番市',31,0,2,7,'1');
INSERT INTO common_Area VALUES(698,'阿克苏市',31,0,2,8,'1');
INSERT INTO common_Area VALUES(699,'喀什市',31,0,2,9,'1');
INSERT INTO common_Area VALUES(700,'哈密市',31,0,2,10,'1');
INSERT INTO common_Area VALUES(701,'和田市',31,0,2,11,'1');
INSERT INTO common_Area VALUES(702,'阿图什市',31,0,2,12,'1');
INSERT INTO common_Area VALUES(703,'库尔勒市',31,0,2,13,'1');
INSERT INTO common_Area VALUES(704,'昌吉市 ',31,0,2,14,'1');
INSERT INTO common_Area VALUES(705,'阜康市',31,0,2,15,'1');
INSERT INTO common_Area VALUES(706,'米泉市',31,0,2,16,'1');
INSERT INTO common_Area VALUES(707,'博乐市',31,0,2,17,'1');
INSERT INTO common_Area VALUES(708,'伊宁市',31,0,2,18,'1');
INSERT INTO common_Area VALUES(709,'奎屯市',31,0,2,19,'1');
INSERT INTO common_Area VALUES(710,'塔城市',31,0,2,20,'1');
INSERT INTO common_Area VALUES(711,'乌苏市',31,0,2,21,'1');
INSERT INTO common_Area VALUES(712,'阿勒泰市',31,0,2,22,'1');
UPDATE common_Area SET ChildAmount = 22 WHERE Area_Id = 31 ;
--33内蒙古自治区(2006年,辖:9个地级市、3个盟;21个市辖区、11个县级市、17个县、49个旗、3个自治旗。,'1');
INSERT INTO common_Area VALUES(721,'呼和浩特市',32,0,2,1,'1');
INSERT INTO common_Area VALUES(722,'包头市',32,0,2,2,'1');
INSERT INTO common_Area VALUES(723,'乌海市',32,0,2,3,'1');
INSERT INTO common_Area VALUES(724,'赤峰市',32,0,2,4,'1');
INSERT INTO common_Area VALUES(725,'通辽市',32,0,2,5,'1');
INSERT INTO common_Area VALUES(726,'鄂尔多斯市',32,0,2,6,'1');
INSERT INTO common_Area VALUES(727,'呼伦贝尔市',32,0,2,7,'1');
INSERT INTO common_Area VALUES(728,'巴彦淖尔市',32,0,2,8,'1');
INSERT INTO common_Area VALUES(729,'乌兰察布市',32,0,2,9,'1');
INSERT INTO common_Area VALUES(730,'锡林郭勒盟',32,0,2,10,'1');
INSERT INTO common_Area VALUES(731,'兴安盟',32,0,2,11,'1');
INSERT INTO common_Area VALUES(732,'阿拉善盟',32,0,2,12,'1');
UPDATE common_Area SET ChildAmount = 12 WHERE Area_Id = 32 ;
星期一, 九月 17, 2007
星期日, 九月 16, 2007
Flash精彩站点
--转贴---
01闲人之墓(★★★☆)--构思、效果不错,但内容太单一。
http://www.suihong.com/v3/
02、NEOSTREAM(★★★★★)-动态效果真是无话可说
http://www.neostream.com
03、xiiin(★★★★★)-韩国超眩三维效果,强烈推荐。
http://www.xiiin.com
04、purepulse(★★★★)效果真不错,画面很精美
http://www.purepulse.co.kr
05、bimbo(★★★★)卡通效果不错,设计得很可爱
http://bimbo.grupow.com/flash.htm
06、thepharmacy-media(★★★★)(表现方式比较新颖)
http://www.thepharmacy-media.com/lab900.html
07、green buildsystem(★ ★☆☆)(页面比较整洁,有欧洲网站风格)
http://www.chnfc.com/eng
08、sukiland(★★★★)-很有意思的网站,娱乐性很强
http://www.sukiland.com/
09、pacific(★★★★☆)很强的空间感,每一个角度都是经过严格设计的
http://www.pacificinteriors.co.uk/flash/site.html
10、Frontend(★★★☆)-菜单比较有创意,内容不怎么的
http://www.frontend-multimedia.com/
11、ni9e(★★★★)-还是国外的创意好
http://www.ni9e.com/
12、NIKE GOLF(★★★★)有特色的创意,对得起这个牌子
http://www.nike.com/nikegolf/slingshot/
13、先锋汽车音乐网站(★★★★☆)-三个字“有创意”
http://www.pioneercar.com/
14、atmosphere-cph(★★★☆)-明信片和邮票的创意
http://www.atmosphere-cph.com/
15、costencatbalue(★★★★)-感觉不错
http://www.costencatbalue.com/
16、diesel(★★★★)-设计很特别,花了不少心思
http://www.diesel.com
17、frosch(★★★★★)你看了再说!
http://www.frosch-studio.com/
18、fishouse(★★★★)-就是网速不是很快:)
http://www.fishouse.net/
19、Levelvodka(★★★★★)-很不错的设计
http://www.levelvodka.com/
20、rokey(★★★★)不错的LOGO、ICON、UI、WEB设计网站
http://www.rokey.net/
21、ICONSOUND(★★★★)-图标及音效设计网站
http://www.iconsound.com/
22、pointersoft(★★★★)-感觉不错
http://www.pointersoft.it/
23、thisismysecretlab(★★★★)-像素网站
http://thisismysecretlab.free.fr/
24、ninjai(★★★★☆)-不知道大家看过动画没有,精彩无比
http://www.ninjai.com
25、sofake(★★★★)-新颖的场景设计
http://www.sofake.com/
26、walkingincircles(★★★★)这个也不错
http://www.walkingincircles.com/
27、barou(★★★★)不错,大家看看先
http://www.barou.net/
28、gavello(★★★★☆)-很有创意的珠宝展示网站
http://www.gavello.net/
29、m2photo(★★★★)一个摄影网站
http://www.m2photo.ca/
30、layerbit(★★★★☆)一个烟草网站
http://www.layerbit.com
31、saltedherring(★★★★)创意不错
http://www.saltedherring.com/
32、michaelelliott(★★★★☆)好
http://www.michaelelliott.co.uk/me/large.html
33、HOTEL(★★★★★)五星不为过
http://www.hoogerbrugge.com/
34、21kcoahuila(★★★★☆)做网站的朋友好好借鉴一下
http://www.21kcoahuila.org.mx/inicio.htm
35、洗涤用品网站(★★★★★)果真是创意无限
http://www.rough54.com/wet54.html
36、trevorvanmeter(★★★★)挺好玩的!
http://www.trevorvanmeter.com/flyguy/
37、motiontheory(★★★★)有点另类的网站
http://www.motiontheory.com/index.html
38、ourmachine(★★★★)单从这个拉链的设计就非常有意思
http://www.ourmachine.com/
39、何园(★★★★☆)晚清第一名园,浓郁的中国味
http://www.he-garden.net/
40、braunston(★★★★)韩国人的时尚网站
http://www.braunston.co.kr/base.html
42、purepulse(★★★★☆)比较早以前的作品,但设计真的很细腻
http://purepulse.co.kr/
43、chipotle(★★★☆)大家看看也就可以了!
http://www.chipotle.com/
44、kigot(★★★★)动感很强的界面设计
http://www.kigot.com
45、halo(★★★★)看到按钮的效果了没有
http://www.halolounge.com/
46、sixstation(★★★★)香港的一个网站-揉合音声
http://www.sixstation.com
47、habitat(★★★★☆)很不错的家装网站,实景+虚拟人物的效果不错
http://www.habitat.net
48、mariaclaudiacortes(★★★★)
http://www.mariaclaudiacortes.com/
49、logicweb(★★★★☆)组件的应用,功能很强大
http://www.logicweb.it/treeplanner/treeplanner.swf
50、stxship(★★★★★)港口船舶类网站
http://www.stxship.co.kr/stx_multi/index.htm
51、daemyungcondo(★★★☆)--卡通类FLASH网站,童趣味不错。
http://www.daemyungcondo.com/cybertour/vivaldi.html
52、wyburzenia(★★★★)虽然这种机械式的菜单的网站比较多,但它还是很有特色的。
http://www.wyburzenia.pl/
53、agencynet(★★★★★)视觉表现力很强,适合对公司和企业的介绍和推广,以后这样的网站会越来越多的!不错!
http://www.agencynet.com/
54、hyundai-motor(★★★★☆)这样的表现方式还是挺简约的,效果也很好,值得参考。
http://ad.hyundai-motor.com/
http://www.yichuanit.com/case/youleer
http://www.yichuanit.com/case/irean
http://www.yichuanit.com/case/sunshine
http://www.eastmarry.com
国人设计的四个酷站,真的很酷。多顶顶啊。
中间那个站点要使用全屏幕播放,简直太棒了,
订阅:
博文 (Atom)