<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ourday

    ourday

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      8 Posts :: 2 Stories :: 11 Comments :: 0 Trackbacks

    2010年5月9日 #

    JPA是什么

     

    定義 Java Persistence API

    JPA通過(guò)JDK 5.0注解或XML描述對(duì)象-關(guān)系表的映射關(guān)系,并將運(yùn)行期的實(shí)體對(duì)象持久化到數(shù)據(jù)庫(kù)中。

    起源

    Sun引入新的JPA ORM規(guī)范出于兩個(gè)原因:其一,簡(jiǎn)化現(xiàn)有Java EE和Java SE應(yīng)用的對(duì)象持久化的開(kāi)發(fā)工作;其二,Sun希望整合對(duì)ORM技術(shù),實(shí)現(xiàn)天下歸一。

    JPA由EJB 3.0軟件專家組開(kāi)發(fā),作為JSR-220實(shí)現(xiàn)的一部分。但它不囿于EJB 3.0,你可以在Web應(yīng)用、甚至桌面應(yīng)用中使用。JPA的宗旨是為POJO提供持久化標(biāo)準(zhǔn)規(guī)范,由此可見(jiàn),經(jīng)過(guò)這幾年的實(shí)踐探索,能夠脫離容器獨(dú)立運(yùn) 行,方便開(kāi)發(fā)和測(cè)試的理念已經(jīng)深入人心了。目前Hibernate 3.2、TopLink 10.1.3以及OpenJPA都提供了JPA的實(shí)現(xiàn)。

    JPA的總體思想和現(xiàn)有Hibernate、TopLink,JDO等ORM框架大體一致。總的來(lái)說(shuō),JPA包括以下3方面的技術(shù):

    ORM映射元數(shù)據(jù)

    JPA支持XML和JDK 5.0注解兩種元數(shù)據(jù)的形式,元數(shù)據(jù)描述對(duì)象和表之間的映射關(guān)系,框架據(jù)此將實(shí)體對(duì)象持久化到數(shù)據(jù)庫(kù)表中;

    JPA 的API

    用來(lái)操作實(shí)體對(duì)象,執(zhí)行CRUD操作,框架在后臺(tái)替我們完成所有的事情,開(kāi)發(fā)者從繁瑣的JDBC和SQL代碼中解脫出來(lái)。

    查詢語(yǔ)言

    這是持久化操作中很重要的一個(gè)方面,通過(guò)面向?qū)ο蠖敲嫦驍?shù)據(jù)庫(kù)的查詢語(yǔ)言查詢數(shù)據(jù),避免程序的SQL語(yǔ)句緊密耦合。

    JPA的優(yōu)勢(shì)

    1 標(biāo)準(zhǔn)化

    JPA 是 JCP 組織發(fā)布的 Java EE 標(biāo)準(zhǔn)之一,因此任何聲稱符合 JPA 標(biāo)準(zhǔn)的框架都遵循同樣的架構(gòu),提供相同的訪問(wèn) API,這保證了基于JPA開(kāi)發(fā)的企業(yè)應(yīng)用能夠經(jīng)過(guò)少量的修改就能夠在不同的JPA框架下運(yùn)行。

    2 對(duì)容器級(jí)特性的支持

    JPA 框架中支持大數(shù)據(jù)集、事務(wù)、并發(fā)等容器級(jí)事務(wù),這使得 JPA 超越了簡(jiǎn)單持久化框架的局限,在企業(yè)應(yīng)用發(fā)揮更大的作用。

    3 簡(jiǎn)單易用,集成方便

    JPA的主要目標(biāo)之一就是提供更加簡(jiǎn)單的編程模型:在JPA框架下創(chuàng)建實(shí)體和創(chuàng)建Java 類一樣簡(jiǎn)單,沒(méi)有任何的約束和限制,只需要使用 javax.persistence.Entity進(jìn)行注釋;JPA的框架和接口也都非常簡(jiǎn)單,沒(méi)有太多特別的規(guī)則和設(shè)計(jì)模式的要求,開(kāi)發(fā)者可以很容易的 掌握。JPA基于非侵入式原則設(shè)計(jì),因此可以很容易的和其它框架或者容器集成。

    4 可媲美JDBC的查詢能力

    JPA的查詢語(yǔ)言是面向?qū)ο蠖敲嫦驍?shù)據(jù)庫(kù)的,它以面向?qū)ο蟮淖匀徽Z(yǔ)法構(gòu)造查詢語(yǔ)句,可以看成 是Hibernate HQL的等價(jià)物。JPA定義了獨(dú)特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一種擴(kuò)展,它是針對(duì)實(shí)體的一種查詢語(yǔ)言,操作對(duì)象是實(shí)體,而不是關(guān)系數(shù)據(jù)庫(kù)的表,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高級(jí)查詢特性,甚至還能夠支持子查詢。

    5 支持面向?qū)ο蟮母呒?jí)特性

    JPA 中能夠支持面向?qū)ο蟮母呒?jí)特性,如類之間的繼承、多態(tài)和類之間的復(fù)雜關(guān)系,這樣的支持能夠讓開(kāi)發(fā)者最大限度的使用面向?qū)ο蟮哪P驮O(shè)計(jì)企業(yè)應(yīng)用,而不需要自行處理這些特性在關(guān)系數(shù)據(jù)庫(kù)的持久化。

    JPA的供應(yīng)商

    JPA 的目標(biāo)之一是制定一個(gè)可以由很多供應(yīng)商實(shí)現(xiàn)的API,并且開(kāi)發(fā)人員可以編碼來(lái)實(shí)現(xiàn)該API,而不是使用私有供應(yīng)商特有的API。因此開(kāi)發(fā)人員只需使用供應(yīng) 商特有的API來(lái)獲得JPA規(guī)范沒(méi)有解決但應(yīng)用程序中需要的功能。盡可能地使用JPA API,但是當(dāng)需要供應(yīng)商公開(kāi)但是規(guī)范中沒(méi)有提供的功能時(shí),則使用供應(yīng)商特有的API。

    1 Hibernate

    JPA是需要Provider來(lái)實(shí)現(xiàn)其功能的,Hibernate就是JPA Provider中很強(qiáng)的一個(gè),目前來(lái)說(shuō)應(yīng)該無(wú)人能出其右。從功能上來(lái)說(shuō),JPA現(xiàn)在就是Hibernate功能的一個(gè)子集。Hibernate 從3.2開(kāi)始,就開(kāi)始兼容JPA。Hibernate3.2獲得了Sun TCK的JPA(Java Persistence API) 兼容認(rèn)證。

    只要熟悉Hibernate或者其他ORM框架,在使用JPA時(shí)會(huì)發(fā)現(xiàn)其實(shí)非常容易上手。例如 實(shí)體對(duì)象的狀態(tài),在Hibernate有自由、持久、游離三種,JPA里有new,managed,detached,removed,明眼人一看就知 道,這些狀態(tài)都是一一對(duì)應(yīng)的。再如flush方法,都是對(duì)應(yīng)的,而其他的再如說(shuō)Query query = manager.createQuery(sql),它在Hibernate里寫(xiě)法上是session,而在JPA中變成了manager,所以從 Hibernate到JPA的代價(jià)應(yīng)該是非常小的

    同樣,JDO,也開(kāi)始兼容JPA。在ORM的領(lǐng)域中,看來(lái)JPA已經(jīng)是王道,規(guī)范就是規(guī)范。在各大廠商的支持下,JPA的使用開(kāi)始變得廣泛。

    2 Spring

    Spring + Hibernate 常常被稱為 Java Web 應(yīng)用人氣最旺的框架組合。而在 JCP 通過(guò)的 Web Beans JSR ,卻欲將JSF + EJB + JPA 、來(lái)自 JBoss Seam(Spring 除外)的一些組件和EJB 3(目前能夠提供有基本攔截和依賴注入功能的簡(jiǎn)化 Session Bean 框架)的一個(gè) Web 組合進(jìn)行標(biāo)準(zhǔn)化。如今的 Spring 2.0 為 JPA 提供了完整的 EJB 容器契約,允許 JPA在任何環(huán)境內(nèi)可以在 Spring 管理的服務(wù)層使用(包括 Spring 的所有 AOP 和 DI 增強(qiáng))。同時(shí),關(guān)于下一個(gè)Web應(yīng)用組合會(huì)是 EJB、Spring + Hibernate 還是 Spring + JPA 的論戰(zhàn),早已充斥于耳。

    在Spring 2.0.1中,正式提供對(duì)JPA的支持,這也促成了JPA的發(fā)展,要知道JPA的好處在于可以分離于容器運(yùn)行,變得更加的簡(jiǎn)潔。

    3 OpenJPA

    OpenJPA 是 Apache 組織提供的開(kāi)源項(xiàng)目,它實(shí)現(xiàn)了 EJB 3.0 中的 JPA 標(biāo)準(zhǔn),為開(kāi)發(fā)者提供功能強(qiáng)大、使用簡(jiǎn)單的持久化數(shù)據(jù)管理框架。OpenJPA 封裝了和關(guān)系型數(shù)據(jù)庫(kù)交互的操作,讓開(kāi)發(fā)者把注意力集中在編寫(xiě)業(yè)務(wù)邏輯上。OpenJPA 可以作為獨(dú)立的持久層框架發(fā)揮作用,也可以輕松的與其它 Java EE 應(yīng)用框架或者符合 EJB 3.0 標(biāo)準(zhǔn)的容器集成。

    4 其它

    目前支持的實(shí)現(xiàn)包括Toplink、Hibernate Entitymanager等。TopLink以前需要收費(fèi),如今開(kāi)源了。OpenJPA雖然免費(fèi),但功能、性能、普及性等方面更加需要加大力度。

    對(duì)于EJB來(lái)說(shuō),實(shí)體Bean一直是被批評(píng)的對(duì)象,由于其太復(fù)雜和龐大。JPA的出現(xiàn),很大程度的分離了復(fù)雜性。這讓EJB的推廣也變得容易。

    總而言之,JPA規(guī)范主要關(guān)注的僅是API的行為方面,而由各種實(shí)現(xiàn)完成大多數(shù)性能有關(guān)的調(diào)優(yōu)。盡管如此,所有可靠的實(shí)現(xiàn)都應(yīng)該擁有某種數(shù)據(jù)緩存,以作為選擇。但愿不久的將來(lái),JPA能成為真正的標(biāo)準(zhǔn)。

    小結(jié)

    EJB 3.0和JPA 毫無(wú)疑問(wèn)將是Java EE 5的主要賣點(diǎn)。在某些領(lǐng)域中,它們給Java社區(qū)帶來(lái)了競(jìng)爭(zhēng)優(yōu)勢(shì),并使Java 在其他領(lǐng)域與競(jìng)爭(zhēng)對(duì)手不分伯仲(因?yàn)椋豢煞裾J(rèn),目前某些領(lǐng)域尚不存在基于標(biāo)準(zhǔn)的方法)。

    過(guò)去數(shù)年來(lái),Spring Framework一直是EJB在企業(yè)領(lǐng)域的主要競(jìng)爭(zhēng)對(duì)手。EJB3.0規(guī)范解決了很多促進(jìn)Spring興起的問(wèn)題。隨著它的出現(xiàn),EJB3.0毫無(wú)疑問(wèn)比Spring提供了更好的開(kāi)發(fā)體驗(yàn)——最引人注目的優(yōu)勢(shì)是它不需要配置文件。

    JPA提供一種標(biāo)準(zhǔn)的OR映射解決方案,該解決方案完全集成到EJB3。0兼容的容器中。JPA的前輩將會(huì)繼續(xù)穩(wěn)定發(fā)展,但是業(yè)務(wù)應(yīng)用程序中的 raw 使用將可能會(huì)減少。實(shí)現(xiàn) JPA 兼容的實(shí)體管理器似乎很可能是此類技術(shù)的發(fā)展方向。

    Java EE系列規(guī)范的較大問(wèn)題與JPA沒(méi)有任何關(guān)系。Java EE 系列規(guī)范的問(wèn)題涉及到 Web和EJB容器之間的集成。Spring在此領(lǐng)域仍然具有主要競(jìng)爭(zhēng)優(yōu)勢(shì)。JBoss的Seam項(xiàng)目嘗試使用自定義的方法來(lái)解決這一問(wèn)題。Caucho Resin應(yīng)用服務(wù)器試圖擴(kuò)展容器邊界并支持在Web容器中使用@EJB注釋。我們希望Java EE 5.1將解決層集成的問(wèn)題,為我們提供一個(gè)全面而標(biāo)準(zhǔn)的依賴性注入方法。

    在不久的將來(lái),Sun可能會(huì)將JPA作為一個(gè)單獨(dú)的JSR對(duì)待,同時(shí)JPA還可能作為Java SE的一部分。不過(guò)這些都不太重要,重要的是,我們現(xiàn)在已經(jīng)可以在脫離容器的情況下、在Java SE應(yīng)用中使用JPA了。

    JPA已經(jīng)作為一項(xiàng)對(duì)象持久化的標(biāo)準(zhǔn),不但可以獲得Java EE應(yīng)用服務(wù)器的支持,還可以直接在Java SE中使用。開(kāi)發(fā)者將無(wú)需在現(xiàn)有多種ORM框架中艱難地選擇,按照Sun的預(yù)想,現(xiàn)有ORM框架頭頂?shù)墓猸h(huán)將漸漸暗淡,不再具有以往的吸引力。

    值得注意的是Java Persistence API并不是J2EE環(huán)境

    專用,而是在java中的通用API。意味著我們可以在任何需要訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)的地方使用JPA,

    甚至包括面應(yīng)用。JPA也不要求一定在J2EE容器中才能運(yùn)行,而是任何有JVM的環(huán)境都可以運(yùn)用。

    這就使得我們可以很容易的把JPA作為一個(gè)持久化組件自由的和各種容器/框架(EJB3容器, Spring等等)組合。

       JPA最主要的是一個(gè)統(tǒng)一的persistence.xml配置文件,可以放到每一個(gè)jar的META-INF/目錄下面,配置內(nèi)容主要有

    (以hibernate為例)

    1、數(shù)據(jù)庫(kù)連接的配置文件

    2、數(shù)據(jù)庫(kù)方言、連接URL、用戶名、密碼

    3、ORM映射的列表(Class)

    4、配置其它的Hibernate屬性(其他的Provider屬性)

    5、cache

    主要內(nèi)容,詳細(xì)內(nèi)容請(qǐng)看hibernate的reference

    xml 代碼

    1. xml version="1.0" encoding="UTF-8"?>  
    2. <persistence>  
    3.    <persistence-unit name="TestEntityManager" transaction-type="RESOURCE_LOCAL">  
    4.       <provider>org.hibernate.ejb.HibernatePersistenceprovider>     
    5.       <class>com.jl.sub1.mapping.Productclass>  
    6.       <class>com.jl.sub1.mapping.ProductItemclass>  
    7.         
    8.       <properties>  
    9.           <property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect" />  
    10.           <property name="hibernate.connection.driver_class" value="com.ibm.db2.jcc.DB2Driver" />  
    11.           <property name="hibernate.connection.password" value="db2admin" />  
    12.           <property name="hibernate.connection.url" value="jdbc:db2://10.1.1.10:50000/dbjl" />  
    13.           <property name="hibernate.connection.username" value="db2admin" />  
    14.           <property name="hibernate.ejb.autodetection" value="class" />  
    15.     properties>               
    16.    persistence-unit>  
    17. persistence>  
    18.   
    19.   
    20.   
    21.   
    22. <property name="kodo.ConnectionDriverName" value="..."/>  
    23. <property name="kodo.ConnectionURL" value="..."/>  
    24. <property name="kodo.ConnectionUserName" value="..."/>  
    25. <property name="kodo.ConnectionPassword" value="..."/>  
    26. <property name="kodo.Log" value="DefaultLevel=INFO, Runtime=DEBUG, Tool=INFO"/>  
    27.              

     

    spring配置

    xml 代碼

    1. <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">  
    2.     <property name="entityManagerName"         value="TestEntityManager" />     
    3.     <property name="jpaProperties">  
    4.         <props></props>  
    5.     </property>  
    6.       
    7. </bean>  
    8. <!-- 此處的名字要和persistence.xml中定義的name一致-->  
    9. <!-- jpaProperties此屬性必須要加,hibernate3.1.2的一個(gè)bug,否則會(huì)拋NullPointerException,springframework論壇告訴我的:)-->  
    10.   
    11. <bean class=  
    12.     "org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>  
    13.     <!--貌似這個(gè)部分所有spring配置文件還是僅允許一個(gè),可以配置到公共的xml中-->  
    14.       
    15. <!--引用上面建立的entityManagerFactory-->  
    16. <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">  
    17.     <property name="entityManagerFactory“ ref="entityManagerFactory" />  
    18.           
    19. </bean>  
    20.   
    21. <bean id="transactionInterceptor"  
    22.     class="org.springframework.transaction.interceptor.TransactionInterceptor">  
    23.     <property name="transactionManager" ref="transactionManager" />  
    24.     <property name="transactionAttributeSource">  
    25.     <bean class=  
    26.     "org.springframework.transaction.annotation.AnnotationTransactionAttributeSource" />  
    27.     </property>  
    28. </bean>  
    29.   
    30. <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">  
    31.     <property name="transactionInterceptor" ref="transactionInterceptor" />  
    32. </bean>  
    33.   
    34. <!--自定義DAO-->  
    35. <bean id="numberDao" class="dao.JpaNumberDAO">  
    36.     <property name="entityManagerFactory“ ref="entityManagerFactory" />  
    37. </bean>  
    38. <!--DAO需繼承自org.springframework.orm.jpa.support.JpaDaoSupport-->  
    39. <!--DAO中可以通過(guò)getJpaTemplate()的各種方法進(jìn)行持久化操作-->  

     

    這樣就好了,可以使用entitymanager,每個(gè)jar里面可以相互不用影響,而且這個(gè)也符合我們新過(guò)程改進(jìn)推進(jìn)的每個(gè)子系統(tǒng)用jar發(fā)布的原則,當(dāng)然這里的還有作service層,對(duì)于子系統(tǒng)之間的交互,我覺(jué)得,原則上應(yīng)該僅允許他們?cè)趕ervice的層面上進(jìn)行,在DAO之間不應(yīng)該有相互的交叉,不過(guò)隱約覺(jué)

    得還有很多東西要做,嗯,很晚了,肚子餓,明天再想,呵呵

    哦,對(duì)了,Spring真是好東西,封裝了這么多東西給我們用,真是期待更好的版本出來(lái)啊,

    還有,在j2se環(huán)境里,也可以通過(guò)代碼的方式取得JPA的api

    java 代碼

    1. EntityManagerFactory emf =  
    2. Peristence.createEntityManagerFactory(“TestEntityManager”) ;  
    3. //此處的名字要和persistence.xml中  
    4.   
    5. //定義的name一致  
    6.   
    7.   
    8. EntityManager em = emf.createEntityManager();  
    9. ...//使用  
    10. em.close();  
    11. ...  
    12. emf.close();  
    13. EntityManagerFactory emf =  
    14. Peristence.createEntityManagerFactory(“TestEntityManager”) ;  
    15. EntityManager em = emf.createEntityManager();  
    16. ...//使用  
    17. em.close();  
    18. ...  
    19. emf.close();  

    posted @ 2010-05-09 15:02 ourday 閱讀(1793) | 評(píng)論 (1)編輯 收藏

    使用注解元數(shù)據(jù)
    基本注解:
    例子:
    @Entity(name = "T_TOPIC") ①
    public class Topic implements Serializable ...{

    @Id ② -1

    @GeneratedValue(strategy = GenerationType.TABLE) ② -2

    @Column(name = "TOPIC_ID") ② -3

    private int topicId;

    @Column(name = "TOPIC_TITLE", length = 100) ③
    private String topicTitle;

    @Column(name = "TOPIC_TIME") @Temporal(TemporalType.DATE) ④
    private Date topicTime;

    @Column(name = "TOPIC_VIEWS")

    private int topicViews;

    ...

    }



    解釋:
    ① Entity 標(biāo)明該類 (Topic) 為一個(gè)實(shí)體類,它對(duì)應(yīng)數(shù)據(jù)庫(kù)中的表表名是 T_TOPIC ,這里也可以寫(xiě)成: @Entity

    @Table(name = "T_TOPIC") 其作用都是一樣的
    ② -1 Id 標(biāo)明該屬性對(duì)應(yīng)數(shù)據(jù)表中的主鍵
    ② -2 GeneratedValue 通過(guò) strategy 屬性指明主鍵生成策略,默認(rèn)情況下, JPA 自動(dòng)選擇一個(gè)最適合底層數(shù)據(jù)庫(kù)的主鍵生成策略。在 javax.persistence.GenerationType 中定義了以下幾種可供選擇的策略:
    1) IDENTITY :表自增鍵字段, Oracle 不支持這種方式;
    2) AUTO : JPA 自動(dòng)選擇合適的策略,是默認(rèn)選項(xiàng);
    3) SEQUENCE :通過(guò)序列產(chǎn)生主鍵,通過(guò) @SequenceGenerator 注解指定序列名, MySql 不支持這種方式;
    4) TABLE :通過(guò)表產(chǎn)生主鍵,框架借由表模擬序列產(chǎn)生主鍵,使用該策略可以使應(yīng)用更易于數(shù)據(jù)庫(kù)移植。
    ② -3 Column 標(biāo)明這個(gè)屬性是數(shù)據(jù)表中的一列,該列的名字是 TOPIC_ID

    ③ Column 的一個(gè)屬性 length 指明的是該屬性的允許的長(zhǎng)度。 ( 個(gè)人認(rèn)為設(shè)定該屬性只是對(duì)于程序中操作該屬性時(shí)增加了一驗(yàn)證過(guò)程,對(duì)數(shù)據(jù)庫(kù)中該列原來(lái)的設(shè)置并沒(méi)有影響,但是 length 屬性指定的值必須不能大于數(shù)據(jù)庫(kù)創(chuàng)建表時(shí)給該列限制的最大長(zhǎng)度否則會(huì)出錯(cuò) )

    ④ Temporal(TemporalType.DATE) :如果屬性是時(shí)間類型,因?yàn)閿?shù)據(jù)表對(duì)時(shí)間類型有更嚴(yán)格的劃分,所以必須指定具體時(shí)間類型。在 javax.persistence.TemporalType 枚舉中定義了 3 種時(shí)間類型:
    1) DATE :等于 java.sql.Date

    2) TIME :等于 java.sql.Time

    3) TIMESTAMP :等于 java.sql.Timestamp



    繼承關(guān)系注解:
    對(duì)繼承關(guān)系進(jìn)行注解,必須在 父類 中聲明繼承實(shí)體的映射策略。
    例子:
    @Entity(name = "T_TOPIC")

    @Inheritance(strategy = InheritanceType.SINGLE_TABLE) ① @DiscriminatorColumn(name = "TOPIC_TYPE", discriminatorType =

    DiscriminatorType.INTEGER, length = 1) ②
    @DiscriminatorValue(value="1") ③
    public class Topic implements Serializable ...{ … }



    解釋:
    ① Inheritance 通過(guò) strategy 屬性指明實(shí)體的繼承策略。
    在 javax.persistence.InheritanceType 定義了 3 種映射策略:
    1) SINGLE_TABLE :父子類都保存到同一個(gè)表中,通過(guò)字段值進(jìn)行區(qū)分。
    2) JOINED :父子類相同的部分保存在同一個(gè)表中,不同的部分分開(kāi)存放,通過(guò)表連接獲取完整數(shù)據(jù);
    3) TABLE_PER_CLASS :每一個(gè)類對(duì)應(yīng)自己的表,一般不推薦采用這種方式。
    ② DiscriminatorColumn 如果繼承策略采用第一種繼承策略,則需要指明區(qū)分父子類的字段, DiscriminatorColumn 就是用來(lái)指明區(qū)分字段的注解。
    ③ DiscriminatorValue 同樣的采用第一種繼承策略通過(guò)字段區(qū)分父子類,則用這個(gè)注解給該實(shí)體的區(qū)分字段賦值在這里賦的值為 ”1”.



    關(guān)聯(lián)關(guān)系注解:
    例子:
    @Entity @DiscriminatorValue(value="2") ①
    public class PollTopic extends Topic ...{ ②繼承于 Topic 實(shí)體
    private boolean multiple; ③
    @Column(name = "MAX_CHOICES")

    private int maxChoices; @OneToMany(mappedBy="pollTopic",cascade=CascadeType.ALL) ④
    private Set options = new HashSet();

    // 省略 get/setter 方法
    }

    解釋 :

    ① 通過(guò) @DiscriminatorValue 將區(qū)分字段 TOPIC_TYPE 的值為 2 。由于 PollTopic 實(shí)體繼承于 Topic 實(shí)體,其它的元數(shù)據(jù)信息直接從 Topic 獲得。
    ④ OneToMany 指定了一個(gè)一對(duì)多的關(guān)聯(lián)關(guān)系, mappedBy 屬性指定 “Many” 方類引用 “One” 方類 的屬性名; cascade 屬性指明了級(jí)聯(lián)方式(如果這里不指定為 CascadeType.ALL 的話,那么有關(guān)聯(lián)關(guān)系的兩個(gè)對(duì)象在做保存和刪除操作時(shí)要分別來(lái)進(jìn)行) 建議 :盡可能使用 cascade=CascadeType.ALL 來(lái)減少持久化操作的復(fù)雜性和代碼量
    注意 : JPA 規(guī)范規(guī)定任何屬性都默認(rèn)映射到表中,所以雖然我們沒(méi)有給③處的 multiple 屬性提供注解信息,但 JPA 將按照 默認(rèn)的規(guī)則對(duì)該字段進(jìn)行映射:字段名和屬性名相同,類型相同。如果我們不希望將某個(gè)屬性持久化到數(shù)據(jù)表中,則可以通過(guò) @Transient 注解顯式指定:
    @Transient

    private boolean tempProp1;





    @Entity(name="T_POLL_OPTION")

    Public class PollOption implements Serializable ...{

    @Id

    @GeneratedValue(strategy = GenerationType.TABLE)

    @Column(name = "OPTION_ID")

    private int optionId;

    @Column(name = "OPTION_ITEM")

    private String optionItem;

    @ManyToOne ①
    @JoinColumn(name="TOPIC_ID", nullable=false) ②
    private PollTopic pollTopic;

    }



    解釋:
    ① ManyToOne 描述了多對(duì)一的關(guān)聯(lián)關(guān)系,他是對(duì)該類引用的 ”One” 類 (PollTopic) 的屬性( pollTopic )進(jìn)行注解的。
    ② JoinColumn 指定關(guān)聯(lián) ”One”(PollTopic) 實(shí)體所對(duì)應(yīng)表的 “ 外鍵 ” 。


    Lob 字段的注解:
    在 JPA 中 Lob 類型類型的持久化很簡(jiǎn)單,僅需要通過(guò)特殊的 Lob 注解就可以達(dá)到目的。
    例子:


    @Lob ① -1

    @Basic(fetch = FetchType.EAGER) ① -2

    @Column(name = "POST_TEXT", columnDefinition = "LONGTEXT NOT NULL") ① -3

    private String postText;



    @Lob

    @Basic(fetch = FetchType. LAZY) ② -2

    @Column(name = "POST_ATTACH", columnDefinition = "BLOB") ② -3

    private byte[] postAttach;



    解釋:
    ① -1 JPA 通過(guò) @Lob 將屬性標(biāo)注為 Lob 類型 ;
    ① -2 通過(guò) @Basic 指定 Lob 類型數(shù)據(jù)的獲取策略, FetchType.EAGER 表示非延遲 加載,而 FetchType. LAZY 表示延遲加載 ;
    ① -3 通過(guò) @Column 的 columnDefinition 屬性指定數(shù)據(jù)表對(duì)應(yīng)的 Lob 字段類型。






    使用 XML 元數(shù)據(jù)


    除了使用注解提供元數(shù)據(jù)信息外, JPA 也允許我們通過(guò) XML 提供元數(shù)據(jù)信息。按照 JPA 的規(guī)范, 如果你提供了 XML 元數(shù)據(jù)描述信息,它將覆蓋實(shí)體類中的注解元數(shù)據(jù)信息 。 XML 元數(shù)據(jù)信息以 orm.xml 命名,放置在類路徑的 META-INF 目錄下。


    <?xml version="1.0" encoding="UTF-8"?>

    <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"

    version="1.0">

    ①實(shí)體對(duì)象所在的包
    <package>com.baobaotao.domain</package>

    <entity class="Topic">

    ② Topic 實(shí)體配置

    <table name="T_TOPIC" />

    <attributes>

    <id name="topicId">

    <column name="TOPIC_ID"/>

    <generated-value strategy="TABLE" />

    </id>

    <basic name="topicTitle">

    <column name="TOPIC_TITLE" length="30" />

    </basic>

    <basic name="topicTime">

    <column name="TOPIC_TIME" />

    <temporal>DATE</temporal>

    </basic>

    <basic name="topicViews">

    <column name="TOPIC_VIEWS" />

    </basic>

    </attributes>

    </entity>

    <entity class="PollTopic">

    ② PollTopic 實(shí)體配置

    <discriminator-value>2</discriminator-value>

    <attributes>

    <basic name="maxChoices">

    <column name="MAX_CHOICES" />

    </basic>

    <one-to-many name="options" mapped-by="pollTopic">

    <cascade>

    <cascade-all/>

    </cascade>

    </one-to-many>

    </attributes>

    </entity>

    <entity class="PollOption">

    ② PollOption 實(shí)體配置

    <table name="T_POLL_OPTION" />

    <attributes>

    <id name="optionId">

    <column name="OPTION_ID" />

    <generated-value strategy="TABLE" />

    </id>

    <basic name="optionItem">

    <column name="OPTION_ITEM"/>

    </basic>

    <many-to-one name="pollTopic" >

    <join-column name="TOPIC_ID" nullable="false"/>

    </many-to-one>

    </attributes>

    </entity>

    <entity class="Post">

    ② Post 實(shí)體配置

    <table name="T_POST" />

    <attributes>

    <id name="postId">

    <column name="POST_ID" />

    <generated-value strategy="TABLE" />

    </id>

    <basic name="postText" fetch="EAGER">

    <column name="POST_TEXT" column-definition="LONGTEXT NOT NULL"/>

    <lob/>

    </basic>

    <basic name="postAttach" fetch="LAZY">

    <column name="POST_ATTACH" column-definition="BLOB"/>

    <lob/>

    </basic>

    </attributes>

    </entity>

    </entity-mappings>



    使用這個(gè) orm.xml 來(lái)描述實(shí)體信息的話,這里并沒(méi)有標(biāo)明兩個(gè)繼承類之間的關(guān)系,其繼承信息將從實(shí)體類反射信息獲取。


    到這里我們的實(shí)體描述結(jié)束了,當(dāng)然我們只是做了比較簡(jiǎn)單的描述,對(duì)于那些復(fù)雜的信息描述并沒(méi)有進(jìn)行講述。實(shí)體描述結(jié)束了,有人會(huì)問(wèn)如果我要來(lái)操作這些實(shí)體該怎么操作?這就是我們接下來(lái)要講述的問(wèn)題。


    EntityManager 介紹

    實(shí)體對(duì)象由實(shí)體管理器進(jìn)行管理, JPA 使用 javax.persistence.EntityManager 代表實(shí)體管理器。實(shí)體管理器和持久化上下文關(guān)聯(lián),持久化上下文是一系列實(shí)體的管理環(huán)境,我們通過(guò) EntityManager 和持久化上下文進(jìn)
    posted @ 2010-05-09 14:57 ourday 閱讀(1341) | 評(píng)論 (0)編輯 收藏

    2008年11月1日 #

    通過(guò)dateadd和case..when...then.else函數(shù)來(lái)比較開(kāi)始考試日期,考試結(jié)束日期與當(dāng)前時(shí)間來(lái)確定是否可以參加考試.
    select   name,test_num,test_paper,begin_date,end_date,
          valid=case   when   begin_date>dateadd(dd,0,getdate()) or end_date<dateadd(dd,0,getdate()) then   0   else   1   end    
    from test where id=1
    或者
    SELECT    'valid '=
          CASE         
           WHEN datediff(dd,begin_date,getdate())<0 THEN 0
           WHEN datediff(dd,end_date,getdate())>0 THEN 0
    else 1     
          END,
    name,test_num,test_paper,begin_date,end_date
    from test where id=1

    Mysql中的獲取最后一條插入ID的函數(shù)是Last_INSERT_ID(),而MSSql2000的函數(shù)有以下三個(gè).
    IDENT_CURRENT() 返回為任何會(huì)話和任何作用域中的特定表最后生成的標(biāo)識(shí)值。  
    @@IDENTITY 返回為當(dāng)前會(huì)話的所有作用域中的任何表最后生成的標(biāo)識(shí)值。   
    推薦使用:SCOPE_IDENTITY () 返回為當(dāng)前會(huì)話和當(dāng)前作用域中的任何表最后生成的標(biāo)識(shí)值。(防止返回觸發(fā)器中的insert的IDENTITY值)  

    時(shí)間轉(zhuǎn)換函數(shù)
    SELECT convert(varchar(10),mn_test.begin_date,23)+'至'+convert(varchar(10),mn_test.end_date,23) as testtime FROM test LEFT OUTER JOIN grade ON (test.grade_note = grade.note)

    對(duì)查詢結(jié)果隨機(jī)排序
    SELECT * FROM Northwind..Orders ORDER BY NEWID()
    SELECT TOP 10 * FROM Northwind..Orders ORDER BY NEWID()

    附1:SQLServer和Oracle的常用函數(shù)對(duì)比

      1.絕對(duì)值

      S:select abs(-1) value

      O:select abs(-1) value from dual

      2.取整(大)

      S:select ceiling(-1.001) value

      O:select ceil(-1.001) value from dual

      3.取整(小)

      S:select floor(-1.001) value

      O:select floor(-1.001) value from dual

      4.取整(截取)

      S:select cast(-1.002 as int) value

      O:select trunc(-1.002) value from dual

      5.四舍五入

      S:select round(1.23456,4) value 1.23460

      O:select round(1.23456,4) value from dual 1.2346

      6.e為底的冪

      S:select Exp(1) value 2.7182818284590451

      O:select Exp(1) value from dual 2.71828182

      7.取e為底的對(duì)數(shù)

      S:select log(2.7182818284590451) value 1

      O:select ln(2.7182818284590451) value from dual; 1

      8.取10為底對(duì)數(shù)

      S:select log10(10) value 1

      O:select log(10,10) value from dual; 1

      9.取平方

      S:select SQUARE(4) value 16

      O:select power(4,2) value from dual 16

      10.取平方根

      S:select SQRT(4) value 2

      O:select SQRT(4) value from dual 2

      11.求任意數(shù)為底的冪

      S:select power(3,4) value 81

      O:select power(3,4) value from dual 81

      12.取隨機(jī)數(shù)

      S:select rand() value

      O:select sys.dbms_random.value(0,1) value from dual;

      13.取符號(hào)

      S:select sign(-8) value -1

      O:select sign(-8) value from dual -1

      ----------數(shù)學(xué)函數(shù)

      14.圓周率

      S:SELECT PI() value 3.1415926535897931

      O:不知道

      15.sin,cos,tan 參數(shù)都以弧度為單位

      例如:select sin(PI()/2) value 得到1(SQLServer)

      16.Asin,Acos,Atan,Atan2 返回弧度

      17.弧度角度互換(SQLServer,Oracle不知道)

      DEGREES:弧度-〉角度

      RADIANS:角度-〉弧度

      ---------數(shù)值間比較

      18. 求集合最大值

      S:select max(value) value from

      (select 1 value

      union

      select -2 value

      union

      select 4 value

      union

      select 3 value)a

      O:select greatest(1,-2,4,3) value from dual

      19. 求集合最小值

      S:select min(value) value from

      (select 1 value

      union

      select -2 value

      union

      select 4 value

      union

      select 3 value)a

      O:select least(1,-2,4,3) value from dual

      20.如何處理null值(F2中的null以10代替)

      S:select F1,IsNull(F2,10) value from Tbl

      O:select F1,nvl(F2,10) value from Tbl

    --------數(shù)值間比較

      21.求字符序號(hào)

      S:select ascii('a') value

      O:select ascii('a') value from dual

      22.從序號(hào)求字符

      S:select char(97) value

      O:select chr(97) value from dual

      23.連接

      S:select '11'+'22'+'33' value

      O:select CONCAT('11','22')||33 value from dual

      23.子串位置 --返回3

      S:select CHARINDEX('s','sdsq',2) value

      O:select INSTR('sdsq','s',2) value from dual

      23.模糊子串的位置 --返回2,參數(shù)去掉中間%則返回7

      S:select patindex('%d%q%','sdsfasdqe') value

      O:oracle沒(méi)發(fā)現(xiàn),但是instr可以通過(guò)第四霾問(wèn) 刂瞥魷執(zhí)問(wèn)?BR>  select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6

      24.求子串

      S:select substring('abcd',2,2) value

      O:select substr('abcd',2,2) value from dual

      25.子串代替 返回aijklmnef

      S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value

      O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual

      26.子串全部替換

      S:沒(méi)發(fā)現(xiàn)

      O:select Translate('fasdbfasegas','fa','我' ) value from dual

      27.長(zhǎng)度

      S:len,datalength

      O:length

      28.大小寫(xiě)轉(zhuǎn)換 lower,upper

      29.單詞首字母大寫(xiě)

      S:沒(méi)發(fā)現(xiàn)

      O:select INITCAP('abcd dsaf df') value from dual

      30.左補(bǔ)空格(LPAD的第一個(gè)參數(shù)為空格則同space函數(shù))

      S:select space(10)+'abcd' value

      O:select LPAD('abcd',14) value from dual

      31.右補(bǔ)空格(RPAD的第一個(gè)參數(shù)為空格則同space函數(shù))

      S:select 'abcd'+space(10) value

      O:select RPAD('abcd',14) value from dual

      32.刪除空格

      S:ltrim,rtrim

      O:ltrim,rtrim,trim

      33. 重復(fù)字符串

      S:select REPLICATE('abcd',2) value

      O:沒(méi)發(fā)現(xiàn)

      34.發(fā)音相似性比較(這兩個(gè)單詞返回值一樣,發(fā)音相同)

      S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')

      O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual

      SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比較soundex的差

      返回0-4,4為同音,1最高

      --------------日期函數(shù)

      35.系統(tǒng)時(shí)間

      S:select getdate() value

      O:select sysdate value from dual

      36.前后幾日

      直接與整數(shù)相加減

      37.求日期

      S:select convert(char(10),getdate(),20) value

      O:select trunc(sysdate) value from dual

      select to_char(sysdate,'yyyy-mm-dd') value from dual

      38.求時(shí)間

      S:select convert(char(8),getdate(),108) value

      O:select to_char(sysdate,'hh24:mm:ss') value from dual

      39.取日期時(shí)間的其他部分

      S:DATEPART 和 DATENAME 函數(shù) (第一個(gè)參數(shù)決定)

      O:to_char函數(shù) 第二個(gè)參數(shù)決定

    參數(shù)---------------------------------下表需要補(bǔ)充

      year yy, yyyy

      quarter qq, q (季度)

      month mm, m (m O無(wú)效)

      dayofyear dy, y (O表星期)

      day dd, d (d O無(wú)效)

      week wk, ww (wk O無(wú)效)

      weekday dw (O不清楚)

      Hour hh,hh12,hh24 (hh12,hh24 S無(wú)效)

      minute mi, n (n O無(wú)效)

      second ss, s (s O無(wú)效)

      millisecond ms (O無(wú)效)

      ----------------------------------------------

      40.當(dāng)月最后一天

      S:不知道

      O:select LAST_DAY(sysdate) value from dual

      41.本星期的某一天(比如星期日)

      S:不知道

      O:SELECT Next_day(sysdate,7) vaule FROM DUAL;

      42.字符串轉(zhuǎn)時(shí)間

      S:可以直接轉(zhuǎn)或者select cast('2004-09-08'as datetime) value

      O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;

      43.求兩日期某一部分的差(比如秒)

      S:select datediff(ss,getdate(),getdate()+12.3) value

      O:直接用兩個(gè)日期相減(比如d1-d2=12.3)

      SELECT (d1-d2)*24*60*60 vaule FROM DUAL;

      44.根據(jù)差值求新的日期(比如分鐘)

      S:select dateadd(mi,8,getdate()) value

      O:SELECT sysdate+8/60/24 vaule FROM DUAL;

      45.求不同時(shí)區(qū)時(shí)間

      S:不知道

      O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;

      -----時(shí)區(qū)參數(shù),北京在東8區(qū)應(yīng)該是Ydt-------

      AST ADT 大西洋標(biāo)準(zhǔn)時(shí)間

      BST BDT 白令海標(biāo)準(zhǔn)時(shí)間

      CST CDT 中部標(biāo)準(zhǔn)時(shí)間

      EST EDT 東部標(biāo)準(zhǔn)時(shí)間

      GMT 格林尼治標(biāo)準(zhǔn)時(shí)間

      HST HDT 阿拉斯加—夏威夷標(biāo)準(zhǔn)時(shí)間

      MST MDT 山區(qū)標(biāo)準(zhǔn)時(shí)間

      NST 紐芬蘭標(biāo)準(zhǔn)時(shí)間

      PST PDT 太平洋標(biāo)準(zhǔn)時(shí)間

      YST YDT YUKON標(biāo)準(zhǔn)時(shí)間

    Oracle支持的字符函數(shù)和它們的Microsoft SQL Server等價(jià)函數(shù):

    函數(shù) Oracle Microsoft SQL Server

    把字符轉(zhuǎn)換為ASCII ASCII ASCII

    字串連接 CONCAT (expression + expression)

    把ASCII轉(zhuǎn)換為字符 CHR CHAR

    返回字符串中的開(kāi)始字符(左起) INSTR CHARINDEX

    把字符轉(zhuǎn)換為小寫(xiě) LOWER LOWER

    把字符轉(zhuǎn)換為大寫(xiě) UPPER UPPER

    填充字符串的左邊 LPAD N/A

    清除開(kāi)始的空白 LTRIM LTRIM

    清除尾部的空白 RTRIM RTRIM

    字符串中的起始模式(pattern) INSTR PATINDEX

    多次重復(fù)字符串 RPAD REPLICATE

    字符串的語(yǔ)音表示 SOUNDEX SOUNDEX

    重復(fù)空格的字串 RPAD SPACE

    從數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù) TO_CHAR STR

    子串 SUBSTR SUBSTRING

    替換字符 REPLACE STUFF

    將字串中的每個(gè)詞首字母大寫(xiě) INITCAP N/A

    翻譯字符串 TRANSLATE N/A

    字符串長(zhǎng)度 LENGTH DATELENGTH or LEN

    列表中最大的字符串 GREATEST N/A

    列表中最小的字符串 LEAST N/A

    如果為NULL則轉(zhuǎn)換字串 NVL ISNULL

     

    日期函數(shù)

    函數(shù) Oracle Microsoft SQL Server

    日期相加 (date column +/- value) or

    ADD_MONTHS DATEADD

    兩個(gè)日期的差 (date column +/- value) or

    MONTHS_BETWEEN DATEDIFF

    當(dāng)前日期和時(shí)間 SYSDATE GETDATE()

    一個(gè)月的最后一天 LAST_DAY N/A

    時(shí)區(qū)轉(zhuǎn)換 NEW_TIME N/A

    日期后的第一個(gè)周日 NEXT_DAY N/A

    代表日期的字符串 TO_CHAR DATENAME

    代表日期的整數(shù) TO_NUMBER

    (TO_CHAR)) DATEPART

    日期舍入 ROUND CONVERT

    日期截?cái)?TRUNC CONVERT

    字符串轉(zhuǎn)換為日期 TO_DATE CONVERT

    如果為NULL則轉(zhuǎn)換日期 NVL ISNULL

     

    轉(zhuǎn)換函數(shù)

    函數(shù) Oracle Microsoft SQL Server

    數(shù)字轉(zhuǎn)換為字符 TO_CHAR CONVERT

    字符轉(zhuǎn)換為數(shù)字 TO_NUMBER CONVERT

    日期轉(zhuǎn)換為字符 TO_CHAR CONVERT

    字符轉(zhuǎn)換為日期 TO_DATE CONVERT

    16進(jìn)制轉(zhuǎn)換為2進(jìn)制 HEX_TO_RAW CONVERT

    2進(jìn)制轉(zhuǎn)換為16進(jìn)制 RAW_TO_HEX CONVERT

     

    其它行級(jí)別的函數(shù)

    函數(shù) Oracle Microsoft SQL Server

    返回第一個(gè)非空表達(dá)式 DECODE COALESCE

    當(dāng)前序列值 CURRVAL N/A

    下一個(gè)序列值 NEXTVAL N/A

    如果exp1 = exp2, 返回null DECODE NULLIF

    用戶登錄賬號(hào)ID數(shù)字 UID SUSER_ID

    用戶登錄名 USER SUSER_NAME

    用戶數(shù)據(jù)庫(kù)ID數(shù)字 UID USER_ID

    用戶數(shù)據(jù)庫(kù)名 USER USER_NAME

    當(dāng)前用戶 CURRENT_USER CURRENT_USER

    用戶環(huán)境(audit trail) USERENV N/A

    在CONNECT BY子句中的級(jí)別 LEVEL N/A

     

    合計(jì)函數(shù)

    函數(shù) Oracle Microsoft SQL Server

    Average AVG AVG

    Count COUNT COUNT

    Maximum MAX MAX

    Minimum MIN MIN

    Standard deviation STDDEV STDEV or STDEVP

    Summation SUM SUM

    Variance VARIANCE VAR or VARP

    Oracle還有一個(gè)有用的函數(shù)EXTRACT,提取并且返回日期時(shí)間或時(shí)間間隔表達(dá)式中特定的時(shí)間域:

    EXTRACT(YEAR FROM 日期)

    T_SQL命令大全

    --語(yǔ) 句 功 能

    --數(shù)據(jù)操作

    SELECT --從數(shù)據(jù)庫(kù)表中檢索數(shù)據(jù)行和列

    INSERT --向數(shù)據(jù)庫(kù)表添加新數(shù)據(jù)行

    DELETE --從數(shù)據(jù)庫(kù)表中刪除數(shù)據(jù)行

    UPDATE --更新數(shù)據(jù)庫(kù)表中的數(shù)據(jù)

    --數(shù)據(jù)定義

    CREATE TABLE --創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)表

    DROP TABLE --從數(shù)據(jù)庫(kù)中刪除表

    ALTER TABLE --修改數(shù)據(jù)庫(kù)表結(jié)構(gòu)

    CREATE VIEW --創(chuàng)建一個(gè)視圖

    DROP VIEW --從數(shù)據(jù)庫(kù)中刪除視圖

    CREATE INDEX --為數(shù)據(jù)庫(kù)表創(chuàng)建一個(gè)索引

    DROP INDEX --從數(shù)據(jù)庫(kù)中刪除索引

    CREATE PROCEDURE --創(chuàng)建一個(gè)存儲(chǔ)過(guò)程

    DROP PROCEDURE --從數(shù)據(jù)庫(kù)中刪除存儲(chǔ)過(guò)程

    CREATE TRIGGER --創(chuàng)建一個(gè)觸發(fā)器

    DROP TRIGGER --從數(shù)據(jù)庫(kù)中刪除觸發(fā)器

    CREATE SCHEMA --向數(shù)據(jù)庫(kù)添加一個(gè)新模式

    DROP SCHEMA --從數(shù)據(jù)庫(kù)中刪除一個(gè)模式

    CREATE DOMAIN --創(chuàng)建一個(gè)數(shù)據(jù)值域

    ALTER DOMAIN --改變域定義

    DROP DOMAIN --從數(shù)據(jù)庫(kù)中刪除一個(gè)域

    --數(shù)據(jù)控制

    GRANT --授予用戶訪問(wèn)權(quán)限

    DENY --拒絕用戶訪問(wèn)

    REVOKE --解除用戶訪問(wèn)權(quán)限

    --事務(wù)控制

    COMMIT --結(jié)束當(dāng)前事務(wù)

    ROLLBACK --中止當(dāng)前事務(wù)

    SET TRANSACTION --定義當(dāng)前事務(wù)數(shù)據(jù)訪問(wèn)特征

    --程序化SQL

    DECLARE --為查詢?cè)O(shè)定游標(biāo)

    EXPLAN --為查詢描述數(shù)據(jù)訪問(wèn)計(jì)劃

    OPEN --檢索查詢結(jié)果打開(kāi)一個(gè)游標(biāo)

    FETCH --檢索一行查詢結(jié)果

    CLOSE --關(guān)閉游標(biāo)

    PREPARE --為動(dòng)態(tài)執(zhí)行準(zhǔn)備SQL 語(yǔ)句

    EXECUTE --動(dòng)態(tài)地執(zhí)行SQL 語(yǔ)句

    DESCRIBE --描述準(zhǔn)備好的查詢

     

    ---局部變量

    declare @id char(10)

    --set @id = '10010001'

    select @id = '10010001'

    ---全局變量

    ---必須以@@開(kāi)頭

    --IF ELSE

    declare @x int @y int @z int

    select @x = 1 @y = 2 @z=3

    if @x > @y

    print 'x > y' --打印字符串'x > y'

    else if @y > @z

    print 'y > z'

    else print 'z > y'

    --CASE

    use pangu

    update employee

    set e_wage =

    case

    when job_level = ’1’ then e_wage*1.08

    when job_level = ’2’ then e_wage*1.07

    when job_level = ’3’ then e_wage*1.06

    else e_wage*1.05

    end

    --WHILE CONTINUE BREAK

    declare @x int @y int @c int

    select @x = 1 @y=1

    while @x < 3

    begin

    print @x --打印變量x 的值

    while @y < 3

    begin

    select @c = 100*@x + @y

    print @c --打印變量c 的值

    select @y = @y + 1

    end

    select @x = @x + 1

    select @y = 1

    end

    --WAITFOR

    --例 等待1 小時(shí)2 分零3 秒后才執(zhí)行SELECT 語(yǔ)句

    waitfor delay ’01:02:03’

    select * from employee

    --例 等到晚上11 點(diǎn)零8 分后才執(zhí)行SELECT 語(yǔ)句

    waitfor time ’23:08:00’

    select * from employee

     

    ***SELECT***

    select *(列名) from table_name(表名) where column_name operator value

    ex 宿主)

    select * from stock_information where stockid = str(nid)

    stockname = 'str_name'

    stockname like '% find this %'

    stockname like '[a-zA-Z]%' --------- ([]指定值的范圍)

    stockname like '[^F-M]%' --------- (^排除指定范圍)

    --------- 只能在使用like關(guān)鍵字的where子句中使用通配符)

    or stockpath = 'stock_path'

    or stocknumber < 1000

    and stockindex = 24

    not stocksex = 'man'

    stocknumber between 20 and 100

    stocknumber in(10,20,30)

    order by stockid desc(asc) --------- 排序,desc-降序,asc-升序

    order by 1,2 --------- by列號(hào)

    stockname = (select stockname from stock_information where stockid = 4)

    --------- 子查詢

    --------- 除非能確保內(nèi)層select只返回一個(gè)行的值,

    --------- 否則應(yīng)在外層where子句中用一個(gè)in限定符

    select distinct column_name form table_name --------- distinct指定檢索獨(dú)有的列值,不重復(fù)

    select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name

    select stockname , "stocknumber" = count(*) from table_name group by stockname

    --------- group by 將表按行分組,指定列中有相同的值

    having count(*) = 2 --------- having選定指定的組

    select *

    from table1, table2

    where table1.id *= table2.id -------- 左外部連接,table1中有的而table2中沒(méi)有得以null表示

    table1.id =* table2.id -------- 右外部連接

    select stockname from table1

    union [all] ----- union合并查詢結(jié)果集,all-保留重復(fù)行

    select stockname from table2

    --STDEV()

    --STDEV()函數(shù)返回表達(dá)式中所有數(shù)據(jù)的標(biāo)準(zhǔn)差

    --STDEVP()

    --STDEVP()函數(shù)返回總體標(biāo)準(zhǔn)差

    --VAR()

    --VAR()函數(shù)返回表達(dá)式中所有值的統(tǒng)計(jì)變異數(shù)

    --VARP()

    --VARP()函數(shù)返回總體變異數(shù)

    ----算術(shù)函數(shù)----

    /***三角函數(shù)***/

    SIN(float_expression) --返回以弧度表示的角的正弦

    COS(float_expression) --返回以弧度表示的角的余弦

    TAN(float_expression) --返回以弧度表示的角的正切

    COT(float_expression) --返回以弧度表示的角的余切

    /***反三角函數(shù)***/

    ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角

    ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角

    ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角

    ATAN2(float_expression1,float_expression2)

    --返回正切是float_expression1 /float_expres-sion2的以弧度表示的角

    DEGREES(numeric_expression)

    --把弧度轉(zhuǎn)換為角度返回與表達(dá)式相同的數(shù)據(jù)類型可為

    --INTEGER/MONEY/REAL/FLOAT 類型

    RADIANS(numeric_expression) --把角度轉(zhuǎn)換為弧度返回與表達(dá)式相同的數(shù)據(jù)類型可為

    --INTEGER/MONEY/REAL/FLOAT 類型

    EXP(float_expression) --返回表達(dá)式的指數(shù)值

    LOG(float_expression) --返回表達(dá)式的自然對(duì)數(shù)值

    LOG10(float_expression)--返回表達(dá)式的以10 為底的對(duì)數(shù)值

    SQRT(float_expression) --返回表達(dá)式的平方根

    /***取近似值函數(shù)***/

    CEILING(numeric_expression) --返回>=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為

    --INTEGER/MONEY/REAL/FLOAT 類型

    FLOOR(numeric_expression) --返回<=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為

    --INTEGER/MONEY/REAL/FLOAT 類型

    ROUND(numeric_expression) --返回以integer_expression 為精度的四舍五入值返回的數(shù)據(jù)

    --類型與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT 類型

    ABS(numeric_expression) --返回表達(dá)式的絕對(duì)值返回的數(shù)據(jù)類型與表達(dá)式相同可為

    --INTEGER/MONEY/REAL/FLOAT 類型

    SIGN(numeric_expression) --測(cè)試參數(shù)的正負(fù)號(hào)返回0 零值1 正數(shù)或-1 負(fù)數(shù)返回的數(shù)據(jù)類型

    --與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT 類型

    PI() --返回值為π 即3.1415926535897936

    RAND([integer_expression]) --用任選的[integer_expression]做種子值得出0-1 間的隨機(jī)浮點(diǎn)數(shù)

    ----字符串函數(shù)----

    ASCII() --函數(shù)返回字符表達(dá)式最左端字符的ASCII 碼值

    CHAR() --函數(shù)用于將ASCII 碼轉(zhuǎn)換為字符

    --如果沒(méi)有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數(shù)會(huì)返回一個(gè)NULL 值

    LOWER() --函數(shù)把字符串全部轉(zhuǎn)換為小寫(xiě)

    UPPER() --函數(shù)把字符串全部轉(zhuǎn)換為大寫(xiě)

    STR() --函數(shù)把數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù)

    LTRIM() --函數(shù)把字符串頭部的空格去掉

    RTRIM() --函數(shù)把字符串尾部的空格去掉

    LEFT(),RIGHT(),SUBSTRING() --函數(shù)返回部分字符串

    CHARINDEX(),PATINDEX() --函數(shù)返回字符串中某個(gè)指定的子串出現(xiàn)的開(kāi)始位置

    SOUNDEX() --函數(shù)返回一個(gè)四位字符碼

    --SOUNDEX函數(shù)可用來(lái)查找聲音相似的字符串但SOUNDEX函數(shù)對(duì)數(shù)字和漢字均只返回0 值

    DIFFERENCE() --函數(shù)返回由SOUNDEX 函數(shù)返回的兩個(gè)字符表達(dá)式的值的差異

    --0 兩個(gè)SOUNDEX 函數(shù)返回值的第一個(gè)字符不同

    --1 兩個(gè)SOUNDEX 函數(shù)返回值的第一個(gè)字符相同

    --2 兩個(gè)SOUNDEX 函數(shù)返回值的第一二個(gè)字符相同

    --3 兩個(gè)SOUNDEX 函數(shù)返回值的第一二三個(gè)字符相同

    --4 兩個(gè)SOUNDEX 函數(shù)返回值完全相同

    QUOTENAME() --函數(shù)返回被特定字符括起來(lái)的字符串

    /*select quotename('abc', '{') quotename('abc')

    運(yùn)行結(jié)果如下

    ----------------------------------{

    {abc} [abc]*/

    REPLICATE() --函數(shù)返回一個(gè)重復(fù)character_expression 指定次數(shù)的字符串

    /*select replicate('abc', 3) replicate( 'abc', -2)

    運(yùn)行結(jié)果如下

    ----------- -----------

    abcabcabc NULL*/

    REVERSE() --函數(shù)將指定的字符串的字符排列順序顛倒

    REPLACE() --函數(shù)返回被替換了指定子串的字符串

    /*select replace('abc123g', '123', 'def')

    運(yùn)行結(jié)果如下

    ----------- -----------

    abcdefg*/

    SPACE() --函數(shù)返回一個(gè)有指定長(zhǎng)度的空白字符串

    STUFF() --函數(shù)用另一子串替換字符串指定位置長(zhǎng)度的子串

    ----數(shù)據(jù)類型轉(zhuǎn)換函數(shù)----

    CAST() 函數(shù)語(yǔ)法如下

    CAST() (<expression> AS <data_ type>[ length ])

    CONVERT() 函數(shù)語(yǔ)法如下

    CONVERT() (<data_ type>[ length ], <expression> [, style])

    select cast(100+99 as char) convert(varchar(12), getdate())

    運(yùn)行結(jié)果如下

    ------------------------------ ------------

    199 Jan 15 2000

    ----日期函數(shù)----

    DAY() --函數(shù)返回date_expression 中的日期值

    MONTH() --函數(shù)返回date_expression 中的月份值

    YEAR() --函數(shù)返回date_expression 中的年份值

    DATEADD(<datepart> ,<number> ,<date> )

    --函數(shù)返回指定日期date 加上指定的額外日期間隔number 產(chǎn)生的新日期

    DATEDIFF(<datepart> ,<number> ,<date> )

    --函數(shù)返回兩個(gè)指定日期在datepart 方面的不同之處

    DATENAME(<datepart> , <date> ) --函數(shù)以字符串的形式返回日期的指定部分

    DATEPART(<datepart> , <date> ) --函數(shù)以整數(shù)值的形式返回日期的指定部分

    GETDATE() --函數(shù)以DATETIME 的缺省格式返回系統(tǒng)當(dāng)前的日期和時(shí)間

    ----系統(tǒng)函數(shù)----

    APP_NAME() --函數(shù)返回當(dāng)前執(zhí)行的應(yīng)用程序的名稱

    COALESCE() --函數(shù)返回眾多表達(dá)式中第一個(gè)非NULL 表達(dá)式的值

    COL_LENGTH(<'table_name'>, <'column_name'> ) --函數(shù)返回表中指定字段的長(zhǎng)度值

    COL_NAME(<table_id>, <column_id> ) --函數(shù)返回表中指定字段的名稱即列名

    DATALENGTH() --函數(shù)返回?cái)?shù)據(jù)表達(dá)式的數(shù)據(jù)的實(shí)際長(zhǎng)度

    DB_ID(['database_name']) --函數(shù)返回?cái)?shù)據(jù)庫(kù)的編號(hào)

    DB_NAME(database_id) --函數(shù)返回?cái)?shù)據(jù)庫(kù)的名稱

    HOST_ID() --函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱

    HOST_NAME() --函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱

    IDENTITY(<data_type>[, seed increment]) [AS column_name]}

    --IDENTITY() 函數(shù)只在SELECT INTO 語(yǔ)句中使用用于插入一個(gè)identity column列到新表中

    /*select identity(int, 1, 1) as column_name

    into newtable

    from oldtable*/

    ISDATE() --函數(shù)判斷所給定的表達(dá)式是否為合理日期

    ISNULL(<check_expression>, <replacement_value> ) --函數(shù)將表達(dá)式中的NULL 值用指定值替換

    ISNUMERIC() --函數(shù)判斷所給定的表達(dá)式是否為合理的數(shù)值

    NEWID() --函數(shù)返回一個(gè)UNIQUEIDENTIFIER 類型的數(shù)值

    NULLIF(<expression1>, <expression2> )

    --NULLIF 函數(shù)在expression1 與expression2 相等時(shí)返回NULL 值若不相等時(shí)則返回expression1 的值

    附2:時(shí)間轉(zhuǎn)換函數(shù)
    convert(char,date,N)輸出的各中樣式
    convert(varchar(10),字段名,轉(zhuǎn)換格式)
    例:
    select id,convert(varchar(10),date,11) as date from sb

    N 日期樣式
    0 04 2 2005 9:06AM .....
    20 2005-04-02 09:06:18
    21 2005-04-02 09:06:18.857
    22 04/02/05 9:06:18 AM
    23 2005-04-02
    24 09:06:18
    25 2005-04-02 09:06:18.857
    100 04 2 2005 9:06AM
    101 04/02/2005
    102 2005.04.02
    103 02/04/2005
    104 02.04.2005
    105 02-04-2005

    108 09:06:18
    109 04 2 2005 9:06:18:857AM
    110 04-02-2005
    114 09:06:18:857
    120 2005-04-02 09:06:18
    121 2005-04-02 09:06:18.857
    126 2005-04-02T09:06:18.857   

    posted @ 2008-11-01 19:25 ourday 閱讀(693) | 評(píng)論 (0)編輯 收藏

    2008年10月11日 #

    JDK 是整個(gè)Java的核心,包括了Java運(yùn)行環(huán)境(Java Runtime Envirnment),一堆Java工具和Java基礎(chǔ)的類庫(kù)(rt.jar)。不論什么Java應(yīng)用服務(wù)器實(shí)質(zhì)都是內(nèi)置了某個(gè)版本的JDK。因此掌握 JDK是學(xué)好Java的第一步。最主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外,還有很多公司和組織都開(kāi)發(fā)了自己的JDK,例如IBM公司開(kāi)發(fā)的JDK,BEA公司的Jrocket,還有GNU組織開(kāi)發(fā)的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)運(yùn)行效率要比Sun JDK包含的JVM高出許多。而專門(mén)運(yùn)行在x86平臺(tái)的Jrocket在服務(wù)端運(yùn)行效率也要比Sun JDK好很多。但不管怎么說(shuō),我們還是需要先把Sun JDK掌握好。
    JDK(Java Development Kit,Java開(kāi)發(fā)包,Java開(kāi)發(fā)工具)是一個(gè)寫(xiě)Java的applet和應(yīng)用程序的程序開(kāi)發(fā)環(huán)境。它由一個(gè)處于操作系統(tǒng)層之上的運(yùn)行環(huán)境還有開(kāi)發(fā)者編譯,調(diào)試和運(yùn)行用Java語(yǔ)言寫(xiě)的applet和應(yīng)用程序所需的工具組成。
    JDK
    JDK(Java Development Kit)是Sun Microsystems針對(duì)Java開(kāi)發(fā)員的產(chǎn)品。自從Java推出以來(lái),JDK已經(jīng)成為使用最廣泛的Java SDK(Software development kit)。
    JDK包含的基本組件包括:
    ·javac – 編譯器,將源程序轉(zhuǎn)成字節(jié)碼
    ·jar – 打包工具,將相關(guān)的類文件打包成一個(gè)文件
    ·javadoc – 文檔生成器,從源碼注釋中提取文檔
    ·jdb – debugger,查錯(cuò)工具
    ·java – 運(yùn)行編譯后的java程序(.class后綴的)
    JDK中還包括各種例子程序,用以展示Java API中的各部分。
    從初學(xué)者角度來(lái)看,采用JDK開(kāi)發(fā)Java程序能夠很快理解程序中各部分代碼之間的關(guān)系,有利于理解Java面向?qū)ο蟮脑O(shè)計(jì)思想。JDK的另一個(gè)顯著特點(diǎn)是隨著Java (J2EE、J2SE以及J2ME)版本的升級(jí)而升級(jí)。但它的缺點(diǎn)也是非常明顯的就是從事大規(guī)模企業(yè)級(jí)Java應(yīng)用開(kāi)發(fā)非常困難,不能進(jìn)行復(fù)雜的Java軟件開(kāi)發(fā),也不利于團(tuán)體協(xié)同開(kāi)發(fā)。
    JDK一般有三種版本:
    SE(J2SE),standard edition,標(biāo)準(zhǔn)版,是我們通常用的一個(gè)版本
    EE(J2EE),enterpsise edtion,企業(yè)版,使用這種JDK開(kāi)發(fā)J2EE應(yīng)用程序,
    ME(J2ME),micro edtion,主要用于移動(dòng)設(shè)備、嵌入式設(shè)備上的java應(yīng)用程序
    Java開(kāi)發(fā)工具(JDK)是許多Java專家最初使用的開(kāi)發(fā)環(huán)境。盡管許多編程人員已經(jīng)使用第三方的開(kāi)發(fā)工具,但JDK仍被當(dāng)作Java開(kāi)發(fā)的重要工具。
    JDK由一個(gè)標(biāo)準(zhǔn)類庫(kù)和一組建立,測(cè)試及建立文檔的Java實(shí)用程序組成。其核心Java
    API是一些預(yù)定義的類庫(kù),開(kāi)發(fā)人員需要用這些類來(lái)訪問(wèn)Java語(yǔ)言的功能。Java API包括一些重要的語(yǔ)言結(jié)構(gòu)以及基本圖形,網(wǎng)絡(luò)和文件I/O。一般來(lái)說(shuō),Java API的非I/O部分對(duì)于運(yùn)行Java的所有平臺(tái)是相同的,而I/O部分則僅在通用Java環(huán)境中實(shí)現(xiàn)。
    作為JDK實(shí)用程序,工具庫(kù)中有七種主要程序。
    Javac:Java編譯器,將Java源代碼轉(zhuǎn)換成字節(jié)碼。
    Java:Java解釋器,直接從類文件執(zhí)行Java應(yīng)用程序字節(jié)代碼。
    appletviewer:小程序?yàn)g覽器,一種執(zhí)行HTML文件上的Java小程序的Java瀏覽器。
    Javadoc:根據(jù)Java源碼及說(shuō)明語(yǔ)句生成HTML文檔。
    Jdb:Java調(diào)試器,可以逐行執(zhí)行程序,設(shè)置斷點(diǎn)和檢查變量。
    Javah:產(chǎn)生可以調(diào)用Java過(guò)程的C過(guò)程,或建立能被Java程序調(diào)用的C過(guò)程的頭文件。
    Javap:Java反匯編器,顯示編譯類文件中的可訪問(wèn)功能和數(shù)據(jù),同時(shí)顯示字節(jié)代碼含義。
    posted @ 2008-10-11 10:43 ourday 閱讀(978) | 評(píng)論 (1)編輯 收藏

    javaMail API(1.3.2)
    http://java.sun.com/products/javamail/downloads/index.html
    javaBeans Activation Framework(1.0.2)
    http://www.javafan.net/down?ID=40&URL=1
    Apache上的javaMail開(kāi)發(fā)組件(commons-email-1.1):
    http://commons.apache.org
    JSValidation驗(yàn)證框架的官方網(wǎng)址為:
    http://cosoft.org.cn/projects/jsvalidation
    FCKeditor的網(wǎng)址:
    http://www.fckeditor.net/download
    SQL Server驅(qū)動(dòng)程序的下載地址:
    http://www.microsoft.com/downloads
    struts的官方網(wǎng)站:
    http://struts.apache.org/
    WebWork的官方網(wǎng)站:
    http://www.opensymphony.com/webwork/
    Spring的官方網(wǎng)站:
    http://www.springframework.org
    Jakarta Taglibs標(biāo)簽庫(kù):
    http://jakarta.apache.org/
    Display tag標(biāo)簽庫(kù):
    http://displaytag.sf.net/
    posted @ 2008-10-11 09:29 ourday 閱讀(306) | 評(píng)論 (0)編輯 收藏

    2008年10月2日 #

    超鏈接標(biāo)簽<A>的href屬性值除了可以使用前面講過(guò)的http和mailto等協(xié)議外,還可以使用javascript協(xié)議。
    <a href="javascript: alert(new Date());">javascript</a>
    單擊這個(gè)超鏈接,瀏覽器將會(huì)執(zhí)行javascript:后面的腳本程序代碼。

    作為屬性值的javascript腳本程的代碼的最后一條語(yǔ)句結(jié)尾處的分號(hào)可以省略。
    <input type=button value=test onclick="alert(new Date())">

    在javascript中也可以不事先聲明變量而直接使用。

    在使用內(nèi)聯(lián)樣式表時(shí),HTML4.01標(biāo)準(zhǔn)建議用戶在網(wǎng)頁(yè)的<head></head>標(biāo)簽之間增加一個(gè)<meta>標(biāo)簽,設(shè)置這個(gè)<meta>標(biāo)簽的http-equiv屬性值為Content-Style-Type,content屬性值為text/css。

    document對(duì)象的方法clear目前并沒(méi)有得到完全的支持,可以用document.write("");document.close();這兩條語(yǔ)句來(lái)實(shí)現(xiàn)與clear方法同樣的功能。

    js中能過(guò)+連接字符。如果用字符+數(shù)值會(huì)變成字符連接。

    dataA=(dataB=1,dataC=2,dataD=3)
    先執(zhí)行dataB=1;
    再執(zhí)行dataC=2;
    再執(zhí)行dataD=3;返回這個(gè)表達(dá)式的值

    delete myClassmate[2];刪除數(shù)組的第三個(gè)元素

    typeof()用于返回變量的類型.

    for...in對(duì)象循環(huán)語(yǔ)句可用來(lái)遍歷對(duì)象

    對(duì)象靜態(tài)變量的創(chuàng)建:在函數(shù)內(nèi)部寫(xiě)函數(shù)名.變量名.

    window對(duì)象發(fā)生事件的順序:load事件onfocus事件onblur事件
    其它事件:onresize事件onscroll事件

    文本框的事件有:onfocus\onblur\onchange\onselect

    document對(duì)象的集合all:返回對(duì)象所包含的元素集合的引用

    img標(biāo)簽的兩個(gè)鼠標(biāo)事件:onmouseover事件onmouseout事件

    form的onsubmit()用于直接提交表單.

    event的屬性type:從 event 對(duì)象中獲取事件名稱

    event的屬性srcElement:設(shè)置或獲取觸發(fā)事件的對(duì)象.

    event的屬性cancelBubble:設(shè)置或獲取當(dāng)前事件是否要在事件句柄中向上冒泡。

    body對(duì)象最常用的兩個(gè)事件:onselectstart和onscroll

    javascript的注釋:
    //這是單行注釋
    /*這是多行注釋
     *
     */


    javascript的常量通常又稱字面常量,它是不能改變的數(shù)據(jù),與基本的數(shù)據(jù)類型相對(duì)應(yīng).
    有以下幾種常量
    <1>整型常量
    可以使用十六進(jìn)制,八進(jìn)制和十進(jìn)制.十六進(jìn)制以O(shè)X或OX開(kāi)頭,八進(jìn)制以0開(kāi)頭,十進(jìn)制第一位不能是0.
    <2>實(shí)型常量
    有整數(shù)部分和小數(shù)部分.
    <3>布爾值
    有兩種值:true和false
    <4>字符串型常量
    javascript中沒(méi)有單獨(dú)的字符常量,而只有表示由若干字符所組成的字符串型常量.用''或""引起來(lái).
    字符串中的特殊字符要用反斜杠(\)后跟一個(gè)普通字符來(lái)表示.通過(guò)"+"把兩個(gè)字符串連起來(lái).
    <5>null常量
    表示一個(gè)變量所指向的對(duì)象為空值,"空"是一個(gè)有特殊意義的值。
    <6>undefined常量
    undefined常量用于表示變量還沒(méi)有被賦值的狀態(tài)或?qū)ο蟮哪硞€(gè)屬性不存在。變量的值還處于未知狀態(tài)。


    在變量是null,undefined 時(shí),在布爾環(huán)境中都為false.
    不管何時(shí),只要對(duì)象非空,在布爾環(huán)境中都為true.
    參數(shù)個(gè)數(shù)可變的函數(shù):在取傳給函數(shù)的參數(shù)時(shí),可能通過(guò)循環(huán)arguments取出傳的值。
    創(chuàng)建動(dòng)態(tài)函數(shù):
    <script language="javascript">
    var suqare = new Function("x","y","var sum;sum=x*x+y*y;return sum;");
    alert(square(3,2));
    </script>


    系統(tǒng)函數(shù):
    encodeURI 方法返回一個(gè)編碼的 URI。如果您將編碼結(jié)果傳遞給 decodeURI,那么將返回初始的字符串。

    encodeURI 方法不會(huì)對(duì)下列字符進(jìn)行編碼:":"、"/"、";" 和 "?"。請(qǐng)使用 encodeURIComponent 方法對(duì)

    這些字符進(jìn)行編碼。
    decodeURI方法將一個(gè)已編碼的URI字符串解碼.
    escape 方法返回一個(gè)包含了 charstring 內(nèi)容的字符串值( Unicode 格式)。所有空格、標(biāo)點(diǎn)、重音符

    號(hào)以及其他非 ASCII 字符都用 %xx 編碼代替,其中 xx 等于表示該字符的十六進(jìn)制數(shù)。例如,空格返回

    的是 "%20" 。
    unescape與上相反.
    eval方法將某個(gè)參數(shù)字符串作為一個(gè)javascript表達(dá)式執(zhí)行.

    對(duì)象與對(duì)象實(shí)例:
    通過(guò)function創(chuàng)建對(duì)象:
    function Person(){
    }
    通過(guò)new 實(shí)例化一個(gè)對(duì)象:
    var person1 = new Person();
    通過(guò)對(duì)象名.變量名=XXX;為對(duì)象增加屬性或方法.
    person1.age = 19;
    person1.say = sayFunc();
    通過(guò)用"對(duì)象實(shí)例名[屬性名字符串]"的格式來(lái)訪問(wèn)某個(gè)對(duì)象實(shí)例的屬性.例如person1.name可以寫(xiě)成

    person1["name"]來(lái)引用.
    this關(guān)鍵字一般只在用作對(duì)象成員方法的函數(shù)中出現(xiàn),它代表某個(gè)成員方法執(zhí)行時(shí),引用該方法的當(dāng)前對(duì)象

    實(shí)例.在對(duì)象的構(gòu)造方法使用"this.成員名"的形式,可以為該對(duì)象的每個(gè)對(duì)象實(shí)例都增加新的成員.
    <script>
     function Person(name,age)
     {
      this.age = age;
      this.name = name;
      this.say = sayFunc;
     }
     function sayFunc()
     {
      alert(this.name + ":" + this.age);
     }
     var person1 = new Person("zhangsan",18);
     person1.say();
     var person2 = new Person("lisi",20);
     person2.say();
    </script>
    內(nèi)部對(duì)象:
    javascript中內(nèi)部對(duì)象,按使用方式可分為兩種情況:一種是動(dòng)態(tài)對(duì)象,在引用它的屬性和方法時(shí),必須使用

    new關(guān)鍵字創(chuàng)建一個(gè)對(duì)象實(shí)例,然后使用"對(duì)象實(shí)例名.成員"的格式來(lái)訪問(wèn)其屬性和方法.另一種是靜態(tài)的對(duì)

    象,在引用對(duì)象的屬性和方法時(shí)不需要使用new關(guān)鍵字創(chuàng)建對(duì)象實(shí)例,直接使用"對(duì)象名.成員"的格式來(lái)訪問(wèn)

    其屬性和方法.
    Object對(duì)象
    對(duì)象的屬性也可以使用索引運(yùn)算符"[]"訪問(wèn).
    String對(duì)象
    Math對(duì)象
    Date對(duì)象
    專門(mén)用于對(duì)象的語(yǔ)句:
    with(對(duì)象名稱)
    {
     執(zhí)行語(yǔ)句塊
    }
    如果一段連續(xù)的程序代碼中,多次使用到了某個(gè)對(duì)象的許多屬性或方法,那么,只要在with關(guān)鍵字后的小括

    號(hào)中定出這個(gè)對(duì)象的名稱,然后就可以在隨后的大括號(hào)中的執(zhí)行語(yǔ)句里直接引用該對(duì)象的屬性名或方法名,

    不必再在每個(gè)屬性和方法名前都加上對(duì)象實(shí)例名和點(diǎn)(.)了.
    for(變量in對(duì)象
    {
     執(zhí)行語(yǔ)句
    }
    該語(yǔ)句的功能是用于對(duì)某個(gè)對(duì)象的所有屬性進(jìn)行循操作,它將一個(gè)對(duì)象的所有屬性名稱逐一賦給一個(gè)變量,

    根本不需要事先知道對(duì)象屬性的個(gè)數(shù).
    數(shù)組:
    就是用一個(gè)變量來(lái)表示一組數(shù)據(jù)的集合,實(shí)現(xiàn)對(duì)這組數(shù)據(jù)的統(tǒng)一管理,數(shù)組中的每一個(gè)數(shù)據(jù)也叫數(shù)組的一個(gè)

    元素.
    var arr=["zs",124,"li",3.5];
    數(shù)組列表的每個(gè)元素既可以是有效的javascript表達(dá)式,也可以為空(兩個(gè)相連的逗號(hào)).如果數(shù)組中的某個(gè)

    元素為空,該元素的值為undefined.
    var arr = [1,,,,5];
    如果數(shù)組元素本身又是數(shù)組,這就叫數(shù)組的數(shù)組.
    var arr=[["Names","Beansprout","Pumpkin"],["Ages",5,3,2]];
    可以使用"數(shù)組變量名[子數(shù)組索引號(hào)][子數(shù)組中的元素索引號(hào)]"的格式來(lái)訪問(wèn)數(shù)組的數(shù)組中的元素.
    Array對(duì)象:
    javascript中也提供了一個(gè)叫Array的內(nèi)部對(duì)象來(lái)創(chuàng)建數(shù)組,通過(guò)調(diào)用Array對(duì)象的各種方法,可以方便地對(duì)

    數(shù)組進(jìn)行排序,刪除,合并等操作.

    DOM編程:
    程序中創(chuàng)建的對(duì)象用來(lái)描述現(xiàn)實(shí)世界中有形或無(wú)形的事物,javascript也將瀏覽器本身,網(wǎng)頁(yè)文檔以及網(wǎng)頁(yè)

    文檔中的HTML元素等都用相應(yīng)的內(nèi)置對(duì)象來(lái)表示,其中的一些對(duì)象是作為另外的一些對(duì)象的屬性而存在的,

    這些對(duì)象及對(duì)象之間的層次關(guān)系統(tǒng)稱為DOM.
    如何編寫(xiě)事件處理程序:
    1.在事件源對(duì)象所對(duì)應(yīng)的HTML標(biāo)簽上增加一個(gè)要處理的事件屬性,讓事件屬性值等于處理該事件的函數(shù)名

    或程序代碼.
    <html>
    <head>
    <script language="javascript">
    <!--
     function hideContextmenu(){
      return false;
     }
    //-->
    </script>
    </head>
    <body oncontextmenu="return hideContextmenu()">
    </body>
    </html>
    2.直接在javascript代碼中,設(shè)置元素對(duì)象的事件屬性,讓事件屬性等于處理該事件的函數(shù)名或程序代碼.
    <script language="javascript">
    <!--
     document.oncontextmenu=hideContextmenu;
     function hideContextmenu(){
      return false;
     }
    //-->
    </script>

    3.在一個(gè)專門(mén)的<script>標(biāo)簽對(duì)中編寫(xiě)某個(gè)元素對(duì)象的某種事件處理程序代碼,并用for屬性指定事件源和

    用event屬性指定事件名,這種<script>標(biāo)簽中的腳本程序只在指定的事件源的指定事件發(fā)生時(shí)才被調(diào)用執(zhí)

    行.
    <script language="javascript" for="document" event="oncontextmenu">
     window.event.returnValue = false;
    </script>


    window對(duì)象
    window對(duì)象的屬性:
    location對(duì)象:
    event對(duì)象:
    frames數(shù)組對(duì)象:
    screen對(duì)象:
    clipboardDate對(duì)象:
    history對(duì)象:
    navigator對(duì)象:
    document對(duì)象:
    document對(duì)象代表瀏覽器窗口中裝載的整個(gè)HTML文檔,文檔中的每個(gè)HTML元素都可以用一個(gè)javascript對(duì)

    象來(lái)與之對(duì)應(yīng),代表HTML元素的對(duì)象在javascript中都是作為document對(duì)象的直接或間接屬性被引用的.
    body對(duì)象的對(duì)象屬性:
    form對(duì)象:
    注意:item方法,返回代表Form表單中的某個(gè)表單字段元素所對(duì)應(yīng)的對(duì)象,接受的參數(shù)可以是表單字段元素

    的名稱,也可以是表單字段元素在Form表單中的索引序號(hào).item方法不能返回<input type="image....>類

    型的表單字段元素.

     

     

     

    posted @ 2008-10-02 14:52 ourday 閱讀(504) | 評(píng)論 (0)編輯 收藏

    2008年9月20日 #

       

    1.request對(duì)象

        客戶端的請(qǐng)求信息被封裝在request對(duì)象中,通過(guò)它才能了解到客戶的需求,然后做出響應(yīng)。它是HttpServletRequest類的實(shí)例。

    序號(hào) 方 法 說(shuō) 明
    1 object getAttribute(String name) 返回指定屬性的屬性值
    2 Enumeration getAttributeNames() 返回所有可用屬性名的枚舉
    3 String getCharacterEncoding() 返回字符編碼方式
    4 int getContentLength() 返回請(qǐng)求體的長(zhǎng)度(以字節(jié)數(shù))
    5 String getContentType() 得到請(qǐng)求體的MIME類型
    6 ServletInputStream getInputStream() 得到請(qǐng)求體中一行的二進(jìn)制流
    7 String getParameter(String name) 返回name指定參數(shù)的參數(shù)值
    8 Enumeration getParameterNames() 返回可用參數(shù)名的枚舉
    9 String[] getParameterValues(String name) 返回包含參數(shù)name的所有值的數(shù)組
    10 String getProtocol() 返回請(qǐng)求用的協(xié)議類型及版本號(hào)
    11 String getScheme() 返回請(qǐng)求用的計(jì)劃名,如:http.https及ftp等
    12 String getServerName() 返回接受請(qǐng)求的服務(wù)器主機(jī)名
    13 int getServerPort() 返回服務(wù)器接受此請(qǐng)求所用的端口號(hào)
    14 BufferedReader getReader() 返回解碼過(guò)了的請(qǐng)求體
    15 String getRemoteAddr() 返回發(fā)送此請(qǐng)求的客戶端IP地址
    16 String getRemoteHost() 返回發(fā)送此請(qǐng)求的客戶端主機(jī)名
    17 void setAttribute(String key,Object obj) 設(shè)置屬性的屬性值
    18 String getRealPath(String path) 返回一虛擬路徑的真實(shí)路徑
    19    
    20    
         

    <%@ page contentType="text/html;charset=gb2312"%>
    <%request.setCharacterEncoding("gb2312");%>
    <html>
    <head>
    <title>request
    對(duì)象_1</title>
    </head>
    <body bgcolor="#FFFFF0">
    <form action="" method="post">
    <input type="text" name="qwe">
    <input type="submit" value="
    提交">
    </form>
    請(qǐng)求方式:<%=request.getMethod()%><br>
    請(qǐng)求的資源:<%=request.getRequestURI()%><br>
    請(qǐng)求用的協(xié)議:<%=request.getProtocol()%><br>
    請(qǐng)求的文件名:<%=request.getServletPath()%><br>
    請(qǐng)求的服務(wù)器的IP<%=request.getServerName()%><br>
    請(qǐng)求服務(wù)器的端口:<%=request.getServerPort()%><br>
    客戶端IP地址:<%=request.getRemoteAddr()%><br>
    客戶端主機(jī)名:<%=request.getRemoteHost()%><br>
    表單提交來(lái)的值:<%=request.getParameter("qwe")%><br>
    </body>
    </html>
    <%@ page contentType="text/html;charset=gb2312"%>
    <%request.setCharacterEncoding("gb2312");%>
    <%@ page import="java.util.Enumeration"%>
    <html>
    <head>
    <title>request
    對(duì)象_2</title>
    </head>
    <body bgcolor="#FFFFF0">
    <form action="" method="post">
      
    用戶名:<input type="text" name="username">&nbsp;&nbsp;
      
    碼:<input type="text" name="userpass">&nbsp;&nbsp;
       <input type="submit" value="
    進(jìn)入" >
    </form>
    <%
    String str="";
    if(request.getParameter("username")!=null && request.getParameter("userpass")!=null){
       Enumeration enumt = request.getParameterNames();
       while(enumt.hasMoreElements()){
          str=enumt.nextElement().toString();
          out.println(str+":"+request.getParameter(str)+"<br>");
       }
    }
    %>
    </body>
    </html>
    <%@ page contentType="text/html;charset=gb2312"%>
    <%request.setCharacterEncoding("gb2312");%>
    <html>
    <head>
       <title>request
    對(duì)象_3</title>
    </head>
    <body bgcolor="#FFFFF0">
    <form action="" method="post">
    擅長(zhǎng):<input type="checkbox" name="cb" value="ON1">VC++&nbsp;
           <input type="checkbox" name="cb" value="ON2">JAVA&nbsp;
           <input type="checkbox" name="cb" value="ON3">DELPHI&nbsp;
           <input type="checkbox" name="cb" value="ON4">VB&nbsp;
           <br>
           <input type="submit" value="
    進(jìn)入" name="qwe">
    </form>
    <%
    if(request.getParameter("qwe")!=null ){
       for(int i=0;i<request.getParameterValues("cb").length;i++){
          out.println("cb"+i+":"+request.getParameterValues("cb")[i]+"<br>");
       }
       out.println(request.getParameter("qwe"));
    }
    %>
    </body>
    </html>
     

     

    2.response對(duì)象

        response對(duì)象包含了響應(yīng)客戶請(qǐng)求的有關(guān)信息,但在JSP中很少直接用到它。它是HttpServletResponse類的實(shí)例。

    序號(hào) 方 法 說(shuō) 明
    1 String getCharacterEncoding() 返回響應(yīng)用的是何種字符編碼
    2 ServletOutputStream getOutputStream() 返回響應(yīng)的一個(gè)二進(jìn)制輸出流
    3 PrintWriter getWriter() 返回可以向客戶端輸出字符的一個(gè)對(duì)象
    4 void setContentLength(int len) 設(shè)置響應(yīng)頭長(zhǎng)度
    5 void setContentType(String type) 設(shè)置響應(yīng)的MIME類型
    6 sendRedirect(java.lang.String location) 重新定向客戶端的請(qǐng)求
    7    
    8    
         

    3.session對(duì)象

        session對(duì)象指的是客戶端與服務(wù)器的一次會(huì)話,從客戶連到服務(wù)器的一個(gè)WebApplication開(kāi)始,直到客戶端與服務(wù)器斷開(kāi)連接為止。它是HttpSession類的實(shí)例.

    序號(hào) 方 法 說(shuō) 明
    1 long getCreationTime() 返回SESSION創(chuàng)建時(shí)間
    2 public String getId() 返回SESSION創(chuàng)建時(shí)JSP引擎為它設(shè)的惟一ID號(hào)
    3 long getLastAccessedTime() 返回此SESSION里客戶端最近一次請(qǐng)求時(shí)間
    4 int getMaxInactiveInterval() 返回兩次請(qǐng)求間隔多長(zhǎng)時(shí)間此SESSION被取消(ms)
    5 String[] getValueNames() 返回一個(gè)包含此SESSION中所有可用屬性的數(shù)組
    6 void invalidate() 取消SESSION,使SESSION不可用
    7 boolean isNew() 返回服務(wù)器創(chuàng)建的一個(gè)SESSION,客戶端是否已經(jīng)加入
    8 void removeValue(String name) 刪除SESSION中指定的屬性
    9 void setMaxInactiveInterval() 設(shè)置兩次請(qǐng)求間隔多長(zhǎng)時(shí)間此SESSION被取消(ms)
    10    
    11    
    12    
    13    
    14    
    15    
         

    <%@ page contentType="text/html;charset=gb2312"%>
    <%@ page import="java.util.*" %>
    <html>
    <head><title>session對(duì)象_例1</title><head>
    <body><br>
       session的創(chuàng)建時(shí)間:<%=session.getCreationTime()%>&nbsp;&nbsp;<%=new Date(session.getCreationTime())%><br><br>
       session的Id號(hào):<%=session.getId()%><br><br>
       客戶端最近一次請(qǐng)求時(shí)間:<%=session.getLastAccessedTime()%>&nbsp;&nbsp;<%=new java.sql. Time(session.getLastAccessedTime())%><br><br>
       兩次請(qǐng)求間隔多長(zhǎng)時(shí)間此SESSION被取消(ms):<%=session.getMaxInactiveInterval()%><br><br>
       是否是新創(chuàng)建的一個(gè)SESSION:<%=session.isNew()?"是":"否"%><br><br>
    <%
    session.putValue("name","霖苑編程");
    session.putValue("nmber","147369");
    %>
    <%
    for(int i=0;i<session.getValueNames().length;i++)
    out.println(session.getValueNames()[i]+"="+session.getValue(session.getValueNames()[i]));
    %>
    <!--返回的是從格林威治時(shí)間(GMT)1970年01月01日0:00:00起到計(jì)算當(dāng)時(shí)的毫秒數(shù)-->
    </body>
    </html>


    4.out對(duì)象

        out對(duì)象是JspWriter類的實(shí)例,是向客戶端輸出內(nèi)容常用的對(duì)象

    序號(hào) 方 法 說(shuō) 明
    1 void clear() 清除緩沖區(qū)的內(nèi)容
    2 void clearBuffer() 清除緩沖區(qū)的當(dāng)前內(nèi)容
    3 void flush() 清空流
    4 int getBufferSize() 返回緩沖區(qū)以字節(jié)數(shù)的大小,如不設(shè)緩沖區(qū)則為0
    5 int getRemaining() 返回緩沖區(qū)還剩余多少可用
    6 boolean isAutoFlush() 返回緩沖區(qū)滿時(shí),是自動(dòng)清空還是拋出異常
    7 void close() 關(guān)閉輸出流
    8    
    9    
    10    
    11    
    12    
    13    
    14    
    15    
         

    <%@page contentType="text/html;charset=gb2312"%>
    <html><head><title>out對(duì)象_例1:緩存測(cè)試</title></head>
    <%@page buffer="1kb"%>
    <body>
    <%
    for(int i=0;i<2000;i++)
    out.println(i+"{"+out.getRemaining()+"}");
    %><br>
    緩存大小:<%=out.getBufferSize()%><br>
    剩余緩存大小:<%=out.getRemaining()%><br>
    自動(dòng)刷新:<%=out.isAutoFlush()%><br>
    <%--out.clearBuffer();--%>
    <%--out.clear();--%>
    <!--缺省情況下:服務(wù)端要輸出到客戶端的內(nèi)容,不直接寫(xiě)到客戶端,而是先寫(xiě)到一個(gè)輸出緩沖區(qū)中.只有在下面三中情況下,才會(huì)把該緩沖區(qū)的內(nèi)容輸出到客戶端上:
    1.該JSP網(wǎng)頁(yè)已完成信息的輸出
    2.輸出緩沖區(qū)已滿
    3.JSP中調(diào)用了out.flush()或response.flushbuffer()
    -->
    </body>
    </html>


    5.page對(duì)象

        page對(duì)象就是指向當(dāng)前JSP頁(yè)面本身,有點(diǎn)象類中的this指針,它是java.lang.Object類的實(shí)例

    序號(hào) 方 法 說(shuō) 明
    1 class getClass 返回此Object的類
    2 int hashCode() 返回此Object的hash碼
    3 boolean equals(Object obj) 判斷此Object是否與指定的Object對(duì)象相等
    4 void copy(Object obj) 把此Object拷貝到指定的Object對(duì)象中
    5 Object clone() 克隆此Object對(duì)象
    6 String toString() 把此Object對(duì)象轉(zhuǎn)換成String類的對(duì)象
    7 void notify() 喚醒一個(gè)等待的線程
    8 void notifyAll() 喚醒所有等待的線程
    9 void wait(int timeout) 使一個(gè)線程處于等待直到timeout結(jié)束或被喚醒
    10 void wait() 使一個(gè)線程處于等待直到被喚醒
    11 void enterMonitor() 對(duì)Object加鎖
    12 void exitMonitor() 對(duì)Object開(kāi)鎖
    13    
    14    
    15    
         

    6.application對(duì)象

        application對(duì)象實(shí)現(xiàn)了用戶間數(shù)據(jù)的共享,可存放全局變量。它開(kāi)始于服務(wù)器的啟動(dòng),直到服務(wù)器的關(guān)閉,在此期間,此對(duì)象將一直存在;這樣在用戶的前后連接或不同用戶之間的連接中,可以對(duì)此對(duì)象的同一屬性進(jìn)行操作;在任何地方對(duì)此對(duì)象屬性的操作,都將影響到其他用戶對(duì)此的訪問(wèn)。服務(wù)器的啟動(dòng)和關(guān)閉決定了application對(duì)象的生命。它是ServletContext類的實(shí)例。

    序號(hào) 方 法 說(shuō) 明
    1 Object getAttribute(String name) 返回給定名的屬性值
    2 Enumeration getAttributeNames() 返回所有可用屬性名的枚舉
    3 void setAttribute(String name,Object obj) 設(shè)定屬性的屬性值
    4 void removeAttribute(String name) 刪除一屬性及其屬性值
    5 String getServerInfo() 返回JSP(SERVLET)引擎名及版本號(hào)
    6 String getRealPath(String path) 返回一虛擬路徑的真實(shí)路徑
    7 ServletContext getContext(String uripath) 返回指定WebApplication的application對(duì)象
    8 int getMajorVersion() 返回服務(wù)器支持的Servlet API的最大版本號(hào)
    9 int getMinorVersion() 返回服務(wù)器支持的Servlet API的最大版本號(hào)
    10 String getMimeType(String file) 返回指定文件的MIME類型
    11 URL getResource(String path) 返回指定資源(文件及目錄)的URL路徑
    12 InputStream getResourceAsStream(String path) 返回指定資源的輸入流
    13 RequestDispatcher getRequestDispatcher(String uripath) 返回指定資源的RequestDispatcher對(duì)象
    14 Servlet getServlet(String name) 返回指定名的Servlet
    15 Enumeration getServlets() 返回所有Servlet的枚舉
    16 Enumeration getServletNames() 返回所有Servlet名的枚舉
    17 void log(String msg) 把指定消息寫(xiě)入Servlet的日志文件
    18 void log(Exception exception,String msg) 把指定異常的棧軌跡及錯(cuò)誤消息寫(xiě)入Servlet的日志文件
    19 void log(String msg,Throwable throwable) 把棧軌跡及給出的Throwable異常的說(shuō)明信息寫(xiě)入Servlet的日志文件
    20    
         

    <%@ page contentType="text/html;charset=gb2312"%>
    <html>
    <head><title>APPLICATION對(duì)象_例1</title><head>
    <body><br>
    JSP(SERVLET)引擎名及版本號(hào):<%=application.getServerInfo()%><br><br>
    返回/application1.jsp虛擬路徑的真實(shí)路徑:<%=application.getRealPath("/application1.jsp")%><br><br>
    服務(wù)器支持的Servlet API的大版本號(hào):<%=application.getMajorVersion()%><br><br>
    服務(wù)器支持的Servlet API的小版本號(hào):<%=application.getMinorVersion()%><br><br>
    指定資源(文件及目錄)的URL路徑:<%=application.getResource("/application1.jsp")%><br><br><!--可以將application1.jsp換成一個(gè)目錄-->
    <br><br>
    <%
    application.setAttribute("name","霖苑計(jì)算機(jī)編程技術(shù)培訓(xùn)學(xué)校");
    out.println(application.getAttribute("name"));
    application.removeAttribute("name");
    out.println(application.getAttribute("name"));
    %>
    </body>
    </html>
    <%@ page contentType="text/html;charset=gb2312"%>
    <html>
    <head><title>APPLICATION對(duì)象_例2</title><head>
    <body><br>
    <!--由于application一直存在于服務(wù)器端,可以利用此特性對(duì)網(wǎng)頁(yè)記數(shù)-->
    <%
    if(application.getAttribute("count")==null)
    application.setAttribute("count","1");
    else
    application.setAttribute("count",Integer.toString(Integer.valueOf(application.getAttribute("count").toString()).intValue()+1));
    %>
    你是第<%=application.getAttribute("count")%>位訪問(wèn)者
    </body>
    <!--由于getAttribute()方法得到的是一個(gè)Object類型對(duì)象,用getString()方法轉(zhuǎn)化為String類型-->
    <!--用Integer類的valueOf()方法把得到的String轉(zhuǎn)化成Integer的對(duì)象,在用intValue()方法得到int型,再加1,最后把計(jì)算的結(jié)果用Integer.toString()方法轉(zhuǎn)化成setAttribute()方法所要求的String類型-->
    </html>
    <%@ page contentType="text/html;charset=gb2312"%>
    <html>
    <head><title>APPLICATION對(duì)象_例3</title><head>
    <body><br>
    <!--由于application一直存在于服務(wù)器端,可以利用此特性對(duì)網(wǎng)頁(yè)記數(shù)-->
    <%
    String str=application.getAttribute("count").toString();//getAttribute("count")返回的是Object類型
    int i=0;
    if(str==null)
    application.setAttribute("count","1");
    else
    i=Integer.parseInt(str); //out.println(i);
    application.setAttribute("count",++i+"");
    %>
    你是第<%=application.getAttribute("count")%>位訪問(wèn)者
    </body>
    </html>

    7.exception對(duì)象

    exception對(duì)象是一個(gè)例外對(duì)象,當(dāng)一個(gè)頁(yè)面在運(yùn)行過(guò)程中發(fā)生了例外,就產(chǎn)生這個(gè)對(duì)象。如果一個(gè)JSP頁(yè)面要應(yīng)用此對(duì)象,就必須把isErrorPage設(shè)為true,否則無(wú)法編譯。他實(shí)際上是java.lang.Throwable的對(duì)象

    序號(hào) 方 法 說(shuō) 明
    1 String getMessage() 返回描述異常的消息
    2 String toString() 返回關(guān)于異常的簡(jiǎn)短描述消息
    3 void printStackTrace() 顯示異常及其棧軌跡
    4 Throwable FillInStackTrace() 重寫(xiě)異常的執(zhí)行棧軌跡
    5    
         

    8.pageContext對(duì)象

       pageContext對(duì)象提供了對(duì)JSP頁(yè)面內(nèi)所有的對(duì)象及名字空間的訪問(wèn),也就是說(shuō)他可以訪問(wèn)到本頁(yè)所在的SESSION,也可以取本頁(yè)面所在的application的某一屬性值,他相當(dāng)于頁(yè)面中所有功能的集大成者,它的本類名也叫pageContext。

    序號(hào) 方 法 說(shuō) 明
    1 JspWriter getOut() 返回當(dāng)前客戶端響應(yīng)被使用的JspWriter流(out)
    2 HttpSession getSession() 返回當(dāng)前頁(yè)中的HttpSession對(duì)象(session)
    3 Object getPage() 返回當(dāng)前頁(yè)的Object對(duì)象(page)
    4 ServletRequest getRequest() 返回當(dāng)前頁(yè)的ServletRequest對(duì)象(request)
    5 ServletResponse getResponse() 返回當(dāng)前頁(yè)的ServletResponse對(duì)象(response)
    6 Exception getException() 返回當(dāng)前頁(yè)的Exception對(duì)象(exception)
    7 ServletConfig getServletConfig() 返回當(dāng)前頁(yè)的ServletConfig對(duì)象(config)
    8 ServletContext getServletContext() 返回當(dāng)前頁(yè)的ServletContext對(duì)象(application)
    9 void setAttribute(String name,Object attribute) 設(shè)置屬性及屬性值
    10 void setAttribute(String name,Object obj,int scope) 在指定范圍內(nèi)設(shè)置屬性及屬性值
    11 public Object getAttribute(String name) 取屬性的值
    12 Object getAttribute(String name,int scope) 在指定范圍內(nèi)取屬性的值
    13 public Object findAttribute(String name) 尋找一屬性,返回起屬性值或NULL
    14 void removeAttribute(String name) 刪除某屬性
    15 void removeAttribute(String name,int scope) 在指定范圍刪除某屬性
    16 int getAttributeScope(String name) 返回某屬性的作用范圍
    17 Enumeration getAttributeNamesInScope(int scope) 返回指定范圍內(nèi)可用的屬性名枚舉
    18 void release() 釋放pageContext所占用的資源
    19 void forward(String relativeUrlPath) 使當(dāng)前頁(yè)面重導(dǎo)到另一頁(yè)面
    20 void include(String relativeUrlPath) 在當(dāng)前位置包含另一文件
    21    
         
          

    <%@page contentType="text/html;charset=gb2312"%>
    <html><head><title>pageContext對(duì)象_例1</title></head>
    <body><br>
    <%
    request.setAttribute("name","霖苑編程");
    session.setAttribute("name","霖苑計(jì)算機(jī)編程技術(shù)培訓(xùn)");
    //session.putValue("name","計(jì)算機(jī)編程");
    application.setAttribute("name","培訓(xùn)");
    %>
    request設(shè)定的值:<%=pageContext.getRequest().getAttribute("name")%><br>
    session設(shè)定的值:<%=pageContext.getSession().getAttribute("name")%><br>
    application設(shè)定的值:<%=pageContext.getServletContext().getAttribute("name")%><br>
    范圍1內(nèi)的值:<%=pageContext.getAttribute("name",1)%><br>
    范圍2內(nèi)的值:<%=pageContext.getAttribute("name",2)%><br>
    范圍3內(nèi)的值:<%=pageContext.getAttribute("name",3)%><br>
    范圍4內(nèi)的值:<%=pageContext.getAttribute("name",4)%><br>
    <!--從最小的范圍page開(kāi)始,然后是reques、session以及application-->
    <%pageContext.removeAttribute("name",3);%>
    pageContext修改后的session設(shè)定的值:<%=session.getValue("name")%><br>
    <%pageContext.setAttribute("name","應(yīng)用技術(shù)培訓(xùn)",4);%>
    pageContext修改后的application設(shè)定的值:<%=pageContext.getServletContext().getAttribute("name")%><br>
    值的查找:<%=pageContext.findAttribute("name")%><br>
    屬性name的范圍:<%=pageContext.getAttributesScope("name")%><br>
    </body></html>

    9.config對(duì)象

       config對(duì)象是在一個(gè)Servlet初始化時(shí),JSP引擎向它傳遞信息用的,此信息包括Servlet初始化時(shí)所要用到的參數(shù)(通過(guò)屬性名和屬性值構(gòu)成)以及服務(wù)器的有關(guān)信息(通過(guò)傳遞一個(gè)ServletContext對(duì)象)

    序號(hào) 方 法 說(shuō) 明
    1 ServletContext getServletContext() 返回含有服務(wù)器相關(guān)信息的ServletContext對(duì)象
    2 String getInitParameter(String name) 返回初始化參數(shù)的值
    3 Enumeration getInitParameterNames() 返回Servlet初始化所需所有參數(shù)的枚舉
    4    
    5   

    posted @ 2008-09-20 11:45 ourday 閱讀(820) | 評(píng)論 (1)編輯 收藏

    九大對(duì)象:

    內(nèi)置對(duì)象(又叫隱含對(duì)象,有9個(gè)內(nèi)置對(duì)象):不需要預(yù)先聲明就可以在腳本代碼和表達(dá)式中隨意使用

    1-out:

     javax.servlet.jsp.JspWriter類型,代表輸出流的對(duì)象。作用域?yàn)閜age(頁(yè)面執(zhí)行期)

    request:javax.servlet.ServletRequest的子類型,此對(duì)象封裝了由WEB瀏覽器或其它客戶端生成地HTTP

    請(qǐng)求的細(xì)節(jié)(參數(shù),屬性,頭標(biāo)和數(shù)據(jù))。作用域?yàn)閞equest(用戶請(qǐng)求期)。
    方法由可查看API

    response:javax.servlet.ServletResponse的子類型,此對(duì)象封裝了返回到HTTP客戶端的輸出,向頁(yè)面

    作者提供設(shè)置響應(yīng)頭標(biāo)和狀態(tài)碼的方式。經(jīng)常用來(lái)設(shè)置HTTP標(biāo)題,添加cookie,設(shè)置響應(yīng)內(nèi)容的類型和狀

    態(tài),發(fā)送HTTP重定向和編碼URL。作用域?yàn)閜age(頁(yè)面執(zhí)行期)。


    pageContext:javax.servlet.jsp.PageContext(抽象類)類型,作用域?yàn)閜age(頁(yè)面執(zhí)行期)。此對(duì)象

    提供所有四個(gè)作用域?qū)哟蔚膶傩圆樵兒托薷哪芰Γ蔡峁┝宿D(zhuǎn)發(fā)請(qǐng)求到其它資源和包含其他資源的方法


    該對(duì)象的方法都是抽象方法

    session:javax.servlet.http.HttpSession類型,主要用于跟蹤對(duì)話。作用域session(會(huì)話期—)。

    HttpSession是一個(gè)類似哈希表的與單一WEB瀏覽器會(huì)話相關(guān)的對(duì)象,它存在于HTTP請(qǐng)求之間,可以存儲(chǔ)任

    何類型的命名對(duì)象。
    如果不需要在請(qǐng)求之間跟蹤會(huì)話對(duì)象,可以通過(guò)在page指令中指定session="false"
    需要記住的是pageContext對(duì)象也可以與session.getAttribute(),session.setAttribute()一樣的方式取

    得并設(shè)置會(huì)話屬性。

    application:javax.servlet.ServletContext類型,servlet的環(huán)境通過(guò)調(diào)用getServletConfig

    ().getContext()方法獲得。作用域是application(整個(gè)程序運(yùn)行期)。它提供了關(guān)于服務(wù)器版本,應(yīng)用

    級(jí)初始化參數(shù)和應(yīng)用內(nèi)資源絕對(duì)路徑,注冊(cè)信息的方式


    config:javax.servlet.ServletConfig,作用域?yàn)閜age(頁(yè)面執(zhí)行期)

    exception:java.lang.Throwable,通過(guò)JSP錯(cuò)誤頁(yè)面中一個(gè)catch塊已經(jīng)益出但沒(méi)有捕獲的

    java.lang.Throwable的任意實(shí)例,傳向了errorPage的URI。作用域?yàn)閜age(頁(yè)面執(zhí)行期)。注意

    exception只有在page指令中具有屬性isErrorPage="true"時(shí)才有效。

    page:java.lang.Object類型,指向頁(yè)面自身的方式。作用域?yàn)閜age(頁(yè)面執(zhí)行期

     

    JSP中九大內(nèi)置對(duì)象為:
    request            請(qǐng)求對(duì)象                 類型 javax.servlet.ServletRequest        作用域 Request
    response          響應(yīng)對(duì)象                   類型 javax.servlet.SrvletResponse       作用域  Page
    pageContext    頁(yè)面上下文對(duì)象       類型 javax.servlet.jsp.PageContext      作用域    Page
    session            會(huì)話對(duì)象                   類型 javax.servlet.http.HttpSession       作用域    Session
    application       應(yīng)用程序?qū)ο?nbsp;         類型 javax.servlet.ServletContext          作用域    Application
    out                   輸出對(duì)象                   類型 javax.servlet.jsp.JspWriter             作用域    Page
    config              配置對(duì)象                  類型 javax.servlet.ServletConfig            作用域    Page
    page               頁(yè)面對(duì)象                  類型 javax.lang.Object                            作用域    Page
    exception        例外對(duì)象                 類型 javax.lang.Throwable                     作用域    page

    request 對(duì)象代表的是來(lái)自客戶端的請(qǐng)求,例如我們?cè)贔ORM表單中填寫(xiě)的信息等,是最常用的對(duì)象

    常用的方法有:getParameter、getParameterNames 和getParameterValues 通過(guò)調(diào)用這幾個(gè)方法來(lái)獲取請(qǐng)求對(duì)象中所包含的參數(shù)的值。

    response 對(duì)象代表的是對(duì)客戶端的響應(yīng),也就是說(shuō)可以通過(guò)response 對(duì)象來(lái)組織發(fā)送到客戶端的數(shù)據(jù)。但是由于組織方式比較底層,所以不建議普通讀者使用,需要向客戶端發(fā)送文字時(shí)直接使用

    pageContext 對(duì)象直譯時(shí)可以稱作“頁(yè)面上下文”對(duì)象,代表的是當(dāng)前頁(yè)面運(yùn)行的一些屬性

    常用的方法有 :findAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope
    一般情況下pageContext對(duì)象用到得也不是很多,只有在項(xiàng)目所面臨的情況比較復(fù)雜的情況下,才會(huì)利用到頁(yè)面屬性來(lái)輔助處理。

    session    對(duì)象代表服務(wù)器與客戶端所建立的會(huì)話,當(dāng)需要在不同的JSP頁(yè)面中保留客戶信息的情況下使用,比如在線購(gòu)物、客戶軌跡跟蹤等。“session” 對(duì)象建立在cookie的基礎(chǔ)上,所以使用時(shí)應(yīng)注意判斷一下客戶端是否打開(kāi)了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。

    概要
    HTTP是無(wú)狀態(tài)(stateless)協(xié)議;
    Web Server 對(duì)每一個(gè)客戶端請(qǐng)求都沒(méi)有歷史記憶;
    Session用來(lái)保存客戶端狀態(tài)信息;
    由Web Server 寫(xiě)入;
    存于客戶端;
    客戶端的每次訪問(wèn)都把上次的session記錄傳遞給Web Server;
    Web Server讀取客戶端提交的session來(lái)獲取客戶端的狀態(tài)信息

    application 對(duì)象負(fù)責(zé)提供應(yīng)用程序在服務(wù)器中運(yùn)行時(shí)的一些全局信息,常用的方法有g(shù)etMimeType和getRealPath等。

    out 對(duì)象代表了向客戶端發(fā)送數(shù)據(jù)的對(duì)象,與“response” 對(duì)象不同,通過(guò)“out” 對(duì)象發(fā)送的內(nèi)容將是瀏覽器需要顯示的內(nèi)容,是文本一級(jí)的,可以通過(guò)“out” 對(duì)象直接向客戶端寫(xiě)一個(gè)由程序動(dòng)態(tài)生成HTML文件。常用的方法除了pirnt和println之外,還包括clear、clearBuffer、flush、getBufferSize和getRemaining,這是因?yàn)?#8220;out” 對(duì)象內(nèi)部包含了一個(gè)緩沖區(qū),所以需要一些對(duì)緩沖區(qū)進(jìn)行操作的方法

    “config” 對(duì)象提供一些配置信息,常用的方法有g(shù)etInitParameter和getInitParameterNames,以獲得Servlet初始化時(shí)的參數(shù)。

    “page” 對(duì)象代表了正在運(yùn)行的由JSP文件產(chǎn)生的類對(duì)象,不建議一般讀者使用。

    “exception” 對(duì)象則代表了JSP文件運(yùn)行時(shí)所產(chǎn)生的例外對(duì)象,此對(duì)象不能在一般JSP文件中直接使用,而只能在使用了“<%@ page isErrorPage="true "%>”的JSP文件中使用


     


    四個(gè)作用域:

    何為作用域
    先讓我們看看效果:


    大概流程是這樣的,我們?cè)L問(wèn)04-01/index.jsp的時(shí)候,分別對(duì)pageContext, request, session,

    application四個(gè)作用域中的變量進(jìn)行累加。(當(dāng)然先判斷這個(gè)變量是不是存在,如果變量不存在,則要

    把變量初始化成1。)計(jì)算完成后就從index.jsp執(zhí)行forward跳轉(zhuǎn)到test.jsp。在test.jsp里再進(jìn)行一次

    累加,然后顯示出這四個(gè)整數(shù)來(lái)。

    從顯示的結(jié)果來(lái)看,我們可以直觀的得出結(jié)論:

    page里的變量沒(méi)法從index.jsp傳遞到test.jsp。只要頁(yè)面跳轉(zhuǎn)了,它們就不見(jiàn)了。

    request里的變量可以跨越forward前后的兩頁(yè)。但是只要刷新頁(yè)面,它們就重新計(jì)算了。

    session和application里的變量一直在累加,開(kāi)始還看不出區(qū)別,只要關(guān)閉瀏覽器,再次重啟瀏覽器訪問(wèn)

    這頁(yè),session里的變量就重新計(jì)算了。

    application里的變量一直在累加,除非你重啟tomcat,否則它會(huì)一直變大。

    而作用域規(guī)定的是變量的有效期限。

    如果把變量放到pageContext里,就說(shuō)明它的作用域是page,它的有效范圍只在當(dāng)前jsp頁(yè)面里。

    從把變量放到pageContext開(kāi)始,到j(luò)sp頁(yè)面結(jié)束,你都可以使用這個(gè)變量。

    如果把變量放到request里,就說(shuō)明它的作用域是request,它的有效范圍是當(dāng)前請(qǐng)求周期。

    所謂請(qǐng)求周期,就是指從http請(qǐng)求發(fā)起,到服務(wù)器處理結(jié)束,返回響應(yīng)的整個(gè)過(guò)程。在這個(gè)過(guò)程中可能使

    用forward的方式跳轉(zhuǎn)了多個(gè)jsp頁(yè)面,在這些頁(yè)面里你都可以使用這個(gè)變量。

    如果把變量放到session里,就說(shuō)明它的作用域是session,它的有效范圍是當(dāng)前會(huì)話。

    所謂當(dāng)前會(huì)話,就是指從用戶打開(kāi)瀏覽器開(kāi)始,到用戶關(guān)閉瀏覽器這中間的過(guò)程。這個(gè)過(guò)程可能包含多個(gè)

    請(qǐng)求響應(yīng)。也就是說(shuō),只要用戶不關(guān)瀏覽器,服務(wù)器就有辦法知道這些請(qǐng)求是一個(gè)人發(fā)起的,整個(gè)過(guò)程被

    稱為一個(gè)會(huì)話(session),而放到會(huì)話中的變量,就可以在當(dāng)前會(huì)話的所有請(qǐng)求里使用。

    如果把變量放到application里,就說(shuō)明它的作用域是application,它的有效范圍是整個(gè)應(yīng)用。

    整個(gè)應(yīng)用是指從應(yīng)用啟動(dòng),到應(yīng)用結(jié)束。我們沒(méi)有說(shuō)“從服務(wù)器啟動(dòng),到服務(wù)器關(guān)閉”,是因?yàn)橐粋€(gè)服務(wù)

    器可能部署多個(gè)應(yīng)用,當(dāng)然你關(guān)閉了服務(wù)器,就會(huì)把上面所有的應(yīng)用都關(guān)閉了。

    application作用域里的變量,它們的存活時(shí)間是最長(zhǎng)的,如果不進(jìn)行手工刪除,它們就一直可以使用。

    與上述三個(gè)不同的是,application里的變量可以被所有用戶共用。如果用戶甲的操作修改了application

    中的變量,用戶乙訪問(wèn)時(shí)得到的是修改后的值。這在其他scope中都是不會(huì)發(fā)生的,page, request,

    session都是完全隔離的,無(wú)論如何修改都不會(huì)影響其他人的數(shù)據(jù)。

    我們使用public Object getAttribute(String name)獲得變量值,使用public void setAttribute

    (String name, Object value)將變量值保存到對(duì)應(yīng)作用域中。舉個(gè)pageContext的例子就是:

    // page
    Integer countPage = (Integer) pageContext.getAttribute("countPage");
    if (countPage == null) {
        pageContext.setAttribute("countPage", 1);
    } else {
        pageContext.setAttribute("countPage", countPage + 1);
    }
    這里先從pageContext中取出名為countPage的整數(shù),因?yàn)榉祷氐亩际莏ava.lang.Object類型,所以需要強(qiáng)

    制轉(zhuǎn)換成我們需要的整形。這里取得的變量如果不存在就會(huì)返回null,通過(guò)判斷countPage == null來(lái)辨

    別變量是否存在,如果不存在就設(shè)置為1,如果存在就進(jìn)行累加,最后使用setAttribute()方法將修改后

    的變量值放入pageContext。

    將其中的pageContext換成request, session, application就可以操作其他三個(gè)作用域中的變量。

    posted @ 2008-09-20 11:41 ourday 閱讀(33778) | 評(píng)論 (8)編輯 收藏

    主站蜘蛛池模板: 女人18毛片免费观看| 最新亚洲人成无码网站| 亚洲乳大丰满中文字幕| 国产免费变态视频网址网站 | 日韩欧美一区二区三区免费观看| 全部免费毛片在线播放| a级毛片高清免费视频| 99re6在线视频精品免费| 色老头永久免费网站| 18禁止观看免费私人影院| 免费看国产精品3a黄的视频| 中文亚洲成a人片在线观看| 亚洲情综合五月天| 亚洲欧美不卡高清在线| 亚洲暴爽av人人爽日日碰| 国产精品亚洲二区在线| 一级做a爰片久久毛片免费看 | 日本一区二区三区免费高清在线 | 97在线视频免费公开视频| 日本午夜免费福利视频| 亚洲国产中文字幕在线观看| 亚洲中文字幕视频国产| 日产亚洲一区二区三区| 亚洲国产精品成人精品软件| 亚洲欧美日韩中文无线码| 国产在线精品免费aaa片| 13一14周岁毛片免费| 超pen个人视频国产免费观看| 亚洲乱码国产一区网址| 国产精品高清视亚洲精品| 久久精品国产亚洲av天美18| 特级无码毛片免费视频尤物| 免费理论片51人人看电影| 91亚洲国产成人精品下载| 亚洲av永久无码一区二区三区| 91精品国产免费网站| 情侣视频精品免费的国产| 亚洲狠狠ady亚洲精品大秀| 黄页网站在线观看免费| 99热免费在线观看| 亚洲女初尝黑人巨高清|