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

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

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

    qqjianyue代碼工

    砌java代碼
    posts - 62, comments - 9, trackbacks - 0, articles - 10
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    2008年9月2日

    1. Change to aliyun repository

    2. Chinese input method
    sudo apt-get install ibus-pinyin
    #remmeber to logout and re-logon to change system 'Region&Language' setting

    3. Shadowsocks and genpac
    sudo apt install -y shadowsocks-libev
    #sudo vi /etc/shadowsocks-libev/shadowsock.json
    {
        
    "server":"x.x.x.x",
        
    "server_port":xx,
        
    "local_port":1080,
        
    "password":"xxxxx",
        
    "timeout":60,
        
    "method":"aes-256-cfb"
    }

    nohup ss-local -c /etc/shadowsocks-libev/shadowsock.json >/dev/null 2>&1 &

    sudo apt install phython-pip
    sudo -H
    pip install genpac


    如果pip error "TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'"
    sudo python -m pip install --upgrade --force pip

    mkdir pac
    cd pac
    touch user-rules.txt
    genpac --pac-proxy "SOCKS5 127.0.0.1:1080" --gfwlist-proxy="SOCKS5 127.0.0.1:1080" --output="autoproxy.pac" --gfwlist-url="https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt" --user-rule-from="user-rules.txt"

    配置系統(tǒng)自動(dòng)代理為:
    /home/xxx/pac/autoproxy.pac

    4. JDK8
    https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
    download and setup environment variable manually


    5.gcloud
    http://ubuntuhandbook.org/index.php/2014/10/google-cloud-sdk-made-into-canonical-partners-repository/

    posted @ 2018-11-03 08:39 Qzi 閱讀(199) | 評(píng)論 (0)編輯 收藏

    官方說(shuō)明:http://source.android.com/source/initializing.html
    環(huán)境:
    Ubuntu 12.04 64bit
    JDK6(installation: http://www.gaggl.com/2012/04/installing-java6-jdk-on-ubuntu-12-04/)

    $ make -v
    GNU Make 3.81
    Copyright (C) 2006  Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.
    There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
    PARTICULAR PURPOSE.
    This program built for x86_64-pc-linux-gnu
    $ python -V
    Python 2.7.3
    android 當(dāng)前 mainfest version: 4.2


    按照官方說(shuō)明從下載到運(yùn)行emulator,沒(méi)有nexus,所以沒(méi)做實(shí)際機(jī)器燒錄。步驟請(qǐng)根據(jù)官方說(shuō)明做,以下只列出過(guò)程遇到的問(wèn)題:
    1.repo sync
    經(jīng)常出現(xiàn)斷線,網(wǎng)上有很多參考辦法,我是每次忽略這些錯(cuò)誤,直到運(yùn)行完畢退出,我再重新運(yùn)行:
    repo sync -f
    知道所有代碼下載完畢(4.2的有16G)
    2.每次跑emulator都要cd到代碼目錄先進(jìn)行環(huán)境初始化
    source build/envsetup.sh
    lunch full-eng
    3.emulator出錯(cuò)
    $ emulator
    emulator: WARNING: system partition size adjusted to match image file (229 MB > 200 MB)
    Segmentation fault (core dumped)
    改成用emulator-arm -partition-size 1024
    full long command reference:
    http://stackoverflow.com/questions/9022750/running-emulator-after-building-android-from-source

    posted @ 2013-04-20 10:57 Qzi 閱讀(303) | 評(píng)論 (0)編輯 收藏

    Spring 聲明式事務(wù)讓我們從復(fù)雜的事務(wù)處理中得到解脫。使得我們?cè)僖矡o(wú)需要去處理獲得連接、關(guān)閉連接、事務(wù)提交和回滾等這些操作。再也無(wú)需要我們?cè)谂c事務(wù)相關(guān)的方法中處理大量的 try catch  finally 代碼。 我們?cè)谑褂?/span> Spring 聲明式事務(wù)時(shí),有一個(gè)非常重要的概念就是事務(wù)屬性。事務(wù)屬性通常由事務(wù)的傳播行為,事務(wù)的隔離級(jí)別,事務(wù)的超時(shí)值和事務(wù)只讀標(biāo)志組成。我們?cè)谶M(jìn)行事務(wù)劃分時(shí),需要進(jìn)行事務(wù)定義,也就是配置事務(wù)的屬性。

     

    Spring  TransactionDefinition 接口中定義這些屬性 , 以供 PlatfromTransactionManager 使用 , PlatfromTransactionManager  spring 事務(wù)管理的核心接口。

     

    l         getTimeout() 方法,它返回事務(wù)必須在多少秒內(nèi)完成。

    l         isReadOnly() , 事務(wù)是否只讀,事務(wù)管理器能夠根據(jù)這個(gè)返回值進(jìn)行優(yōu)化,確保事務(wù)是只讀的。

    l         getIsolationLevel() 方法返回事務(wù)的隔離級(jí)別,事務(wù)管理器根據(jù)它來(lái)控制另外一個(gè)事務(wù)可以看到本事務(wù)內(nèi)的哪些數(shù)據(jù)。

     

     TransactionDefinition 接口中定義了五個(gè)不同的事務(wù)隔離級(jí)別:

     

    l         ISOLATION_DEFAULT 這是一個(gè) PlatfromTransactionManager 默認(rèn)的隔離級(jí)別,使用數(shù)據(jù)庫(kù)默認(rèn)的事務(wù)隔離級(jí)別 . 另外四個(gè)與 JDBC 的隔離級(jí)別相對(duì)應(yīng)

    l         ISOLATION_READ_UNCOMMITTED 這是事務(wù)最低的隔離級(jí)別,它充許別外一個(gè)事務(wù)可以看到這個(gè)事務(wù)未提交的數(shù)據(jù)。這種隔離級(jí)別會(huì)產(chǎn)生臟讀,不可重復(fù)讀和幻像讀。 例如 : Mary的原工資為 1000, 財(cái)務(wù)人員將 Mary 的工資改為了 8000 ,但未提交事務(wù) 與此同時(shí), Mary正在讀取自己的工資 Mary 發(fā)現(xiàn)自己的工資變?yōu)榱?/span> 8000 ,歡天喜地! 而財(cái)務(wù)發(fā)現(xiàn)操作有誤,而回滾了事務(wù) ,Mary 的工資又變?yōu)榱?/span> 1000. 像這樣 ,Mary 記取的工資數(shù) 8000 是一個(gè)臟數(shù)據(jù)。

    l         ISOLATION_READ_COMMITTED 保證一個(gè)事務(wù)修改的數(shù)據(jù)提交后才能被另外一個(gè)事務(wù)讀取。另外一個(gè)事務(wù)不能讀取該事務(wù)未提交的數(shù)據(jù)。這種事務(wù)隔離級(jí)別可以避免臟讀出現(xiàn),但是可能會(huì)出現(xiàn)不可重復(fù)讀和幻像讀。

    l         ISOLATION_REPEATABLE_READ 這種事務(wù)隔離級(jí)別可以防止臟讀,不可重復(fù)讀。但是可能出現(xiàn)幻像讀。它除了保證一個(gè)事務(wù)不能讀取另一個(gè)事務(wù)未提交的數(shù)據(jù)外,還保證了避免下面的情況產(chǎn)生 ( 不可重復(fù)讀 )  在事務(wù) 1 中, Mary 讀取了自己的工資為 1000, 操作并沒(méi)有完成 在事務(wù) 2 中,這時(shí)財(cái)務(wù)人員修改了 Mary 的工資為 2000, 并提交了事務(wù) . 在事務(wù) 1 中,Mary 再次讀取自己的工資時(shí),工資變?yōu)榱?/span> 2000 在一個(gè)事務(wù)中前后兩次讀取的結(jié)果并不致,導(dǎo)致了不可重復(fù)讀。 使用 ISOLATION_REPEATABLE_READ 可以避免這種情況發(fā)生。

    l         ISOLATION_SERIALIZABLE 這是花費(fèi)最高代價(jià)但是最可靠的事務(wù)隔離級(jí)別。事務(wù)被處理為順序執(zhí)行。除了防止臟讀,不可重復(fù)讀外,還避免了幻像讀。 目前工資為 1000 的員工有 10人。 事務(wù) 1, 讀取所有工資為 1000 的員工。 共讀取 10 條記錄 這時(shí)另一個(gè)事務(wù)向 employee表插入了一條員工記錄,工資也為 1000 事務(wù) 1 再次讀取所有工資為 1000 的員工 共讀取到了 11 條記錄,這就產(chǎn)生了幻像讀。 ISOLATION_SERIALIZABLE 能避免這樣的情況發(fā)生。但是這樣也耗費(fèi)了最大的資源。

     

     

    getPropagationBehavior () 返回事務(wù)的傳播行為,由是否有一個(gè)活動(dòng)的事務(wù)來(lái)決定一個(gè)事務(wù)調(diào)用。  TransactionDefinition 接口中定義了七個(gè)事務(wù)傳播行為:

     

    l         PROPAGATION_REQUIRED 如果存在一個(gè)事務(wù),則支持當(dāng)前事務(wù)。如果沒(méi)有事務(wù)則開(kāi)啟一個(gè)新的事務(wù)。 使用 spring 聲明式事務(wù), spring 使用 AOP 來(lái)支持聲明式事務(wù),會(huì)根據(jù)事務(wù)屬性,自動(dòng)在方法調(diào)用之前決定是否開(kāi)啟一個(gè)事務(wù),并在方法執(zhí)行之后決定事務(wù)提交或回滾事務(wù)。 單獨(dú)調(diào)用 methodB 方法 相當(dāng)于 Spring 保證在 methodB 方法中所有的調(diào)用都獲得到一個(gè)相同的連接。在調(diào)用 methodB 時(shí),沒(méi)有一個(gè)存在的事務(wù),所以獲得一個(gè)新的連接,開(kāi)啟了一個(gè)新的事務(wù)。 單獨(dú)調(diào)用 MethodA 時(shí),在 MethodA 內(nèi)又會(huì)調(diào)用 MethodB. 執(zhí)行效果相當(dāng)于 調(diào)用 MethodA 時(shí),環(huán)境中沒(méi)有事務(wù),所以開(kāi)啟一個(gè)新的事務(wù) . 當(dāng)在 MethodA 中調(diào)用MethodB 時(shí),環(huán)境中已經(jīng)有了一個(gè)事務(wù),所以 methodB 就加入當(dāng)前事務(wù)。

    l         PROPAGATION_SUPPORTS 如果存在一個(gè)事務(wù),支持當(dāng)前事務(wù)。如果沒(méi)有事務(wù),則非事務(wù)的執(zhí)行。但是對(duì)于事務(wù)同步的事務(wù)管理器, PROPAGATION_SUPPORTS 與不使用事務(wù)有少許不同。 單純的調(diào)用 methodB 時(shí), methodB 方法是非事務(wù)的執(zhí)行的。 當(dāng)調(diào)用 methdA時(shí) ,methodB 則加入了 methodA 的事務(wù)中 , 事務(wù)地執(zhí)行。

    l         PROPAGATION_MANDATORY 如果已經(jīng)存在一個(gè)事務(wù),支持當(dāng)前事務(wù)。如果沒(méi)有一個(gè)活動(dòng)的事務(wù),則拋出異常。 當(dāng)單獨(dú)調(diào)用 methodB 時(shí),因?yàn)楫?dāng)前沒(méi)有一個(gè)活動(dòng)的事務(wù),則會(huì)拋出異常 throw new IllegalTransactionStateException("Transaction propagation ''mandatory'' but no existing transaction found"); 當(dāng)調(diào)用 methodA 時(shí), methodB 則加入到 methodA 的事務(wù)中,事務(wù)地執(zhí)行。

    l         PROPAGATION_REQUIRES_NEW 總是開(kāi)啟一個(gè)新的事務(wù)。如果一個(gè)事務(wù)已經(jīng)存在,則將這個(gè)存在的事務(wù)掛起。 當(dāng)單獨(dú)調(diào)用 methodB 時(shí),相當(dāng)于把 methodb 聲明為 REQUIRED 。開(kāi)啟一個(gè)新的事務(wù),事務(wù)地執(zhí)行。 當(dāng)調(diào)用 methodA 時(shí) 情況有些大不一樣 . 相當(dāng)于下面的效果。 在這里,我把 ts1 稱為外層事務(wù), ts2 稱為內(nèi)層事務(wù)。從上面的代碼可以看出, ts2 ts1 是兩個(gè)獨(dú)立的事務(wù),互不相干。 Ts2 是否成功并不依賴于 ts1 。如果 methodA 方法在調(diào)用 methodB 方法后的 doSomeThingB 方法失敗了,而 methodB 方法所做的結(jié)果依然被提交。而除了 methodB 之外的其它代碼導(dǎo)致的結(jié)果卻被回滾了。 使用PROPAGATION_REQUIRES_NEW, 需要使用 JtaTransactionManager 作為事務(wù)管理器。

    l         PROPAGATION_NOT_SUPPORTED 總是非事務(wù)地執(zhí)行,并掛起任何存在的事務(wù)。 當(dāng)單獨(dú)調(diào)用 methodB 時(shí),不啟用任何事務(wù)機(jī)制,非事務(wù)地執(zhí)行。 當(dāng)調(diào)用 methodA 時(shí),相當(dāng)于下面的效果 使用 PROPAGATION_NOT_SUPPORTED, 也需要使用 JtaTransactionManager 作為事務(wù)管理器。

    l         PROPAGATION_NEVER 總是非事務(wù)地執(zhí)行,如果存在一個(gè)活動(dòng)事務(wù),則拋出異常 單獨(dú)調(diào)用methodB ,則非事務(wù)的執(zhí)行。 調(diào)用 methodA 則會(huì)拋出異常

    l         PROPAGATION_NESTED 如果一個(gè)活動(dòng)的事務(wù)存在,則運(yùn)行在一個(gè)嵌套的事務(wù)中 . 如果沒(méi)有活動(dòng)事務(wù) , 則按 TransactionDefinition.PROPAGATION_REQUIRED 屬性執(zhí)行 這是一個(gè)嵌套事務(wù) , 使用 JDBC 3.0 驅(qū)動(dòng)時(shí) , 僅僅支持 DataSourceTransactionManager 作為事務(wù)管理器。需要 JDBC 驅(qū)動(dòng)的 java.sql.Savepoint 類(lèi)。有一些 JTA 的事務(wù)管理器實(shí)現(xiàn)可能也提供了同樣的功能。 使用 PROPAGATION_NESTED ,還需要把 PlatformTransactionManager nestedTransactionAllowed 屬性設(shè)為 true;  nestedTransactionAllowed 屬性值默認(rèn)為false; 如果單獨(dú)調(diào)用 methodB 方法,則按 REQUIRED 屬性執(zhí)行。 如果調(diào)用 methodA 方法,相當(dāng)于下面的效果 當(dāng) methodB 方法調(diào)用之前,調(diào)用 setSavepoint 方法,保存當(dāng)前的狀態(tài)到 savepoint 。如果 methodB 方法調(diào)用失敗,則恢復(fù)到之前保存的狀態(tài)。但是需要注意的是,這時(shí)的事務(wù)并沒(méi)有進(jìn)行提交,如果后續(xù)的代碼 (doSomeThingB() 方法 ) 調(diào)用失敗,則回滾包括 methodB 方法的所有操作。 嵌套事務(wù)一個(gè)非常重要的概念就是內(nèi)層事務(wù)依賴于外層事務(wù)。外層事務(wù)失敗時(shí),會(huì)回滾內(nèi)層事務(wù)所做的動(dòng)作。而內(nèi)層事務(wù)操作失敗并不會(huì)引起外層事務(wù)的回滾。

     

     

    PROPAGATION_NESTED  PROPAGATION_REQUIRES_NEW 的區(qū)別:

     

    它們非常類(lèi)似 , 都像一個(gè)嵌套事務(wù),如果不存在一個(gè)活動(dòng)的事務(wù),都會(huì)開(kāi)啟一個(gè)新的事務(wù)。使用PROPAGATION_REQUIRES_NEW 時(shí),內(nèi)層事務(wù)與外層事務(wù)就像兩個(gè)獨(dú)立的事務(wù)一樣,一旦內(nèi)層事務(wù)進(jìn)行了提交后,外層事務(wù)不能對(duì)其進(jìn)行回滾。兩個(gè)事務(wù)互不影響。兩個(gè)事務(wù)這是一個(gè)真正的嵌套事務(wù)。同時(shí)它需要 JTA 事務(wù)管理器的支持。 使用 PROPAGATION_NESTED 時(shí),外層事務(wù)的回滾可以引起內(nèi)層事務(wù)的回滾。而內(nèi)層事務(wù)的異常并不會(huì)導(dǎo)致外層事務(wù)的回滾,它是一個(gè)真正的嵌套事務(wù)。 DataSourceTransactionManager 使用 savepoint 支持PROPAGATION_NESTED 時(shí),需要 JDBC 3.0 以上驅(qū)動(dòng)及 1.4 以上的 JDK 版本支持。其它的JTA TrasactionManager 實(shí)現(xiàn)可能有不同的支持方式。 PROPAGATION_REQUIRED 應(yīng)該是我們首先的事務(wù)傳播行為。它能夠滿足我們大多數(shù)的事務(wù)需求。

    posted @ 2011-11-29 10:25 Qzi 閱讀(240) | 評(píng)論 (0)編輯 收藏

    參考這篇文章:http://blog.csdn.net/bluishglc/article/details/6632280 
    一。Maven的執(zhí)行方式
    maven對(duì)構(gòu)建(build)的過(guò)程進(jìn)行了抽象和定義,這個(gè)過(guò)程被稱為構(gòu)建的生命周期(lifecycle)。生命周期(lifecycle)由多個(gè)階段(phase)組成,每個(gè)階段(phase)會(huì)掛接一到多個(gè)goal。goal是maven里定義任務(wù)的最小單元,goal分為兩類(lèi),一類(lèi)是綁定phase的,就是執(zhí)行到某個(gè)phase,那么這個(gè)goal就會(huì)觸發(fā),另外一類(lèi)不綁定,就是單獨(dú)任務(wù),這就相當(dāng)于ant里的target。
    1。以phase來(lái)構(gòu)建
    例如:
    mvn clean
    mvn compile
    mvn test
    mvn package
    表明maven會(huì)執(zhí)行到某個(gè)生命周期(lifecycle)的某個(gè)階段(phase)
    這個(gè)phase以及它前面所有phase綁定的目標(biāo)(goal)都會(huì)執(zhí)行, 每個(gè)phase都會(huì)邦定maven默認(rèn)的goal或者沒(méi)有g(shù)oal, 或者自定義的goal。
    也可以通過(guò)傳入?yún)?shù)跳過(guò)(skip)某些phase,例如:
    mvn install -Dmaven.test.skip=true

    1。以goal來(lái)構(gòu)建
    這類(lèi)就是沒(méi)有綁定phase的goal,但是這類(lèi)goal卻通常會(huì)有個(gè)執(zhí)行前提,就是project必須執(zhí)行到某個(gè)phase,
    那么執(zhí)行這個(gè)goal,其實(shí)也會(huì)觸發(fā)maven執(zhí)行到前提要求的phase。
    例如jetty:run是個(gè)非綁定phase的goal,它的前提是test-compile,這個(gè)前提是由plugin的代碼邏輯制定的

    /**
     * @goal run
     * @requiresDependencyResolution runtime
     * @execute phase="test-compile"
     * @description Runs jetty6 directly from a maven project
     */
    public class Jetty6RunMojo extends AbstractJettyRunMojo
    {
        ...
    }
    二。Maven lifecycle, phase概覽
    Maven預(yù)設(shè)了三個(gè)Lifecycle ,各包含了下列Phases.
    1. Clean Lifecycle
      • pre-clean
      • clean
      • post-clean
    2. Default Lifecycle
      • validate
      • initialize
      • generate-sources
      • process-sources
      • generate-resources
      • process-resources
      • compile
      • process-classes
      • generate-test-sources
      • process-test-sources
      • process-test-resources
      • test-compile
      • process-test-classes
      • test
      • prepare-package
      • package
      • pre-integration-test
      • integration-test
      • post-integration-test
      • verify
      • install
      • deploy
    3. Site Lifecycle
      • pre-site
      • site
      • post-site
      • site-deploy

    posted @ 2011-09-22 10:01 Qzi 閱讀(9283) | 評(píng)論 (0)編輯 收藏

    1.Window
    • java -classpath .;jar1;jar2 MainClass
      注意: -classpath參數(shù)必須放于前面。
    • java -jar jar1
      jar包的MANIFEST.MF文件:
      Manifest-Version: 1.0
      Main-Class: com.Main1
      Class-Path: jar1.jar;jar2.jar

      注意: 使用-jar參數(shù),那么主jar包必須含有MANIFEST.MF信息,并且指定Main-Class & Class-Path。命令行的-classpath參數(shù)將被忽略
    2.Linux
    區(qū)別:
    目錄分隔符由\變成/
    jar包分隔符由;變成:

    Window測(cè)試環(huán)境是Sun java version "1.6.0_14"
    其他版本沒(méi)有驗(yàn)證

    posted @ 2011-09-16 17:10 Qzi 閱讀(326) | 評(píng)論 (0)編輯 收藏

    posted @ 2011-09-16 16:59 Qzi 閱讀(263) | 評(píng)論 (0)編輯 收藏

    1.綁定本地接口,自動(dòng)生成代理對(duì)象
    復(fù)制下面鏈接代碼
    // Endpoint Address
    String endpointAddress = "http://localhost:8111/helloWorld";
    // Add a port to the Service
    service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
    HelloService hw = service.getPort(HelloService.class);

    posted @ 2011-09-16 16:58 Qzi 閱讀(616) | 評(píng)論 (0)編輯 收藏

    java -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8888

    posted @ 2011-09-16 16:58 Qzi 閱讀(516) | 評(píng)論 (0)編輯 收藏

    Java Keytool Commands for Creating and Importing

    These commands allow you to generate a new Java Keytool keystore file, create a CSR, and import certificates. Any root or intermediate certificates will need to be imported before importing the primary certificate for your domain.

    • Generate a Java keystore and key pair

      keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -keysize 2048

    • Generate a certificate signing request (CSR) for an existing Java keystore

      keytool -certreq -alias mydomain -keystore keystore.jks -file mydomain.csr

    • Import a root or intermediate CA certificate to an existing Java keystore

      keytool -import -trustcacerts -alias root -file Thawte.crt -keystore keystore.jks

    • Import a signed primary certificate to an existing Java keystore

      keytool -import -trustcacerts -alias mydomain -file mydomain.crt -keystore keystore.jks

    • Generate a keystore and self-signed certificate (see How to Create a Self Signed Certificate using Java Keytool for more info)

      keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048

    Java Keytool Commands for Checking

    If you need to check the information within a certificate, or Java keystore, use these commands.

    • Check a stand-alone certificate

      keytool -printcert -v -file mydomain.crt

    • Check which certificates are in a Java keystore

      keytool -list -v -keystore keystore.jks

    • Check a particular keystore entry using an alias

      keytool -list -v -keystore keystore.jks -alias mydomain

    Other Java Keytool Commands

    • Delete a certificate from a Java Keytool keystore

      keytool -delete -alias mydomain -keystore keystore.jks

    • Change a Java keystore password

      keytool -storepasswd -new new_storepass -keystore keystore.jks

    • Export a certificate from a keystore

      keytool -export -alias mydomain -file mydomain.crt -keystore keystore.jks

    • List Trusted CA Certs

      keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts

    • Import New CA into Trusted Certs

      keytool -import -trustcacerts -file /path/to/ca/ca.pem -alias CA_ALIAS -keystore $JAVA_HOME/jre/lib/security/cacerts

    posted @ 2011-09-16 16:24 Qzi 閱讀(389) | 評(píng)論 (0)編輯 收藏

    第一種方式:適合于全部HTML標(biāo)簽
    <acronym title="World Wide Web">
    WWW
    </acronym>

    第二種方式:IMG之類(lèi)的標(biāo)簽例如:
    <img src="#" alt="鼠標(biāo)移動(dòng)到上方會(huì)顯示并且未加載圖片時(shí)也會(huì)顯示">

    第三種方式:input之類(lèi)的標(biāo)簽例如:
    <input type="button" value="確定" title="鼠標(biāo)移動(dòng)到上方會(huì)顯示并且未加載圖片時(shí)也會(huì)顯示">

    posted @ 2010-05-28 16:31 Qzi 閱讀(226) | 評(píng)論 (0)編輯 收藏

    第一:簡(jiǎn)單的使用axis2包自己實(shí)現(xiàn)調(diào)用

    package common;

    import javax.xml.namespace.QName;
    import org.apache.axis2.AxisFault;
    import org.apache.axis2.addressing.EndpointReference;
    import org.apache.axis2.client.Options;
    import org.apache.axis2.rpc.client.RPCServiceClient;

    public class WebServiceUtils
    {
     // ----------------------------------------------------- Properties
     public static int TIMEOUT = 100000;

     // ----------------------------------------------------- Constructors

     // ----------------------------------------------------- Methods
     /**
      *
      * 調(diào)用axis2的webservice的方法
      *
      * @return
      */
     @SuppressWarnings("unchecked")
     static public Object[] invokeWebService( String url, String nameSpace, String method, Object[] args, Class[] returnTypes )
       throws AxisFault
     {
      RPCServiceClient serviceClient = new RPCServiceClient();
      Options options = serviceClient.getOptions();
      EndpointReference targetEPR = new EndpointReference( url );
      options.setTo( targetEPR );
      options.setTimeOutInMilliSeconds( TIMEOUT );
      QName opName = new QName( nameSpace, method );
      Object[] results = serviceClient.invokeBlocking( opName, args, returnTypes );
      return results;
     }
    }


    第二:

    public static OMElement getEchoOMElement() {
            OMFactory fac = OMAbstractFactory.getOMFactory();
            OMNamespace omNs = fac.createOMNamespace(
                    "http://example1.org/example1", "example1");
            OMElement method = fac.createOMElement("echo", omNs);
            OMElement value = fac.createOMElement("Text", omNs);
            value.addChild(fac.createOMText(value, "Axis2 Echo String "));
            method.addChild(value);

            return method;
        }

     public static void main(String[] args) {
            try {
               OMElement payload = ClientUtil.getEchoOMElement();
                Options options = new Options();
              
                options.setTo(targetEPR);
                options.setAction("urn:echo");

                //Blocking invocation
                ServiceClient sender = new ServiceClient();
                sender.setOptions(options);
                OMElement result = sender.sendReceive(payload);

                System.out.println(result);
              
                System.out.println(options.getTo());

            } catch (AxisFault axisFault) {
                axisFault.printStackTrace();
            }
        }

     
    第三:

    利用插件生成客戶端
    private static String URL="http://localhost:8080/axis2/services/WeatherService"; 
        public static void main(String[] args) throws RemoteException {
            try {
                WeatherServiceStub stub;
                if (args != null && args.length != 0) {
                    stub = new WeatherServiceStub(args[0]);
                  
                } else {
                    stub = new WeatherServiceStub(URL);
                }
                WeatherServiceStub.SetWeather setWether = new WeatherServiceStub.SetWeather();
                WeatherServiceStub.Weather wether = new WeatherServiceStub.Weather();
              
                wether.setForecast("east");
                wether.setRain(true);
                wether.setTemperature(12.3f);
                wether.setForecast("big");
              
                setWether.setWeather(wether);
                stub.setWeather(setWether);
              
                WeatherServiceStub.GetWeatherResponse gw = new WeatherServiceStub.GetWeatherResponse();
                System.out.println(gw.get_return());       
              
            } catch (AxisFault e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }


    本文部分來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/yhhah/archive/2009/05/07/4158487.aspx

    posted @ 2010-01-20 23:16 Qzi 閱讀(10504) | 評(píng)論 (0)編輯 收藏

    IE的 script 元素支持onreadystatechange事件,不支持onload事件。
    FF的script 元素不支持onreadystatechange事件,只支持onload事件。
    如果要在一個(gè)<script src="xx.js"> 加載完成執(zhí)行一個(gè)操作,F(xiàn)F使用onload事件就行了,IE下則要結(jié)合onreadystatechange事件和this.readyState
    var loadScript = function(fileName,callback) {
     var scriptTag = document.createElement("script");
      scriptTag.src = fileName;
      document.body.appendChild(scriptTag);
      if (callback) {
       scriptTag.onload = callback;//ff
       scriptTag.onreadystatechange = function()//ie
       {
        if (scriptTag.readyState == "loaded") {
        callback();
       }
      }
     }
    }

    posted @ 2009-12-11 18:57 Qzi 閱讀(474) | 評(píng)論 (0)編輯 收藏

    關(guān)鍵是查詢v$locked_object

    select sess.sid,
        sess.serial#,
        lo.oracle_username,
        lo.os_user_name,
        ao.object_name,
        lo.locked_mode
        from v$locked_object lo,
        dba_objects ao,
        v$session sess
    where ao.object_id = lo.object_id and lo.session_id = sess.sid;


    或者

    select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID;

    殺掉進(jìn)程:
    alter system kill session 'sid,serial#';

    posted @ 2009-09-21 14:09 Qzi 閱讀(242) | 評(píng)論 (0)編輯 收藏

    --創(chuàng)建臨時(shí)表空間
    create temporary tablespace dbuser_temp
    tempfile 'D:\oracle\product\10.1.0\oradata\btx\dbuser_temp01.dbf'
    size 32m
    autoextend on
    next 32m maxsize 2048m
    extent management local;

    --創(chuàng)建數(shù)據(jù)表空間

    create tablespace dbuser_data
    logging
    datafile 'D:\oracle\product\10.1.0\oradata\btx\dbuser_data01.dbf'
    size 32m
    autoextend on
    next 32m maxsize 2048m
    extent management local;
    --或者自己控制增長(zhǎng)規(guī)則
    --pctincreate表示下一次增長(zhǎng)是前一次增長(zhǎng)的110%
    create tablespace dbuser_data logging datafile 'D:/oracle/product/10.1.0/oradata/btx/DBUSER_DATA01.DBF' size 32m autoextend on next 5m maxsize unlimited default storage (initial 32m next 5m pctincrease 10);

    --修改表空間
    alter tablespace dbuser_data add datafile 'D:/oracle/product/10.1.0/oradata/btx/DBUSER_DATA02.DBF'  size 32m autoextend on next 5m maxsize unlimited;

    --創(chuàng)建用戶與指定默認(rèn)數(shù)據(jù)表空間與默認(rèn)臨時(shí)表空間
    create user dbuser identified by dbuser
    default tablespace dbuser_data
    temporary tablespace dbuser_temp;
    --修改用戶表空間
    alter user dbuser default tablespace dbuser_data temporary tablespace dbuser_temp;

    --為用戶賦權(quán)

    grant connect,resource to dbuser;

    修改表空間


    查詢oracle表空間使用狀況
    SELECT b.tablespace_name "表空間名",total 表空間大小,free 表空間剩余大小,
    (total-free) 表空間使用大小,
    ROUND((total-free)/total,4)*100 "使用率 %"
    FROM  (SELECT tablespace_name,SUM(bytes) free FROM DBA_FREE_SPACE
    GROUP BY tablespace_name ) a,
    (SELECT tablespace_name,SUM(bytes) total FROM DBA_DATA_FILES
    GROUP BY tablespace_name) b
    WHERE a.tablespace_name=b.tablespace_name ;

    posted @ 2009-08-16 11:24 Qzi 閱讀(1026) | 評(píng)論 (0)編輯 收藏

    恢復(fù)表數(shù)據(jù):
    alter table 表名 enable row movement;
    flashback table 表名 TO TIMESTAMP to_timestamp('2009-08-07 18:34:00','yyyy-mm-dd hh24:mi:ss');

    恢復(fù)存儲(chǔ)過(guò)程:
    select text from dba_source as of timestamp to_timestamp('2009-03-06 09:45:00', 'YYYY-MM-DD HH24:MI:SS') where owner='IPRA' and name= 'P_IPACCHECK_NC' order by line;
    需要sys用戶
    否則不夠權(quán)限
    或者登錄數(shù)據(jù)庫(kù)所在主機(jī),使用數(shù)據(jù)庫(kù)管理者的系統(tǒng)用戶登錄

    posted @ 2009-08-07 22:07 Qzi 閱讀(203) | 評(píng)論 (0)編輯 收藏

    視圖:(受權(quán)限過(guò)濾了)
    all_tables 所有表
    all_indexs 所有索引
    all_tab_columns  所有列,可以查看列的類(lèi)型

    (dba權(quán)限包括所有)
    dba_tables
    dba_tab_columns
    dba_free_space 各對(duì)象的剩余空間
    dba_data_files  各數(shù)據(jù)空間的文件信息
    dba_tablespaces  表空間信息

    posted @ 2009-07-21 13:35 Qzi 閱讀(250) | 評(píng)論 (0)編輯 收藏

     

    常用字符函數(shù)

    函數(shù)

    描述

    LOWER(char)

    將字符串表達(dá)式char中的所有大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母

    UPPER(char)

    將字符串表達(dá)式char中的所有小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母

    INITCAP(char)

    首字母轉(zhuǎn)換成大寫(xiě)

    SUBSTR(char,start,length)

    返回字符串表達(dá)式char中從第start開(kāi)始的length個(gè)字符

    LENGTH(char)

    返回字符串表達(dá)式char的長(zhǎng)度

    LTRIM(char)

    去掉字符串表達(dá)式char后面的空格

    ASCII(char)

    charASCII

    CHAR(number)

    numberASCII

    REPLACE(char,str1,str2)

    將字符串中所有str1換成str2

    INSTR(char1,char2,start,times)

    char1字符串中搜索char2字符串,start為執(zhí)行搜索操作的起始位置,times為搜索次數(shù)

     

    常用日期函數(shù)

    函數(shù)

    描述

    SYSDATE

    返回系統(tǒng)當(dāng)前日期和時(shí)間

    NEXT_DAY(day,char)

    返回day指定的日期之后并滿足char指定條件的第一個(gè)日期,char所指條件只能為星期幾

    LAST_DAY(day)

    返回day日期所指定月份中最后一天所對(duì)應(yīng)的日期

    ADD_MONTH(day,n)

    返回day日期在n個(gè)月后(n為正數(shù))或前(n為負(fù)數(shù))的日期

    MONTH_BETWEEN(day1,day2)

    返回day1日期和day2日期之間相差得月份

    ROUND(day[,fmt])

    按照fmt指定格式對(duì)日期數(shù)據(jù)day做舍入處理,默認(rèn)舍入到日

    TRUNC(day,[,fmt])

    按照fmt指定格式對(duì)日期數(shù)據(jù)day做舍入處理,默認(rèn)截?cái)嗟饺?/span>

     

    數(shù)據(jù)類(lèi)型轉(zhuǎn)換函數(shù)

    函數(shù)

    描述

    TO_CHAR

    將一個(gè)數(shù)字或日期轉(zhuǎn)換成字符串

    TO_NUMBER

    將字符型數(shù)據(jù)轉(zhuǎn)換成數(shù)字型數(shù)據(jù)

    TO_DATE

    將字符型數(shù)據(jù)轉(zhuǎn)換為日期型數(shù)據(jù)

    CONVERT

    將一個(gè)字符串從一個(gè)字符集轉(zhuǎn)換為另一種字符集

    CHARTORowid

    將一個(gè)字符串轉(zhuǎn)換為Rowid數(shù)據(jù)類(lèi)型

    RowIDTOCHAR

    將一個(gè)Rowid數(shù)據(jù)類(lèi)型轉(zhuǎn)換為字符串

    NEXTTORAW

    將一個(gè)十六進(jìn)制字符串轉(zhuǎn)換為RAW數(shù)據(jù)類(lèi)型

    RAWTOHEX

    將一個(gè)RAW類(lèi)型的二進(jìn)制數(shù)據(jù)類(lèi)型轉(zhuǎn)換為一個(gè)十六進(jìn)制表達(dá)的字符串

    TO_MULTI_BYTE

    將一個(gè)單字節(jié)字符串轉(zhuǎn)換為多字節(jié)字符串

    TO_SINGLE_BYTE

    將一個(gè)多字節(jié)字符串轉(zhuǎn)換為單字節(jié)字符串

     

     

     

    集合函數(shù)

    函數(shù)

    描述

    AVG

    計(jì)算一列值的平均值

    COUNT

    統(tǒng)計(jì)一列中值的個(gè)數(shù)

    MAX

    求一列值中的最大值

    MIN

    求一列值中的最小值

    SUM

    計(jì)算一列值的總和

    STDDEV

    計(jì)算一列值的標(biāo)準(zhǔn)差

    VARIANCE

    計(jì)算一列值的方差

    posted @ 2009-07-16 21:26 Qzi 閱讀(521) | 評(píng)論 (0)編輯 收藏

    1、
      encodeURIComponent(”[string]“)
      decodeURIComponent(”[encodedString]“)

    2、
      encodeURI(”[string]“)
      decodeURI(”[encodedString]“)

    3、
      escape(”[string]“)
      unescape(”[encodedString]“)


    1、對(duì)每個(gè)字節(jié)進(jìn)行編碼;
    2、空格轉(zhuǎn)為”+”號(hào);
    3、安全字符不編碼。安全字符:大小寫(xiě)英文字母(a-z以及A-Z) 阿拉伯?dāng)?shù)字(0-9) \’ ( ) * - . _ !
    4、其他字節(jié)以十六進(jìn)制顯示并加”%”前綴,例如用%25代表%號(hào)。

    posted @ 2009-07-15 21:29 Qzi 閱讀(163) | 評(píng)論 (0)編輯 收藏

    設(shè)置客戶端字符集:
    # 常用中文字符集
    set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    # 常用unicode字符集
    set NLS_LANG=american_america.AL32UTF8

    exp 用戶名/密碼@主機(jī) file=導(dǎo)出文件的文件名 tables=(逗號(hào)分割表名)  log=aibsm.log feedback=200

    posted @ 2009-07-06 13:21 Qzi 閱讀(203) | 評(píng)論 (0)編輯 收藏

    1.Json的對(duì)象形式
    {
    property0 : true,                    //property0是一個(gè)布爾型的值
    property1 : 0,                        //property1是一個(gè)數(shù)值型的值
    property2 : "123",                 //property2是一個(gè)字符串型的值
    property3 : function(){...}     //property3是一個(gè)函數(shù)
    }
    使用key-value對(duì)構(gòu)造json對(duì)象,注意屬性的key和value使用“:”分開(kāi),屬性之間使用“,”分開(kāi),注意最后的屬性沒(méi)有“,”,什么符號(hào)都不要有。將此結(jié)構(gòu)直接賦值給js的對(duì)象,則可以使用這個(gè)對(duì)象調(diào)用這些屬性。
    例如:var obj1 = {
    property0 : true,                    //property0是一個(gè)布爾型的值
    property1 : 0,                        //property1是一個(gè)數(shù)值型的值
    property2 : "123",                 //property2是一個(gè)字符串型的值
    property3 : function(){...},     //property3是一個(gè)函數(shù)
    property4 : { p1 : p1Value, p2 : p2Value }    //property4本身又是一個(gè)對(duì)象
    }
    那么可以調(diào)用
    alert(obj1.property0);
    obj1.property3();
    ……
    在Java Web開(kāi)發(fā)中,服務(wù)端負(fù)責(zé)輸出這串字符到j(luò)sp頁(yè)面的js,就可以使用了。

    關(guān)鍵的是,字符串中可能具有js需要避免的特殊字符,建議查看一下spring的JavascriptUtils的javaScriptEscape方法就知道如何做啦
    如果是Ajax調(diào)用的話,就是用prototype庫(kù)的方法,將字符串轉(zhuǎn)換為json對(duì)象
    new Ajax.Request("http://url/", { 
      method: "get", 
      onSuccess: function(transport) { 
        var json = transport.responseText.evalJSON(); 
        // TODO: document.write(json.xxx); 
      } 
    prototype庫(kù)的官網(wǎng):    http://prototypejs.org/
     }); 
    2.    Json的數(shù)組形式
    其實(shí)js中的數(shù)組更像是一個(gè)Map對(duì)象,因?yàn)樗膋ey不只是整數(shù),還可以是字符串。
    var array;
    array["key0"] = key0Value;
    array["key1"] = key1Value;

    posted @ 2009-06-01 13:33 Qzi 閱讀(356) | 評(píng)論 (0)編輯 收藏

         摘要: 基本javascript事件的列表介紹  閱讀全文

    posted @ 2009-05-22 15:51 Qzi 閱讀(374) | 評(píng)論 (0)編輯 收藏

         摘要: 首先介紹一個(gè)網(wǎng)站,我很多書(shū)本都是在上面下載的,很好。http://www.freebookspot.in/
    我現(xiàn)在學(xué)習(xí)的書(shū)本是:Pro Javascript Design Pattern

    首先簡(jiǎn)單地為優(yōu)雅的Javascript代碼開(kāi)個(gè)頭

    運(yùn)用設(shè)計(jì)模式的三大原因:
    可維護(hù)性
    溝通交流性
    性能追求
    不使用設(shè)計(jì)模式的兩大原因:
    復(fù)雜性
    性能追求
      閱讀全文

    posted @ 2009-05-16 10:36 Qzi 閱讀(1819) | 評(píng)論 (2)編輯 收藏

    函數(shù):
    import導(dǎo)入文件的路徑、類(lèi)型、和title,title用來(lái)標(biāo)識(shí)你是否已導(dǎo)入這個(gè)文件用。
    setStyle用于使導(dǎo)入的css有效,根據(jù)不同的瀏覽器,可能css生效的條件不同,反復(fù)無(wú)效與有效間切換,可以使得最后有效。
     1function $import(path, type, title) {
     2    var s, i;
     3    if (type == "js"{
     4        var ss = document.getElementsByTagName("script");
     5        for (i = 0; i < ss.length; i++{
     6            if (ss[i].src && ss[i].src.indexOf(path) != -1{
     7                return;
     8            }

     9        }

    10        s = document.createElement("script");
    11        s.type = "text/javascript";
    12        s.src = path;
    13    }
     else {
    14        if (type == "css"{
    15            var ls = document.getElementsByTagName("link");
    16            for (i = 0; i < ls.length; i++{
    17                if (ls[i].href && ls[i].href.indexOf(path) != -1{
    18                    return;
    19                }

    20            }

    21            s = document.createElement("link");
    22            s.rel = "alternate stylesheet";
    23            s.type = "text/css";
    24            s.href = path;
    25            s.title = title;
    26            s.disabled = false;
    27        }
     else {
    28            return;
    29        }

    30    }

    31    var head = document.getElementsByTagName("head")[0];
    32    head.appendChild(s);
    33}

    34
    35function setStyle(title) {
    36    var i, links, eflag = false;
    37    links = document.getElementsByTagName("link");
    38    for (i = 0; links[i]; i++{
    39        if (links[i].getAttribute("rel").indexOf("style"!= -1 && links[i].getAttribute("title")) {
    40            links[i].disabled = true;
    41            if (links[i].getAttribute("title").indexOf(title) != -1{
    42                links[i].disabled = false;
    43                eflag = true;
    44            }

    45        }

    46    }

    47    if (!eflag) {
    48        $import("skin/" + title + "/default.css""css", title);
    49        setStyle(title);
    50    }

    51}

    posted @ 2009-02-18 12:43 Qzi 閱讀(969) | 評(píng)論 (0)編輯 收藏

    最大公約數(shù):使用輪轉(zhuǎn)相除法,它的原理是:(n1>n2)n1與n2的最大公約數(shù)等于n2與n1%n2的最大公約數(shù),即
    gcd(n1, n2)=gcd(n2, n1%n2)
    最大公約數(shù)

    素?cái)?shù)篩選法:原理是:
    1)0與1不是素?cái)?shù);
    2)素?cái)?shù)的2倍以上倍數(shù)不是素?cái)?shù)
    所以剔除這些剩下的就是素?cái)?shù)了
    素?cái)?shù)篩選法


    posted @ 2008-11-29 21:58 Qzi 閱讀(427) | 評(píng)論 (0)編輯 收藏

    http://wiki.ubuntu.org.cn/Tomcat%E8%AE%BE%E7%BD%AEJSP%E7%8E%AF%E5%A2%83

    posted @ 2008-11-28 22:37 Qzi 閱讀(299) | 評(píng)論 (0)編輯 收藏

    jms:
    (Java   Message   Service)    
      JMS定義了Java中訪問(wèn)消息中間件的接口。    
       
      JMS只是接口,并沒(méi)有給予實(shí)現(xiàn),實(shí)現(xiàn)JMS接口的消息中間件叫JMS   Provider,這樣的消息中間件可以從Java里通過(guò)JMS接口進(jìn)行調(diào)用。    
       
      JMS   消息模型    
      JMS消息由兩部分構(gòu)成:header和body。header包含消息的識(shí)別信息和路由信息,body包含消息的實(shí)際數(shù)據(jù)。    
       
      根據(jù)數(shù)據(jù)格式,JMS消息可分為以下五種:    
       
      BytesMessage   消息是字節(jié)流。    
      MapMessage   消息是一系列的命名和值的對(duì)應(yīng)組合。    
      ObjectMessage   消息是一個(gè)流化的Java對(duì)象。    
      StreamMessage   消息是Java中的輸入輸出流。    
      TextMessage   消息是一個(gè)字符串,這種類(lèi)型將會(huì)廣泛用于XML格式的數(shù)據(jù)。

    cms:
    Content Management System,CMS其實(shí)就是內(nèi)容管理系統(tǒng),,,可以理解為,CMS幫你把一個(gè)網(wǎng)站的程序部分的事全做完了 你要做的只是一個(gè)網(wǎng)站里面美工的部份,搞幾個(gè)靜態(tài)網(wǎng)頁(yè)模板,一個(gè)門(mén)戶級(jí)的網(wǎng)站就出來(lái)了!

    CMS,大概2004以前,如果想進(jìn)行網(wǎng)站內(nèi)容管理,基本上都是靠手工維護(hù),但千變?nèi)f化的信息流,但沒(méi)有好的程序支持,還繼續(xù)靠手工完成是不可能的事,如果有一個(gè)好的系統(tǒng)來(lái)支撐你的網(wǎng)站,那將節(jié)省大量的人力物力,開(kāi)發(fā)者就可能給客戶一個(gè)軟件包,可以用它定期人工修改網(wǎng)站。只要你配置安裝好,你的編輯,在線記者,更新員只要定期更新數(shù)據(jù),剩下的事就交給CMS去處理

    posted @ 2008-11-14 08:14 Qzi 閱讀(199) | 評(píng)論 (0)編輯 收藏

    基本類(lèi)型:
    布爾類(lèi)型:boolean不能夠自動(dòng)也不能強(qiáng)制轉(zhuǎn)換成其他類(lèi)型,但是可以進(jìn)行&,&&,|,||運(yùn)算
    字符類(lèi)型:char(16)其他基本類(lèi)型不能夠自動(dòng)轉(zhuǎn)變?yōu)樽址?lèi)型,但可以強(qiáng)制轉(zhuǎn)換為char,但是可以有截?cái)喱F(xiàn)象
    整形類(lèi)型:byte(8),short(16),int(32),long(64)初始化的時(shí)候都是使用整數(shù)字面量直接賦值,但是byte與byte,short與short變量相加,默認(rèn)都得到int的值,所以必須強(qiáng)制轉(zhuǎn)換才能夠返回原來(lái)類(lèi)型的值(例如:(byte)(b1+b2))
    浮點(diǎn)類(lèi)型:float(32),double(64)浮點(diǎn)數(shù)的字面量默認(rèn)都是double類(lèi)型,所以需要強(qiáng)制轉(zhuǎn)換成float才能夠初始化float,或者加上f或F后綴。(例如float f1 = 1.4F或者float f1 = (float)1.4

    整形還可以使用八進(jìn)制(以0開(kāi)頭的整形數(shù)字字面量)、十六進(jìn)制(以0x開(kāi)頭的整形字面量)初始化;
    浮點(diǎn)型:字面量不可以是八進(jìn)制十六進(jìn)制,但int可以自動(dòng)轉(zhuǎn)化為浮點(diǎn),所以仍然可以使用8進(jìn)制16進(jìn)制初始化,但是可以使用浮點(diǎn)計(jì)數(shù)法初始化,同樣可以加上f或d后綴,例1.23e+33F等
    字符型char可以直接使用

    unicode轉(zhuǎn)義符:
    \uXXXX 四個(gè)16進(jìn)制的數(shù),在文本里面就是代表著某個(gè)字符,所以可以'\uXXXX'初始化一個(gè)char,可以\u0022\uXXXX\u0022初始化一個(gè)String,因?yàn)閯偤肻u0022代表雙引號(hào)。當(dāng)然\uXXXX不能是雙引號(hào),否則就編譯出錯(cuò)了。

    自動(dòng)類(lèi)型轉(zhuǎn)換:byte---short---int---long---float---double
    但是short與char不能夠相互自動(dòng)轉(zhuǎn)換,但是可以相互強(qiáng)制轉(zhuǎn)換
    整型字面量可以初始化char,只要不超過(guò)65535的范圍,也就是也能夠使用8進(jìn)制16進(jìn)制初始化,但是整型變量不能夠賦值給char;
    char可以自動(dòng)轉(zhuǎn)換成int及以上

    變量聲明與定義:
    int[] intArray;    //OK
    int intArray[];    //OK
    前面的加上 “= new int[變量or常量]” 都是可以的,但是“= new int(5)”是錯(cuò)誤的
    int[] intArray[];  //OK,但是代表的是數(shù)組的數(shù)組
    int[5] intArray;  //False
    int intArray[5];  //False

    三目運(yùn)算符:
    ?:返回不同類(lèi)型問(wèn)題,跟C++稍微不同,無(wú)論返回值在第一表達(dá)式還是第二表達(dá)式,返回值都是根據(jù)高階類(lèi)型返回,例子:
    true ? 'a' : 9          返回結(jié)果是字符類(lèi)型,所以字符類(lèi)型是高階類(lèi)型
    true ? 'a' : 9.0       返回結(jié)果是浮點(diǎn)類(lèi)型(對(duì)于double和float都是),所以浮點(diǎn)比字符類(lèi)型高階
    ture ? 9 : 9.0        返回結(jié)果是浮點(diǎn)類(lèi)型,明顯
    true ? "abc" : 9     返回結(jié)果是字符串類(lèi)型,因?yàn)樽址?lèi)型較高階
    true ? 對(duì)象1實(shí)例 : 對(duì)象2實(shí)例      返回結(jié)果是最大共同父類(lèi),所以如果其中一個(gè)是另外一個(gè)的子類(lèi),那么就返回父類(lèi),如果互不繼承關(guān)系,則返回Object。

    String總結(jié):
    首先聲明,==判斷是判斷對(duì)象引用的實(shí)例是否相同,即實(shí)例是否真正在相同的位置
    Object默認(rèn)的equals方法與==是一樣的(就是引用相同實(shí)例),String類(lèi)重寫(xiě)equals方法和hashCode方法,只要內(nèi)容相同就返回ture(一般自己寫(xiě)的類(lèi)也建議重寫(xiě)equals方法和hashCode方法)。所以這時(shí)候==與equals就具有不相同意義了。
    http://www.javaeye.com/topic/122206
    1. 首先String不屬于8種基本數(shù)據(jù)類(lèi)型,String是一個(gè)對(duì)象。
     因?yàn)閷?duì)象的默認(rèn)值是null,所以String的默認(rèn)值也是null;但它又是一種特殊的對(duì)象,有其它對(duì)象沒(méi)有的一些特性。
    2. new String()和new String("")都是申明一個(gè)新的空字符串,是空串不是null;
    3. String str="string";
    String str1="string";
    String str2=new String ("string");
    String str3="str" + new String("ing");
    關(guān)于常量池概念,java虛擬機(jī)在常量池中只維持一個(gè)字符串的示例,所以str與str1引用都是引用常量池里面的共同實(shí)例,關(guān)鍵的是只有常量池里面的String才是唯一的,new空間里面的并不是。
    但是str2,str3(而且str2與str3的空間地址也肯定不一樣的,引用的是新建空間堆里的實(shí)例,所以str==str1,str!=str2,str1!=str2,str1!=str3,str2!=str3
    但是它們幾個(gè)使用equals都是返回true的,因?yàn)镾tring類(lèi)的hashCode函數(shù)根據(jù)內(nèi)容返回hashCode碼,這個(gè)碼相同,則equals就返回true了,具體的equals與hashCode解釋可以參照《java核心技術(shù) 卷1 基礎(chǔ)知識(shí)》
    注意:成員函數(shù)intern() :
    當(dāng)一個(gè)String實(shí)例str調(diào)用intern()方法時(shí),Java查找常量池中是否有相同Unicode的字符串常量,如果有,則返回其的引用,如果沒(méi)有,則在常量池中增加一個(gè)Unicode等于str的字符串并返回它的引用;
    所以:
    String str1="string";
    String str2=new String ("string");
    str1==str2.intern()          返回true

    posted @ 2008-11-09 10:26 Qzi 閱讀(326) | 評(píng)論 (0)編輯 收藏

    參考java core總結(jié),java 5與之前的不同包括:

    1.泛型編程

    2.包裝類(lèi)的自動(dòng)打包拆包

    3.格式化輸出:增加printf函數(shù)

    4.StringBuilder類(lèi):非線程安全的StringBuffer

    5.可變參數(shù)列表:聲明方式public void mymethod(String arg1,Object… args),記住...號(hào)

    6.增強(qiáng)的for循環(huán):for(type variable:數(shù)組或數(shù)組列表)

    7.靜態(tài)導(dǎo)入:import static 導(dǎo)入類(lèi) 就可以使用本地方法一樣使用導(dǎo)入類(lèi)的靜態(tài)方法

    8.協(xié)變的返回類(lèi)型,即override的函數(shù)可以返回原函數(shù)返回類(lèi)型的子類(lèi)型,而不是要求相同返回類(lèi)型

    9.控制臺(tái)輸入

    10.內(nèi)容窗格授權(quán):JframeJDialogJApplet可以使用addsetLayout函數(shù),以前需要getContentPane().add(component)getContentPane().setLayout(manager);

    posted @ 2008-10-21 20:45 Qzi 閱讀(245) | 評(píng)論 (0)編輯 收藏

     

    測(cè)試:定義為在受控的條件下對(duì)應(yīng)用程序進(jìn)行操作,以對(duì)程序質(zhì)量進(jìn)行評(píng)估

     

    質(zhì)量:可以定義為產(chǎn)品的優(yōu)點(diǎn)(特性)減去其中存在的問(wèn)題(bug

     

    測(cè)試的重要性:測(cè)試的反面是不測(cè)試,即把程序驗(yàn)證工作都丟到軟件開(kāi)發(fā)完畢或者交付給客戶。辯駁觀點(diǎn)是:越遲發(fā)現(xiàn)程序的問(wèn)題,修復(fù)其的成本越高。

     

    測(cè)試人員做什么:保證程序的bug是影響最小的bug,將程序的bug降到最小風(fēng)險(xiǎn)。

     

    測(cè)試與QAQuality Assurance)的區(qū)別:QA關(guān)注軟件工程的過(guò)程,通過(guò)改善過(guò)程提高軟件的質(zhì)量,他不對(duì)軟件進(jìn)行剖析以找出問(wèn)題,而只是驗(yàn)證軟件是否滿足一套已定義的質(zhì)量標(biāo)準(zhǔn)和用戶協(xié)議。

    測(cè)試更關(guān)心的是剖析軟件,觀察軟件的運(yùn)行,并在質(zhì)量?jī)?nèi)部層次進(jìn)行報(bào)告,發(fā)現(xiàn)軟件的bug

     

    測(cè)試人員素質(zhì):驗(yàn)證、檢測(cè)、防范、反映。

     

    bug:是沒(méi)有預(yù)料到的行為,軟件做了某些認(rèn)為是錯(cuò)誤的事情。

     

    自動(dòng)化測(cè)試:使用軟件工具來(lái)代替手工進(jìn)行的一系列動(dòng)作,通常使用腳本或者代碼驅(qū)動(dòng)應(yīng)用程序,可以通過(guò)可視用戶界面完成,或者直接命令模擬客戶端功能。

    構(gòu)建版本驗(yàn)證測(cè)試(Build verification test, BVT)針對(duì)軟件最新版本而做的一些列自動(dòng)化測(cè)試;回歸測(cè)試(Regression testing)測(cè)試以前曾經(jīng)正常工作的場(chǎng)景,確保代碼修改后沒(méi)有打破原來(lái)的功能或者產(chǎn)生其他方面的副作用。

    posted @ 2008-10-21 20:43 Qzi 閱讀(228) | 評(píng)論 (0)編輯 收藏

    線程生命周期:新建線程、排隊(duì)、運(yùn)行、等待、死亡,明顯包含了下面線程生存期的三種狀態(tài)。

    線程生存期三種狀態(tài):就緒、運(yùn)行、等待(掛起)

    與線程相關(guān)的一些函數(shù)區(qū)別:

    線程暫停或者停止:stopsuspendsleepwait

    成員方法stop會(huì)解除由線程獲得的所有鎖定,并且使線程進(jìn)入死亡狀態(tài),相當(dāng)于run方法的被強(qiáng)制中斷;

    成員方法suspend仍然持有線程之前的所有鎖定,并且使線程進(jìn)入等待狀態(tài),需要使用resume重激活;

    靜態(tài)方法 sleep不釋放對(duì)象鎖,可以指定暫停線程的mini Seconds數(shù),暫停當(dāng)前線程;

    成員方法wait導(dǎo)致本線程放棄對(duì)象鎖,進(jìn)入掛起狀態(tài),并且需要通過(guò)notify或者notifyAll來(lái)使線程進(jìn)入就緒狀態(tài);

     

    線程池機(jī)制:

    線程池管理器:創(chuàng)建銷(xiāo)毀線程池、將工作線程放入線程池

    工作線程:執(zhí)行任務(wù)(即任務(wù)接口)的線程,在沒(méi)有任務(wù)時(shí)候等待

    任務(wù)隊(duì)列:提供線程申請(qǐng)緩沖機(jī)制

    任務(wù)接口:規(guī)定任務(wù)的入口、任務(wù)執(zhí)行完后的收尾工作、任務(wù)的執(zhí)行狀態(tài)

    posted @ 2008-10-21 20:43 Qzi 閱讀(267) | 評(píng)論 (0)編輯 收藏

    ZIP壓縮IO涉及類(lèi)(包括操作文件夾壓縮)

    ZipEntry標(biāo)識(shí)zip文件中單個(gè)文件的入口,它也支持路徑加文件名,所以通過(guò)配置它,可以建立目錄層次的zip文件(見(jiàn)下例子)

    ZipOutputStreamwrite數(shù)據(jù)到zip文件的對(duì)象

    ZipInputStream,從zip文件中read數(shù)據(jù)的對(duì)象,其實(shí)基本上這個(gè)沒(méi)有作用

    ZipFile,獲取zip文件里面單個(gè)文件入口,getInputStream()等信息的對(duì)象,初始化ZipFile zf = new ZipFile(zip壓縮文件的File對(duì)象);

               Enumeration entries = =zf.entries()可以獲得所有的zip文件里面的文件入口。

    原理就是:entry指定單個(gè)文件相對(duì)zip壓縮文件內(nèi)部根目錄的位置,Stream操作輸出輸入,ZipFile代表的就是整個(gè)zip文件


    示例代碼

    JAR壓縮類(lèi)與ZIP是幾乎一模一樣對(duì)應(yīng)的分別為:JarEntry JarFile JarInputStream JarOutputStream

    GZIP格式,只提供GZIPInputStream和GZIPOutputStream類(lèi),因?yàn)槠渥饔檬菃渭兊膲嚎s與解壓,不維護(hù)文件結(jié)構(gòu)。多數(shù)用于基于流的數(shù)據(jù)傳送過(guò)程實(shí)現(xiàn)數(shù)據(jù)壓縮。用法就如Bufer Stream一樣,是stream之間的又一個(gè)過(guò)濾類(lèi),只是Buffer提供緩沖,而GZIP提供壓縮。
    例如需要網(wǎng)絡(luò)傳送壓縮就可以這樣做:
    客戶端:
    Socket socket = new Socket(服務(wù)器地址字符串, 服務(wù)器端口);
    BufferOutputStream out = new BufferOutPutStream(new GZIPOutputStream(socket.getOutputStream()));
    然后就可以操作數(shù)據(jù)輸出了
    服務(wù)器端:
    ServerSocket sSocket =   new ServerSocket(服務(wù)器端口);
    Socket socket = sSocket.accept();
    BufferInputStream in = new BufferInputStream(new GZIPInputStream(socket.getInputStream()));
    然后就可以讀入數(shù)據(jù)了。
    明顯網(wǎng)絡(luò)數(shù)據(jù)傳送就加了一個(gè)壓縮,性能就可以提高了。

    posted @ 2008-10-07 14:15 Qzi 閱讀(1722) | 評(píng)論 (0)編輯 收藏

         摘要: 元字符

    \w 匹配字母或數(shù)字或下劃線或漢字等。等效于Unicode字符類(lèi)別 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]。如果用ECMAScript選項(xiàng)指定了符合 ECMAScript的行為,則\w只等效于[a-zA-Z_0-9]。

    \b 單詞的開(kāi)頭或結(jié)尾,如果需要更精確的說(shuō)法,\b匹配這樣的位置:它的前一個(gè)字符和后一個(gè)字符不全是\w

    . 除換行符以外的所有字符

    * 表示數(shù)量,任意數(shù)量,所以 .* 加起來(lái)就表示除換行符以外的任意數(shù)量字符,\w*表示任意字符

    + 是和*類(lèi)似的元字符,不同的是*匹配重復(fù)任意次(可能是0次),而+則匹配重復(fù)1次或更多次。

    \d 單個(gè)數(shù)字

    \s 匹配任意的空白符,包括空格,制表符(Tab),換行符,中文全角空格等。

    ^ 匹配你要用來(lái)查找的字符串的開(kāi)頭,$匹配結(jié)尾。和忽略大小寫(xiě)的選項(xiàng)類(lèi)似,有些正則表達(dá)式處理工具還有一個(gè)處理多行的選項(xiàng)。如果選中了這個(gè)選項(xiàng),^和$的意義就變成了匹配  閱讀全文

    posted @ 2008-10-04 20:00 Qzi 閱讀(810) | 評(píng)論 (0)編輯 收藏

    Pattern類(lèi):
    例子:
            Pattern pattern = Pattern.compile("[,\\s]+");
            String[] result = pattern.split("one two three,four,five, six");
            for(int i = 0; i<result.length; i++){
                System.out.println(result[i]);
            }
    輸出結(jié)果是:
    one
    two
    three
    four
    five
    six
    Pattern類(lèi)的靜態(tài)方法compile用來(lái)編譯正則表達(dá)式,在此[,\\s]+表示若干個(gè)","或者若干個(gè)空格匹配
    split方法使用正則匹配將字符串切割成各子串并且返回

    Matcher類(lèi):
    注意,Matcher的獲得是通過(guò)Pattern.matcher(CharSequence charSequence);輸入必須是實(shí)現(xiàn)了CharSequence接口的類(lèi)
    常用方法:
    matches()判斷整個(gè)輸入串是否匹配,整個(gè)匹配則返回true
    例如下面會(huì)輸出true
            String str1 = "hello";
            Pattern pattern1 = Pattern.compile("hello");
            Matcher matcher1 = pattern1.matcher(str1);
            System.out.println(matcher1.matches());

    lookingAt()從頭開(kāi)始尋找,找到匹配則返回true
    例如下面會(huì)輸出true
            String str2 = "hello yangfan!";
            Pattern pattern2 = Pattern.compile("hello");
            Matcher matcher2 = pattern2.matcher(str2);
            System.out.println(matcher2.lookingAt());

    find()掃描輸入串,尋找下一個(gè)匹配子串,存在則返回true
    例如下面將會(huì)將所有no替換成yes
            Pattern pattern = Pattern.compile("no");
            Matcher matcher = pattern.matcher("Does jianyue love yangfan? no;" +
                    "Does jianyue love yangfan? no;Does jianyue love yangfan? no;");
            StringBuffer sb = new StringBuffer();
            boolean find = matcher.find();
            while(find){
                matcher.appendReplacement(sb, "yes");
                find = matcher.find();
            }
            matcher.appendTail(sb);
            System.out.println(sb.toString());

    posted @ 2008-10-04 19:50 Qzi 閱讀(1049) | 評(píng)論 (0)編輯 收藏

    初始化:
    StringTokenizer st = new StringTokenizer(String str);
    默認(rèn)的分隔符,即空白符(空格、制表符、回車(chē))
    或者
    StringTokenizer st = new StringTokenizer(String str, String token);
    使用token作為分隔符

    常用函數(shù):
    st.countTokens()返回token的數(shù)量
    st.hasMOreTokens()判斷時(shí)候當(dāng)前位置之后是否還有token
    st.nextToken()返回當(dāng)前位置到下一個(gè)token之前或者字符串結(jié)束之前的字符串

    簡(jiǎn)單示例:
            String str = "wo shi li jian yue, what your name? yangfan?";
            String[] stringArray = new String[100];
            StringTokenizer st = new StringTokenizer(str, ",");
            int i;
            for(i = 0; st.hasMoreTokens(); i++){
                stringArray[i] = st.nextToken();
            }
            for(int j = 0; j<i; j++){
                System.out.println(stringArray[j]);
            }
    以","為分隔符,將會(huì)輸出","之前和之后的兩行字符串

    posted @ 2008-10-04 18:01 Qzi 閱讀(262) | 評(píng)論 (0)編輯 收藏

     

    創(chuàng)建 Filter(過(guò)濾器)

     實(shí)際開(kāi)發(fā)中都需要開(kāi)發(fā)一些很有用的過(guò)濾器,來(lái)解決中文表單提交問(wèn)題啊,給請(qǐng)求和響

    應(yīng)加入 GZIP壓縮功能啊,用戶權(quán)限控制啊,等等,然而遺憾的 MyEclipse不支持直接創(chuàng)建

    過(guò)濾器。在這里只好手工創(chuàng)建一個(gè)解決 Tomcat表單提交中文問(wèn)題的過(guò)濾器。

     選擇菜單 File > New > Class,來(lái)創(chuàng)建一個(gè)名為 TomcatFormFilter 的類(lèi),包名為

    filters。然后把類(lèi)的代碼修改為如下所示:

    package filters;

    import java.io.IOException;

    import javax.servlet.Filter;

    import javax.servlet.FilterChain;

    import javax.servlet.FilterConfig;

    import javax.servlet.ServletException;

    import javax.servlet.ServletRequest;

    import javax.servlet.ServletResponse;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletRequestWrapper;

    public class TomcatFormFilter implements Filter {

     /**

       * Request.java

       * 對(duì) HttpServletRequestWrapper 進(jìn)行擴(kuò)充, 不影響原來(lái)的功能并能提供所

    有的 HttpServletRequest

       * 接口中的功能. 它可以統(tǒng)一的對(duì) Tomcat 默認(rèn)設(shè)置下的中文問(wèn)題進(jìn)行解決而只

    需要用新的 Request 對(duì)象替換頁(yè)面中的

       * request 對(duì)象即可.

       */

     class Request extends HttpServletRequestWrapper

     {

          public Request(HttpServletRequest request) {

            super(request);

          }

       /**

       * 轉(zhuǎn)換由表單讀取的數(shù)據(jù)的內(nèi)碼.

       * ISO 字符轉(zhuǎn)到 GBK.

       */

       public String toChi(String input) {

          try {

              byte[] bytes = input.getBytes("ISO8859-1");

              return new String(bytes, "GBK");

            }

          catch (Exception ex) {

            }

          return null;

     }

          /**

           * Return the HttpServletRequest holded by this object.

           */

          private HttpServletRequest getHttpServletRequest()

          {

              return (HttpServletRequest)super.getRequest();

          }

       /**

       * 讀取參數(shù) -- 修正了中文問(wèn)題.

       */

          public String getParameter(String name)

          {

            return

    toChi(getHttpServletRequest().getParameter(name));

          }

       /**

       * 讀取參數(shù)列表 - 修正了中文問(wèn)題.

       */

          public String[] getParameterValues(String name)

          {

              String values[] =

    getHttpServletRequest().getParameterValues(name);

              if (values != null) {

                for (int i = 0; i < values.length; i++) {

                  values[i] = toChi(values[i]);

                }

              }

              return values;

          }

     }

     public void destroy() {

     }

     public void doFilter(ServletRequest request, ServletResponse

    response,

       FilterChain chain) throws IOException, ServletException {

        HttpServletRequest httpreq = (HttpServletRequest)request;

       if(httpreq.getMethod().equals("POST")) {

       request.setCharacterEncoding("GBK");

     } else {

       request = new Request(httpreq);

     }

     chain.doFilter(request, response);

     }

     public void init(FilterConfig filterConfig) throws

    ServletException {

     }

    }

    清單 8.5 過(guò)濾器代碼

    然后修改 web.xml 加入 Servlet 定義,修改后的代碼清單如下所示:

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

    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

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

     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

     <servlet>

       <description>

          This is the description of my J2EE component

       </description>

       <display-name>

          This is the display name of my J2EE component

       </display-name>

       <servlet-name>LoginServlet</servlet-name>

       <servlet-class>servlets.LoginServlet</servlet-class>

     </servlet>

     <filter>

       <filter-name>TomcatFormFilter</filter-name>

       <filter-class>filters.TomcatFormFilter</filter-class>

     </filter>

     <filter-mapping>

       <filter-name>TomcatFormFilter</filter-name>

       <url-pattern>/*</url-pattern>

     </filter-mapping>

     <servlet-mapping>

       <servlet-name>LoginServlet</servlet-name>

       <url-pattern>/login.aspx</url-pattern>

     </servlet-mapping>

     <welcome-file-list>

       <welcome-file>index.jsp</welcome-file>

     </welcome-file-list>

    </web-app>

    清單 8.6加入了過(guò)濾器的 web.xml 內(nèi)容

    清單中的粗斜體部分就是新加入的過(guò)濾器的映射信息。

    posted @ 2008-10-01 09:52 Qzi 閱讀(2479) | 評(píng)論 (1)編輯 收藏

    一.繼承關(guān)系和關(guān)聯(lián)聚集關(guān)系映射
    1.整個(gè)類(lèi)層次使用一張表
    2.每個(gè)葉結(jié)點(diǎn)使用一張表,該表保存了該類(lèi)自己的和所繼承的所有屬性
    3.每個(gè)類(lèi)使用一張表,該表只保存OID以及對(duì)應(yīng)類(lèi)自己的屬性(不含所繼承的屬性)

    1.“1對(duì)1”或“1對(duì)多”關(guān)系的映射,簡(jiǎn)單地利用外鍵即可
    2.“多對(duì)多”關(guān)系的映射,引入一個(gè)新的表,專門(mén)記錄這種“多對(duì)多”關(guān)系

    二.編程步驟:事前準(zhǔn)備包括建立一個(gè)project并且加入外部庫(kù)
    新建一個(gè)Project HibernateSample,然后在Project上點(diǎn)右鍵,選擇Properties ? Java Build Path ? Libraries。選擇Add External JARs,然后將Hibernate目錄下的hibernate3.jar,以及Hibernate目錄下的lib文件夾中所有的jar文件添加進(jìn)來(lái)。
    另外我們還必須有MySQL的JDBC驅(qū)動(dòng),用上面的辦法同樣把mysql-connector-java-3.1.12-bin.jar添加進(jìn)我們的Build Path中。

    1.創(chuàng)建數(shù)據(jù)庫(kù)(例如User表)
    2.建立對(duì)應(yīng)數(shù)據(jù)庫(kù)的類(lèi)的屬性與操作(例如User類(lèi))
    3.編寫(xiě)映射數(shù)據(jù)庫(kù)表hibernate mapping,命名為***.hbm.xml(例如User.hbm.xml)
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
     <class name="sample.User" table="user">
      <id name="id" column="id" type="java.lang.Integer">
       <generator class="native" />
      </id>
      <property name="name" column="name" type="java.lang.String" />
      <property name="age" column="age" type="java.lang.Integer" />
     </class>
    </hibernate-mapping>
    明顯可見(jiàn)關(guān)注點(diǎn)包括
    A)class中包中的類(lèi)與數(shù)據(jù)庫(kù)中table的對(duì)應(yīng)
    B)property中 類(lèi)中ID和屬性與table中字段的對(duì)應(yīng)

    4.編寫(xiě)Hibernate配置文件hibernate configurarion file,通常命名:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
     <session-factory>
      <!-- 是否顯示實(shí)際操作數(shù)據(jù)庫(kù)時(shí)的SQL -->
      <property name="show_sql">true</property>
      <!-- SQL方言,這邊設(shè)定的是MySQL -->
      <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
      <!-- JDBC驅(qū)動(dòng)程序 -->
      <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
      <!-- JDBC URL -->
      <property name="connection.url">jdbc:mysql://localhost/Sample</property>
      <!-- 數(shù)據(jù)庫(kù)用戶名 -->
      <property name="connection.username">root</property>
      <!-- 數(shù)據(jù)庫(kù)密碼 -->
      <property name="connection.password">123456</property>
      <!-- 以下設(shè)置對(duì)象與數(shù)據(jù)庫(kù)表格映像文件 -->
      <mapping resource="sample/User.hbm.xml"/>
     </session-factory>
    </hibernate-configuration>
    關(guān)注點(diǎn)包括:
    A)數(shù)據(jù)庫(kù)路徑, 數(shù)據(jù)庫(kù)用戶名, 數(shù)據(jù)庫(kù)密碼,
    B)還有就是指定數(shù)據(jù)庫(kù)映射文件mapping resource

    5.配置log4j.properties
    在src目錄下點(diǎn)右鍵,選擇import,然后選擇General ? File System,接著選擇Hibernate文件夾下的etc文件夾,再選擇log4j.properties文件,最后選擇Finish。
    關(guān)鍵配置文件:
    hbm是映射配置
    cfg是密碼,用戶,以及hbm指定配置
    properties是用于配置當(dāng)前數(shù)據(jù)庫(kù)連接的屬性配置

    6.編程操作數(shù)據(jù)庫(kù)過(guò)程
    使用對(duì)象增加數(shù)據(jù)項(xiàng):
    A)Configuration配置Configuration config = new Configuration().configure();
    B)Session工廠獲得SessionFactory sessionFactory = config.buildSessionFactory();
    C)Session獲得Session session = sessionFactory.openSession();
    D)Transaction事務(wù)啟動(dòng)Transaction tx = session.beginTransaction();
    E)建立映射數(shù)據(jù)的實(shí)體類(lèi)(例如User的一個(gè)實(shí)例)
    F)session操作(例如session.save(user)插入到數(shù)據(jù)庫(kù)一個(gè)user的對(duì)象)
    G)關(guān)鍵的Transaction事務(wù)提交,tx.commit();
    H)清理包括Transaction對(duì)象,session對(duì)象,sessionFactory對(duì)象的有順序清理

    使用Criteria查詢數(shù)據(jù)
    A)配置Configuration,SessionFactory,Session與上面相同
    B)創(chuàng)建Criteria criteria=session.createCriteria(User.class);
    C)創(chuàng)建User列表List users = criteria.list();
    D)使用迭代器Iterator iterator = users.iterator();
    E)iterator.hasNext(),iterator.next()的使用
    F)criteria.add(Expression.eq("name","hibernateUser2"));加上查詢約束
    G)users = criteria.list();將會(huì)按照查詢約束得到列表.

    使用鼓勵(lì)的HQL的Query查詢
    A)創(chuàng)建Query例如Query query = session.createQuery("from User");
    B)獲得數(shù)據(jù)List uers = query.list();
    C)遍歷器使用Iterator iterator = users.iterator();又如iterator.hasNext();和iterator.next();
    D)使用過(guò)濾查詢
    query = session.createQuery("from User user where user.name like ?");
    query.setParameter(0, "hibernateUser2");Query的setParameter()方法第一個(gè)參數(shù)是指定 ? 出現(xiàn)的位置,從 0 開(kāi)始,第二個(gè)參數(shù)則是設(shè)定查詢條件。
    然后再List uers = query.list();獲得的將是滿足username==hibernateUser2的條件的結(jié)果
    E)清除session和sessionFactory使用close方法.


    hibernate_rar

    posted @ 2008-10-01 09:49 Qzi 閱讀(345) | 評(píng)論 (0)編輯 收藏

    • validate: validate the project is correct and all necessary information is available
    • compile: compile the source code of the project
    • test: test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
    • package: take the compiled code and package it in its distributable format, such as a JAR.
    • integration-test: process and deploy the package if necessary into an environment where integration tests can be run
    • verify: run any checks to verify the package is valid and meets quality criteria
    • install: install the package into the local repository, for use as a dependency in other projects locally
    • deploy: done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

    There are two other Maven lifecycles of note beyond the default list above. They are

    • clean: cleans up artifacts created by prior builds
    • site: generates site documentation for this project

    官網(wǎng)文章:http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

    posted @ 2008-09-16 17:06 Qzi 閱讀(505) | 評(píng)論 (0)編輯 收藏

    參考站點(diǎn):都是英文站點(diǎn)。
    第一步站:http://www.eclipse.org/subversive/downloads.php
    里面會(huì)有介紹安裝的總領(lǐng)式介紹,他說(shuō)需要兩個(gè)升級(jí)來(lái)支持這個(gè)插件,一個(gè)在本站可下,一個(gè)需要在外部站點(diǎn)下。
    其中提供三個(gè)版本release,他推薦使用第二個(gè)。
    第二步站:http://www.eclipse.org/subversive/documentation/gettingStarted/aboutSubversive/install.php
    詳細(xì)的安裝步驟,是按照Ganymede Release介紹的,其實(shí)將那幾個(gè)update site改成Latest Release的update site選上相同的
    包,也是一樣的。但是注意:
    最后一個(gè)Subversive Integration Plug-in's就不要好啦,要了也裝不上,會(huì)報(bào)依賴不滿足的不能安裝的
    第三步站:http://www.polarion.com/products/svn/subversive.php?src=eclipseproject
    這個(gè)就是外部的提供另一個(gè)站點(diǎn),提供connetor和Integration Plug-in's(裝不上)的站點(diǎn)。

    我用到的update site是:http://download.eclipse.org/technology/subversive/0.7/update-site/
    http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/

    http://www.polarion.org/projects/subversive/download/integrations/update-site/ 這個(gè)也用不上,其實(shí)

    posted @ 2008-09-05 11:07 Qzi 閱讀(1247) | 評(píng)論 (0)編輯 收藏

    1 String lastUrl = request.getHeader("Referer");
    不好意思,下面的說(shuō)錯(cuò)了(所以都標(biāo)紅了),不過(guò)的確這個(gè)方法在有框架的時(shí)候性能還不清楚,
    貌似是:
    在多個(gè)框架中,IE的情況是:如果將在frame觸發(fā)的鏈接顯示在frame2中,frame2的Referer就不會(huì)改變。firefox的情況是,會(huì)變,所以firefox處理的更好。
    請(qǐng)有識(shí)之士教導(dǎo)。

    使用到方法來(lái)獲得上一次路徑的請(qǐng)注意了,如果頁(yè)面涉及到框架frame的話,請(qǐng)留意firefox與IE的不同。

    假如頁(yè)面具有整個(gè)頁(yè)面,上,左,右三個(gè)frame四個(gè)所謂的windows,假設(shè)每一個(gè)frame都有自己地址欄,當(dāng)然真實(shí)的地址欄只有整個(gè)頁(yè)面的一個(gè)。
    我出現(xiàn)的情況是:
    1)firefox中:一個(gè)右frame的jsp頁(yè)面進(jìn)入的struts的action,在這個(gè)action使用這個(gè)函數(shù),能夠獲得右frame地址欄原來(lái)的字符串。在右frame頁(yè)面里使用這個(gè)函數(shù),也能夠獲得右frame原來(lái)的地址欄的字符串。 算是比較正常吧,獲得所謂的referer的字符串嘛。
    2)IE中:一個(gè)右frame的jsp頁(yè)面進(jìn)入的一個(gè)action,使用這個(gè)函數(shù),獲得的是整個(gè)頁(yè)面的地址欄原來(lái)的字符串。在右frame頁(yè)面里使用這個(gè)函數(shù),卻獲得的是右frame地址欄原來(lái)的字符串。 這樣就不正常啦,我在action里使用獲得的竟然是整個(gè)頁(yè)面的地址欄原來(lái)的字符串,那樣我new ActionForward(這個(gè)url)的時(shí)候,就會(huì)出現(xiàn)框架嵌套框架啦。


    這些問(wèn)題應(yīng)該是跟瀏覽器的實(shí)現(xiàn)有關(guān)。

    我用這個(gè)函數(shù)主要是想實(shí)現(xiàn)返回上一步的功能。但是上一步的路徑獲得那么可預(yù)測(cè),這種方法獲得之前頁(yè)面看來(lái)是不能信賴地用的。

    posted @ 2008-09-02 16:41 Qzi 閱讀(328) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲自偷自偷精品| 最近高清中文字幕免费| xvideos亚洲永久网址| 亚洲日韩精品无码专区| 好吊妞788免费视频播放| 在线综合亚洲欧洲综合网站| 性做久久久久久免费观看| 精品丝袜国产自在线拍亚洲| 成人女人A级毛片免费软件| 亚洲一区二区三区久久| 久久久www成人免费毛片| 一本色道久久88—综合亚洲精品 | 亚洲免费日韩无码系列| 成人特级毛片69免费观看| 亚洲国产精品嫩草影院久久 | 毛片免费观看的视频在线| 亚洲愉拍一区二区三区| 国产美女无遮挡免费网站| 色网站在线免费观看| 中文字幕第13亚洲另类| 成人黄网站片免费视频 | 亚洲JIZZJIZZ中国少妇中文| 一级看片免费视频囗交| 丁香五月亚洲综合深深爱| 国产免费一区二区三区不卡| 亚洲五月激情综合图片区| 国产免费的野战视频| 亚洲熟女综合一区二区三区| 国产国产人免费视频成69大陆| 日本免费精品一区二区三区| 国产成人综合亚洲AV第一页| 久章草在线精品视频免费观看| 亚洲国产精品一区二区久久| 亚洲一区二区三区免费观看 | 日韩电影免费在线观看| 亚洲精品国产啊女成拍色拍| 毛片a级毛片免费播放100| 国产成人亚洲午夜电影| 亚洲午夜福利717| 一级毛片直播亚洲| 福利免费在线观看|