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

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

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

    zx_bing

    人生路漫漫,多學(xué)些知識(shí)總是有益處的
    隨筆 - 32, 文章 - 0, 評(píng)論 - 0, 引用 - 0
    數(shù)據(jù)加載中……

    2012年7月14日

    sql browser 無法啟動(dòng)終極解決辦法

    一、為 SQL 啟用遠(yuǎn)程連接

    1. 單擊“開始”,依次指向“程序”、“Microsoft SQL Server 2005”和“配置工具”,然后單擊“SQL Server 外圍應(yīng)用配置器”。
    2. 在“SQL Server 2005 外圍應(yīng)用配置器”頁(yè)上,單擊“服務(wù)和連接的外圍應(yīng)用配置器”。
    3. 在“服務(wù)和連接的外圍應(yīng)用配置器”頁(yè)上,展開“數(shù)據(jù)庫(kù)引擎”,依次單擊“遠(yuǎn)程連接”和“本地連接和遠(yuǎn)程連接”,單擊適用于您的環(huán)境的相應(yīng)協(xié)議,然后單擊“應(yīng)用”。

    注意:請(qǐng)?jiān)诮邮盏揭韵孪r(shí)單擊“確定”:
    直到重新啟動(dòng)數(shù)據(jù)庫(kù)引擎服務(wù)后,對(duì)連接設(shè)置所做的更改才會(huì)生效。
    4. 在“服務(wù)和連接的外圍應(yīng)用配置器”頁(yè)上,展開“數(shù)據(jù)庫(kù)引擎”,依次單擊“服務(wù)”和“停止”,等待 MSSQLSERVER 服務(wù)停止,然后單擊“啟動(dòng)”以重新啟動(dòng) MSSQLSERVER 服務(wù)。

    二、啟用 SQL Server Browser 服務(wù)

    1. 單擊“開始”,依次指向“程序”、“Microsoft SQL Server 2005”和“配置工具”,然后單擊“SQL Server 外圍應(yīng)用配置器”。
    2. 在“SQL Server 2005 外圍應(yīng)用配置器”頁(yè)上,單擊“服務(wù)和連接的外圍應(yīng)用配置器”。
    3. 在“服務(wù)和連接的外圍應(yīng)用配置器”頁(yè)上,單擊“SQL Server Browser”,在“啟動(dòng)類型”中單擊“自動(dòng)”選項(xiàng),然后單擊“應(yīng)用”。

    注意:在單擊“自動(dòng)”選項(xiàng)后,每次啟動(dòng) Microsoft Windows 時(shí)將自動(dòng)啟動(dòng) SQL Server Browser 服務(wù)。
    4. 單擊“啟動(dòng)”,然后單擊“確定”。

    三、在 Windows 防火墻中為SQL Server
    2005 創(chuàng)建例外

    1. 在 Windows 防火墻中,單擊“例外”選項(xiàng)卡,然后單擊“添加程序”。
    2. 在“添加程序”窗口中,單擊“瀏覽”。
    3. 單擊 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe 可執(zhí)行程序,單擊“打開”,然后單擊“確定”。

    注意:上述路徑可能會(huì)根據(jù) SQL Server
    2005 的安裝位置而不同。

    四、在 Windows 防火墻中為 SQL Server Browser 服務(wù)創(chuàng)建例外

    1. 在 Windows 防火墻中,單擊“例外”選項(xiàng)卡,然后單擊“添加程序”。
    2. 在“添加程序”窗口中,單擊“瀏覽”。
    3. 單擊 C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe 可執(zhí)行程序,單擊“打開”,然后單擊“確定”。

    注意:上述路徑可能會(huì)根據(jù) SQL Server
    2005 的安裝位置而不同。

    五、遠(yuǎn)程連接端口設(shè)置(很關(guān)鍵的一步,很多方法只講了一到四步,卻沒有講到第五步)

    1、在服務(wù)器上打開SQL Server Configuration Manager。選擇SQL Server配置治理器->SQL Server 2005網(wǎng)絡(luò)配置->MSSQLSERVER的協(xié)議->TCP/IP,在彈出對(duì)話框中選擇IP地址->IPALL->TCP端口,設(shè)置為可用端口。(如果默認(rèn)的1433端口老是連接不上,你就設(shè)置為你確認(rèn)已經(jīng)打開的端口試試,如21端口等)

    2、在“服務(wù)和連接的外圍應(yīng)用配置器”頁(yè)上,展開“數(shù)據(jù)庫(kù)引擎”,依次單擊“服務(wù)”和“停止”,等待 MSSQLSERVER 服務(wù)停止,然后單擊“啟動(dòng)”以重新啟動(dòng) MSSQLSERVER 服務(wù)。

    六、測(cè)試連接

    1、打開SQL2005登陸界面,輸入服務(wù)器IP和用戶名及密碼。
    如:
    服務(wù)器名稱:
    192.168.1.200,21
    用戶名:sa
    密碼:sa
    點(diǎn)連接,結(jié)果連接成功。
    PS:上面的服務(wù)器名稱中的,21中的21第五步中第1步中設(shè)置的IPALL中的TCP端口

    posted @ 2012-07-30 07:23 zx_bing| 編輯 收藏

    hibernate+java+sql 之間數(shù)據(jù)類型轉(zhuǎn)換關(guān)系














































































































    Hibernate映射類型java類型標(biāo)準(zhǔn)SQL類型
    integerjava.lang.Integerinteger
    longjava.lang.Longbigint
    shortjava.lang.Shortsmallint
    floatjava.lang.Floatfloat
    doublejava.lang.Floatdouble
    big_decimaljava.math.BigDecimalnumeric
    characterjava.lang.Stringchar(1)
    stringjava.lang.Stringvarchar
    bytebyte或java.lang.Bytetinyint
    booleanboolean或java.lang.Boolean  bit
    yes_no    boolean或java.lang.Booleanchar(1)('Y'/'N')
    true_falseboolean或java.lang.Booleanchar(1)('Y'/'N')
    datejava.util.Date或java.sql.Datedate
    timejava.util.Date或java.sql.Timetime
    timestampjava.util.Date或java.sql.timestamptimestamp
    calendarjava.util.Calendartimestamp
    calendar_datejava.util.Calendardate
    binarybyte[]varbinary或blob
    textjava.lang.Stringclob
    serializablejava.io.Serializable實(shí)例varbinary或blob
    clobjava.sql.Clobclob
    blobjava.sql.Blobvarbinary或blob
    classjava.lang.Classvarchar
    localejava.util.Localevarchar
    timezonejava.util.TimeZonevarchar
    currencyjava.util.Currencyvarchar

    posted @ 2012-07-27 14:37 zx_bing| 編輯 收藏

    外鍵查詢 遇到錯(cuò)誤:could not initialize proxy - the owning Session was close

    關(guān)于lazy機(jī)制:

    延遲初始化錯(cuò)誤是運(yùn)用Hibernate開發(fā)項(xiàng)目時(shí)最常見的錯(cuò)誤。如果對(duì)一個(gè)類或者集合配置了延遲檢索策略,那么必須當(dāng)代理類實(shí)例或代理集合處于持久化狀態(tài)(即處于Session范圍內(nèi))時(shí),才能初始化它。如果在游離狀態(tài)時(shí)才初始化它,就會(huì)產(chǎn)生延遲初始化錯(cuò)誤。

    下面把Customer.hbm.xml文件的<class>元素的lazy屬性設(shè)為true,表示使用延遲檢索策略:

    <class name="mypack.Customer" table="CUSTOMERS" lazy="true">

    當(dāng)執(zhí)行Session的load()方法時(shí),Hibernate不會(huì)立即執(zhí)行查詢CUSTOMERS表的select語(yǔ)句,僅僅返回Customer類的代理類的實(shí)例,這個(gè)代理類具由以下特征:

    (1) 由Hibernate在運(yùn)行時(shí)動(dòng)態(tài)生成,它擴(kuò)展了Customer類,因此它繼承了Customer類的所有屬性和方法,但它的實(shí)現(xiàn)對(duì)于應(yīng)用程序是透明的。
    (2) 當(dāng)Hibernate創(chuàng)建Customer代理類實(shí)例時(shí),僅僅初始化了它的OID屬性,其他屬性都為null,因此這個(gè)代理類實(shí)例占用的內(nèi)存很少。
    (3)當(dāng)應(yīng)用程序第一次訪問Customer代理類實(shí)例時(shí)(例如調(diào)用customer.getXXX()或customer.setXXX()方法), Hibernate會(huì)初始化代理類實(shí)例,在初始化過程中執(zhí)行select語(yǔ)句,真正從數(shù)據(jù)庫(kù)中加載Customer對(duì)象的所有數(shù)據(jù)。但有個(gè)例外,那就是當(dāng)應(yīng)用程序訪問Customer代理類實(shí)例的getId()方法時(shí),Hibernate不會(huì)初始化代理類實(shí)例,因?yàn)樵趧?chuàng)建代理類實(shí)例時(shí)OID就存在了,不必到數(shù)據(jù)庫(kù)中去查詢。

    提示:Hibernate采用CGLIB工具來生成持久化類的代理類。CGLIB是一個(gè)功能強(qiáng)大的Java字節(jié)碼生成工具,它能夠在程序運(yùn)行時(shí)動(dòng)態(tài)生成擴(kuò)展 Java類或者實(shí)現(xiàn)Java接口的代理類。關(guān)于CGLIB的更多知識(shí),請(qǐng)參考:http://cglib.sourceforge.net/。

    以下代碼先通過Session的load()方法加載Customer對(duì)象,然后訪問它的name屬性:

    tx = session.beginTransaction();
    Customer customer=(Customer)session.load(Customer.class,new Long(1));
    customer.getName();
    tx.commit();

    在運(yùn)行session.load()方法時(shí)Hibernate不執(zhí)行任何select語(yǔ)句,僅僅返回Customer類的代理類的實(shí)例,它的OID為1,這是由load()方法的第二個(gè)參數(shù)指定的。當(dāng)應(yīng)用程序調(diào)用customer.getName()方法時(shí),Hibernate會(huì)初始化Customer代理類實(shí)例,從數(shù)據(jù)庫(kù)中加載Customer對(duì)象的數(shù)據(jù),執(zhí)行以下select語(yǔ)句:

    select * from CUSTOMERS where ID=1;
    select * from ORDERS where CUSTOMER_ID=1;

    當(dāng)<class>元素的lazy屬性為true,會(huì)影響Session的load()方法的各種運(yùn)行時(shí)行為,下面舉例說明。

    1.如果加載的Customer對(duì)象在數(shù)據(jù)庫(kù)中不存在,Session的load()方法不會(huì)拋出異常,只有當(dāng)運(yùn)行customer.getName()方法時(shí)才會(huì)拋出以下異常:

    ERROR LazyInitializer:63 - Exception initializing proxy
    net.sf.hibernate.ObjectNotFoundException: No row with the given identifier exists: 1, of class:
    mypack.Customer

    2.如果在整個(gè)Session范圍內(nèi),應(yīng)用程序沒有訪問過Customer對(duì)象,那么Customer代理類的實(shí)例一直不會(huì)被初始化,Hibernate不會(huì)執(zhí)行任何select語(yǔ)句。以下代碼試圖在關(guān)閉Session后訪問Customer游離對(duì)象:

    tx = session.beginTransaction();
    Customer customer=(Customer)session.load(Customer.class,new Long(1));
    tx.commit();
    session.close();
    customer.getName();

    由于引用變量customer引用的Customer代理類的實(shí)例在Session范圍內(nèi)始終沒有被初始化,因此在執(zhí)行customer.getName()方法時(shí),Hibernate會(huì)拋出以下異常:

    ERROR LazyInitializer:63 - Exception initializing proxy
    net.sf.hibernate.HibernateException: Could not initialize proxy - the owning Session was closed

    由此可見,Customer代理類的實(shí)例只有在當(dāng)前Session范圍內(nèi)才能被初始化。

    3.net.sf.hibernate.Hibernate類的initialize()靜態(tài)方法用于在Session范圍內(nèi)顯式初始化代理類實(shí)例,isInitialized()方法用于判斷代理類實(shí)例是否已經(jīng)被初始化。例如:

    tx = session.beginTransaction();
    Customer customer=(Customer)session.load(Customer.class,new Long(1));
    if(!Hibernate.isInitialized(customer))
    Hibernate.initialize(customer);
    tx.commit();
    session.close();
    customer.getName();

    以上代碼在Session范圍內(nèi)通過Hibernate類的initialize()方法顯式初始化了Customer代理類實(shí)例,因此當(dāng)Session關(guān)閉后,可以正常訪問Customer游離對(duì)象。

    4.當(dāng)應(yīng)用程序訪問代理類實(shí)例的getId()方法時(shí),不會(huì)觸發(fā)Hibernate初始化代理類實(shí)例的行為,例如:

    tx = session.beginTransaction();
    Customer customer=(Customer)session.load(Customer.class,new Long(1));
    customer.getId();
    tx.commit();
    session.close();
    customer.getName();

    當(dāng)應(yīng)用程序訪問customer.getId()方法時(shí),該方法直接返回Customer代理類實(shí)例的OID值,無需查詢數(shù)據(jù)庫(kù)。由于引用變量 customer始終引用的是沒有被初始化的Customer代理類實(shí)例,因此當(dāng)Session關(guān)閉后再執(zhí)行customer.getName()方法, Hibernate會(huì)拋出以下異常:

    ERROR LazyInitializer:63 - Exception initializing proxy
    net.sf.hibernate.HibernateException: Could not initialize proxy - the owning Session was closed


    解決方法:

    由于hibernate采用了lazy=true,這樣當(dāng)你用hibernate查詢時(shí),返回實(shí)際為利用cglib增強(qiáng)的代理類,但其并沒有實(shí)際填充;當(dāng)你在前端,利用它來取值(getXXX)時(shí),這時(shí)Hibernate才會(huì)到數(shù)據(jù)庫(kù)執(zhí)行查詢,并填充對(duì)象,但此時(shí)如果和這個(gè)代理類相關(guān)的session已關(guān)閉掉,就會(huì)產(chǎn)生種錯(cuò)誤.
    在做一對(duì)多時(shí),有時(shí)會(huì)出現(xiàn)"could not initialize proxy - clothe owning Session was sed,這個(gè)好像是hibernate的緩存問題.問題解決:需要在<many-to-one>里設(shè)置lazy="false". 但有可能會(huì)引發(fā)另一個(gè)異常叫

    failed to lazily initialize a collection of role: XXXXXXXX, no session or session was closed

    此異常解決方案請(qǐng)察看本人博客(http://hi.baidu.com/kekemao1)的Hibernate異常中的《failed to lazily initialize a collection of role異常》

    ?
    解決方法:在web.xml中加入
    <filter>
        <filter-name>hibernateFilter</filter-name>
        <filter-class>
         org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
        </filter-class>
    </filter
    <filter-mapping>
        <filter-name>hibernateFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
    就可以了;

    參考了:
    Hibernate與延遲加載:

    Hibernate對(duì)象關(guān)系映射提供延遲的與非延遲的對(duì)象初始化。非延遲加載在讀取一個(gè)對(duì)象的時(shí)候會(huì)將與這個(gè)對(duì)象所有相關(guān)的其他對(duì)象一起讀取出來。這有時(shí)會(huì)導(dǎo)致成百的(如果不是成千的話)select語(yǔ)句在讀取對(duì)象的時(shí)候執(zhí)行。這個(gè)問題有時(shí)出現(xiàn)在使用雙向關(guān)系的時(shí)候,經(jīng)常會(huì)導(dǎo)致整個(gè)數(shù)據(jù)庫(kù)都在初始化的階段被讀出來了。當(dāng)然,你可以不厭其煩地檢查每一個(gè)對(duì)象與其他對(duì)象的關(guān)系,并把那些最昂貴的刪除,但是到最后,我們可能會(huì)因此失去了本想在ORM工具中獲得的便利。


    一個(gè)明顯的解決方法是使用Hibernate提供的延遲加載機(jī)制。這種初始化策略只在一個(gè)對(duì)象調(diào)用它的一對(duì)多或多對(duì)多關(guān)系時(shí)才將關(guān)系對(duì)象讀取出來。這個(gè)過程對(duì)開發(fā)者來說是透明的,而且只進(jìn)行了很少的數(shù)據(jù)庫(kù)操作請(qǐng)求,因此會(huì)得到比較明顯的性能提升。這項(xiàng)技術(shù)的一個(gè)缺陷是延遲加載技術(shù)要求一個(gè)Hibernate會(huì)話要在對(duì)象使用的時(shí)候一直開著。這會(huì)成為通過使用DAO模式將持久層抽象出來時(shí)的一個(gè)主要問題。為了將持久化機(jī)制完全地抽象出來,所有的數(shù)據(jù)庫(kù)邏輯,包括打開或關(guān)閉會(huì)話,都不能在應(yīng)用層出現(xiàn)。最常見的是,一些實(shí)現(xiàn)了簡(jiǎn)單接口的DAO實(shí)現(xiàn)類將數(shù)據(jù)庫(kù)邏輯完全封裝起來了。一種快速但是笨拙的解決方法是放棄DAO模式,將數(shù)據(jù)庫(kù)連接邏輯加到應(yīng)用層中來。這可能對(duì)一些小的應(yīng)用程序有效,但是在大的系統(tǒng)中,這是一個(gè)嚴(yán)重的設(shè)計(jì)缺陷,妨礙了系統(tǒng)的可擴(kuò)展性。

    在Web層進(jìn)行延遲加載

    幸運(yùn)的是,Spring框架為Hibernate延遲加載與DAO模式的整合提供了一種方便的解決方法。對(duì)那些不熟悉Spring與Hibernate集成使用的人,我不會(huì)在這里討論過多的細(xì)節(jié),但是我建議你去了解Hibernate與Spring集成的數(shù)據(jù)訪問。以一個(gè)Web應(yīng)用為例,Spring提供了OpenSessionInViewFilter和OpenSessionInViewInterceptor。我們可以隨意選擇一個(gè)類來實(shí)現(xiàn)相同的功能。兩種方法唯一的不同就在于interceptor在Spring容器中運(yùn)行并被配置在web應(yīng)用的上下文中,而Filter在Spring之前運(yùn)行并被配置在web.xml中。不管用哪個(gè),他們都在請(qǐng)求將當(dāng)前會(huì)話與當(dāng)前(數(shù)據(jù)庫(kù))線程綁定時(shí)打開Hibernate會(huì)話。一旦已綁定到線程,這個(gè)打開了的Hibernate會(huì)話可以在DAO實(shí)現(xiàn)類中透明地使用。這個(gè)會(huì)話會(huì)為延遲加載數(shù)據(jù)庫(kù)中值對(duì)象的視圖保持打開狀態(tài)。一旦這個(gè)邏輯視圖完成了,Hibernate會(huì)話會(huì)在Filter的doFilter方法或者Interceptor的postHandle方法中被關(guān)閉。下面是每個(gè)組件的配置示例:



    Interceptor的配置:


    <beans>
    <bean id="urlMapping"
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="interceptors">
    <list>
    <ref bean="openSessionInViewInterceptor"/>
    </list>
    </property>
    <property name="mappings">

    </bean>

    <bean name="openSessionInViewInterceptor"
    class="org.springframework.orm.hibernate.support.OpenSessionInViewInterceptor">
    <property name="sessionFactory"><ref bean="sessionFactory"/></property>
    </bean>
    </beans>

    Filter的配置


    <web-app>

    <filter>
    <filter-name>hibernateFilter</filter-name>
    <filter-class>
    org.springframework.orm.hibernate.support.OpenSessionInViewFilter
    </filter-class>
    </filter>

    <filter-mapping>
    <filter-name>hibernateFilter</filter-name>
    <url-pattern>*. spring </url-pattern>
    </filter-mapping>

    </web-app>


    實(shí)現(xiàn)Hibernate的Dao接口來使用打開的會(huì)話是很容易的。事實(shí)上,如果你已經(jīng)使用了Spring框架來實(shí)現(xiàn)你的Hibernate Dao,很可能你不需要改變?nèi)魏螙|西。方便的HibernateTemplate公用組件使訪問數(shù)據(jù)庫(kù)變成小菜一碟,而DAO接口只有通過這個(gè)組件才可以訪問到數(shù)據(jù)庫(kù)。下面是一個(gè)示例的DAO:


    public class HibernateProductDAO extends HibernateDaoSupport implements ProductDAO {

    public Product getProduct(Integer productId) {
    return (Product)getHibernateTemplate().load(Product.class, productId);
    }

    public Integer saveProduct(Product product) {
    return (Integer) getHibernateTemplate().save(product);
    }

    public void updateProduct(Product product) {
    getHibernateTemplate().update(product);
    }
    }


    在業(yè)務(wù)邏輯層中使用延遲加載

    即使在視圖外面,Spring框架也通過使用AOP 攔截器 HibernateInterceptor來使得延遲加載變得很容易實(shí)現(xiàn)。這個(gè)Hibernate 攔截器透明地將調(diào)用配置在Spring應(yīng)用程序上下文中的業(yè)務(wù)對(duì)象中方法的請(qǐng)求攔截下來,在調(diào)用方法之前打開一個(gè)Hibernate會(huì)話,然后在方法執(zhí)行完之后將會(huì)話關(guān)閉。讓我們來看一個(gè)簡(jiǎn)單的例子,假設(shè)我們有一個(gè)接口BussinessObject:


    public     interface    BusinessObject     {
    public     void    doSomethingThatInvolvesDaos();
    }
    類BusinessObjectImpl實(shí)現(xiàn)了BusinessObject接口:

    public     class    BusinessObjectImpl    implements    BusinessObject     {
    public     void    doSomethingThatInvolvesDaos()     {
    //    lots of logic that calls
    //    DAO classes Which access
    //    data objects lazily 





    通過在Spring應(yīng)用程序上下文中的一些配置,我們可以讓將調(diào)用BusinessObject的方法攔截下來,再令它的方法支持延遲加載。看看下面的一個(gè)程序片段:



    <beans>
    <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
    <property name="sessionFactory">
    <ref bean="sessionFactory"/>
    </property>
    </bean>
    <bean id="businessObjectTarget" class="com.acompany.BusinessObjectImpl">
    <property name="someDAO"><ref bean="someDAO"/></property>
    </bean>
    <bean id="businessObject" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="target"><ref bean="businessObjectTarget"/></property>
    <property name="proxyInterfaces">
    <value>com.acompany.BusinessObject</value>
    </property>
    <property name="interceptorNames">
    <list>
    <value>hibernateInterceptor</value>
    </list>
    </property>
    </bean>
    </beans>

    當(dāng)businessObject被調(diào)用的時(shí)候,HibernateInterceptor打開一個(gè)Hibernate會(huì)話,并將調(diào)用請(qǐng)求傳遞給BusinessObjectImpl對(duì)象。當(dāng)BusinessObjectImpl執(zhí)行完成后,HibernateInterceptor透明地關(guān)閉了會(huì)話。應(yīng)用層的代碼不用了解任何持久層邏輯,還是實(shí)現(xiàn)了延遲加載。


    在單元測(cè)試中測(cè)試延遲加載

    最后,我們需要用J-Unit來測(cè)試我們的延遲加載程序。我們可以輕易地通過重寫TestCase類中的setUp和tearDown方法來實(shí)現(xiàn)這個(gè)要求。我比較喜歡用這個(gè)方便的抽象類作為我所有測(cè)試類的基類。


    public abstract class MyLazyTestCase extends TestCase {

    private SessionFactory sessionFactory;
    private Session session;

    public void setUp() throws Exception {
    super.setUp();
    SessionFactory sessionFactory = (SessionFactory) getBean("sessionFactory");
    session = SessionFactoryUtils.getSession(sessionFactory, true);
    Session s = sessionFactory.openSession();
    TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(s));

    }

    protected Object getBean(String beanName) {
    //Code to get objects from Spring application context
    }

    public void tearDown() throws Exception {
    super.tearDown();
    SessionHolder holder = (SessionHolder) TransactionSynchronizationManager.getResource(sessionFactory);
    Session s = holder.getSession();
    s.flush();
    TransactionSynchronizationManager.unbindResource(sessionFactory);
    SessionFactoryUtils.closeSessionIfNecessary(s, sessionFactory);
    }

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

    Java代碼 復(fù)制代碼 收藏代碼
    1. <?xml version="1.0"?> 
    2. <!DOCTYPE hibernate-mapping PUBLIC 
    3.     "-//Hibernate/Hibernate Mapping DTD//EN" 
    4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
    5. <hibernate-mapping package="com.isoftstone.lms.model"
    6.     <class name="Order" table="sv_order"
    7.         <id name="orderId" column="sv_order_id" type="string"
    8.             <generator class="sequence"
    9.                 <param name="sequence">SEQ_ORDERID</param> 
    10.             </generator> 
    11.         </id> 
    12.          
    13.         many-to-one name="style" column="sv_style_id" lazy="false" /> 
    14.         <many-to-one name="state" column="sv_state_id"  lazy="false"/> 
    15.         <many-to-one name="client" column="sv_client_id" lazy="false" /> 
    16.         <many-to-one name="baseOrder" column="sv_order_baseid"  lazy="false"/> 
    17.         <property name="orderNo" column="sv_order_orderno" type="long" /> 
    18.         <property name="createDate" column="sv_order_createdate" type="date" /> 
    19.         <property name="sendDate" column="sv_order_senddate" type="string" /> 
    20.         <property name="sendAddress" column="sv_order_sendAddress" type="string" /> 
    21.         <property name="accepter" column="sv_order_accepter" type="string" /> 
    22.         <property name="postNo" column="sv_order_postNo" type="string" /> 
    23.         <property name="phone" column="sv_order_phone" type="string" /> 
    24.         <property name="totalMoney" column="sv_order_totalmoney" type="double" /> 
    25.         <property name="isinvoice" column="sv_order_isinvoice" type="int" /> 
    26.         <property name="remark" column="sv_order_remark" type="string" /> 
    27.          
    28.         <set name="orderGoodss" inverse="true" lazy="extra" cascade="all"
    29.             <key column="sv_order_id"/> 
    30.             <one-to-many class="OrderGoods"/> 
    31.         </set> 
    32.     </class
    33. </hibernate-mapping> 

    [color=red]
    Java代碼 復(fù)制代碼 收藏代碼
    1. <many-to-one name="style" column="sv_style_id" lazy="false" /> 
    2. <many-to-one name="state" column="sv_state_id"  lazy="false"/> 
    3. <many-to-one name="client" column="sv_client_id" lazy="false" /> 
    4. <many-to-one name="baseOrder" column="sv_order_baseid"  lazy="false"/> 
    [/color]

    posted @ 2012-07-27 14:13 zx_bing| 編輯 收藏

    Hibernate基于外鍵查詢

    Java代碼 復(fù)制代碼 收藏代碼
    1. public List<Order> getClientOrder(String clientId) { 
    2.  
    3.         Session session = null
    4.         List<Order> orderList = null
    5.         try
    6.             session = HibernateUtil.getSession(); 
    7.             session.beginTransaction(); 
    8.             orderList = session.createQuery("from Order o where o.client.clientId = ?"
    9.                                 .setParameter(1,clientId) 
    10.                                 .list(); 
    11.             session.getTransaction().commit(); 
    12.         } catch (Exception e) { 
    13.             e.printStackTrace(); 
    14.             session.getTransaction().rollback(); 
    15.         } finally
    16.             HibernateUtil.closeSession(session); 
    17.         } 
    18.  
    19.         return orderList; 
    20.     } 

    posted @ 2012-07-27 14:11 zx_bing| 編輯 收藏

    hibernate 多條件查詢

    Java代碼 復(fù)制代碼 收藏代碼
    1. public List<Client> searchClients(String clientName, String tel, 
    2.             String identityNo) { 
    3.  
    4.         StringBuffer sb = new StringBuffer("from Client c where 1=1"); 
    5.          
    6.         if(clientName != null && !"".equals(clientName) ){ 
    7.             sb.append("and c.name like '%" + clientName + "%'"); 
    8.         } 
    9.         if(tel != null && !"".equals(tel)){ 
    10.             sb.append("and c.tel = " + tel); 
    11.         } 
    12.         if(identityNo != null && !"".equals(identityNo)){ 
    13.             sb.append("and c.identityNo = " + identityNo); 
    14.         } 
    15.         return clientDao.searchClients(sb.toString()); 

    posted @ 2012-07-27 14:08 zx_bing| 編輯 收藏

    輸入框要求用JAVASCRIPT去驗(yàn)證不能超過12個(gè)數(shù)字或英文或數(shù)字英文組合,還要求不能超過6個(gè)漢字,還要驗(yàn)證漢字和字母,數(shù)字的組合

    <input name="username" value="" length="12" maxlengthd="12"/>
    數(shù)據(jù)庫(kù)里面username vachar2(12)

    這個(gè)輸入框要求用JAVASCRIPT去驗(yàn)證不能超過12個(gè)數(shù)字或英文或數(shù)字英文組合,還要求不能超過6個(gè)漢字,還要驗(yàn)證漢字和字母,數(shù)字的組合

    如:用戶名1999(就可以),麥克斯韋1999(就不行)

    因?yàn)閿?shù)據(jù)庫(kù)里面要求的長(zhǎng)度是12,一個(gè)漢字就占兩個(gè),但是在頁(yè)面可以輸入12個(gè)漢字
    請(qǐng)用JAVASCRIPT寫出你的解決方案?



    Js代碼 復(fù)制代碼 收藏代碼
    1. <html>   
    2. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">   
    3. 輸入待測(cè)字串: &nbsp;<input type="text" onblur="test(this.value);">   
    4. </html>   
    5. <script language="javascript">   
    6. <!--    
    7. //測(cè)試匹配情況    
    8. function test(inputVal)    
    9. {    
    10.     //去除首尾空格    
    11.     inputValinputVal = inputVal.replace(/^\s*|\s*$/g,"");    
    12.     //零長(zhǎng)字串不作處理    
    13.     if ( inputVal.length == 0 )    
    14.     {    
    15.         return;    
    16.     }    
    17.     //只能匹配數(shù)字,字母或漢字    
    18.     var _match = inputVal.match(/^[a-zA-Z0-9\u4e00-\u9fa5]+$/g);    
    19.     //匹配數(shù)字或字母(包括大小寫)    
    20.     var codeMatch = inputVal.match(/[a-zA-Z0-9]/g);    
    21.     //匹配漢字    
    22.     var charMatch = inputVal.match(/[\u4e00-\u9fa5]/g);    
    23.     //數(shù)字或字母?jìng)€(gè)數(shù)    
    24.     var codeNum = codeMatch ? codeMatch.length : 0;    
    25.     //漢字個(gè)數(shù)    
    26.     var charNum = charMatch ? charMatch.length : 0;    
    27.     //成功    
    28.     if ( _match && codeNum + 2*charNum <= 12 )    
    29.     {    
    30.         alert("輸入正確!");    
    31.         return;    
    32.     }    
    33.     //失敗    
    34.     alert("輸入錯(cuò)誤!");     
    35. }    
    36. //-->   
    37. </script> 

    posted @ 2012-07-27 14:06 zx_bing| 編輯 收藏

    Ajax 模擬動(dòng)態(tài)列表

    three.html
    Java代碼 復(fù)制代碼 收藏代碼
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    2. <html> 
    3.     <head> 
    4.         <title>index.html</title> 
    5.         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"
    6.         <meta http-equiv="description" content="this is my page"
    7.         <meta http-equiv="content-type" content="text/html; charset=GBK"
    8.         <script type="text/javascript"
    9.         var xmlhttp; 
    10.         function loadXMLDoc(valueFromSelect1){ 
    11.             var url = "three.jsp?valueFromSelect=" + valueFromSelect1 + "&" + Math.random(); 
    12.             alert(url); 
    13.             xmlhttp=null
    14.             if (window.XMLHttpRequest){ 
    15.               xmlhttp=new XMLHttpRequest(); 
    16.             } 
    17.             else if (window.ActiveXObject){ 
    18.               xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    19.             } 
    20.             if (xmlhttp!=null){ 
    21.               xmlhttp.onreadystatechange=updatePage; 
    22.               xmlhttp.open("GET",url,true); 
    23.               xmlhttp.send(null); 
    24.             } 
    25.             else
    26.               alert("Your browser does not support XMLHTTP."); 
    27.             } 
    28.         } 
    29.          
    30.         function state_Change(){ 
    31.             if (xmlhttp.readyState==4){ 
    32.                 if (xmlhttp.status==200){ 
    33.                     updatePage(); 
    34.                 } 
    35.                 else
    36.                     alert("Problem retrieving XML data"); 
    37.                 } 
    38.             } 
    39.         } 
    40.          
    41.         function updatePage(){             
    42.             // 清空select2 
    43.             while(select2.options[0] != null){ 
    44.                 select2.options[0] = null
    45.             } 
    46.              
    47.             // 設(shè)置select2 
    48.             var xmlDoc = xmlhttp.responseXML; 
    49.             alert(xmlDoc); 
    50.             var labelValueBeanElements = xmlDoc.getElementsByTagName("labelValueBean"); 
    51.            
    52.             for (var i = 0; i < labelValueBeanElements.length; i++){ 
    53.                 var entityValue = xmlDoc.getElementsByTagName("value")[i].childNodes[0].nodeValue; 
    54.                 var entityLabel = xmlDoc.getElementsByTagName("label")[i].childNodes[0].nodeValue; 
    55.                 select2.options[i] = new Option(entityLabel,entityValue,false,false); 
    56.             } 
    57.         } 
    58.         </script> 
    59.     </head> 
    60.  
    61.     <body> 
    62.         select1: 
    63.         <select id="select1" onchange="loadXMLDoc(this.value)"
    64.             <option value="1">1</option> 
    65.             <option value="2">2</option> 
    66.         </select> 
    67.         <br/> 
    68.         select2: 
    69.         <select id="select2"
    70.         </select> 
    71.         <input type="button" value="顯示select2的值" onclick="alert(select2.value)"
    72.     </body> 
    73. </html> 






    three.jsp
    Java代碼 復(fù)制代碼 收藏代碼
    1. <%@ page language="java" contentType="text/html; charset=UTF-8" 
    2.     pageEncoding="UTF-8"%> 
    3.      
    4. <%! 
    5.     private String fromDB (String valueFromSelect)  { 
    6.         StringBuffer sb = new StringBuffer(); 
    7.  
    8.         if (valueFromSelect.equals("1")) { 
    9.             sb.append("    <labelValueBean>\n"); 
    10.             sb.append("        <value>haha</value>\n"); 
    11.             sb.append("        <label>哈哈</label>\n"); 
    12.             sb.append("    </labelValueBean>\n"); 
    13.             sb.append("    <labelValueBean>\n"); 
    14.             sb.append("        <value>hehe</value>\n"); 
    15.             sb.append("        <label>呵呵</label>\n"); 
    16.             sb.append("    </labelValueBean>\n"); 
    17.         } else if (valueFromSelect.equals("2")) { 
    18.             sb.append("    <labelValueBean>\n"); 
    19.             sb.append("        <value>heihei</value>\n"); 
    20.             sb.append("        <label>嘿嘿</label>\n"); 
    21.             sb.append("    </labelValueBean>\n"); 
    22.             sb.append("    <labelValueBean>\n"); 
    23.             sb.append("        <value>gaga</value>\n"); 
    24.             sb.append("        <label>嘎嘎</label>\n"); 
    25.             sb.append("    </labelValueBean>\n"); 
    26.             sb.append("    <labelValueBean>\n"); 
    27.             sb.append("        <value>woyun</value>\n"); 
    28.             sb.append("        <label>我暈</label>\n"); 
    29.             sb.append("    </labelValueBean>\n"); 
    30.             sb.append("    <labelValueBean>\n"); 
    31.             sb.append("        <value>123</value>\n"); 
    32.             sb.append("        <label>456</label>\n"); 
    33.             sb.append("    </labelValueBean>\n"); 
    34.         } 
    35.         return sb.toString(); 
    36.     } 
    37.  
    38. %> 
    39. <% 
    40.     String valueFromSelect = request.getParameter("valueFromSelect"); 
    41.  
    42.     StringBuffer sb = new StringBuffer(); 
    43.     sb.append("<?xml version=\"1.0\" encoding=\"gb2312\"?>\n"); 
    44.     sb.append("<resultFromDB>\n"); 
    45.     sb.append(fromDB(valueFromSelect)); 
    46.     sb.append("</resultFromDB>\n"); 
    47.     response.setHeader("content-type", "text/xml;charset=GBK"); 
    48.     System.out.println(sb); 
    49.     out.println(sb.toString()); 
    50.     //out.flush(); 
    51.     out.close(); 
    52.      
    53.     %> 

    posted @ 2012-07-27 14:04 zx_bing| 編輯 收藏

    全選調(diào)用的JS函數(shù)

    Java代碼 復(fù)制代碼 收藏代碼
    1. function selectall()  
    2. {  
    3.     //獲取頁(yè)面上所有的輸入元素 
    4.     var a = document.getElementsByTagName("input");  
    5.     //如果全選按鈕按上 
    6.     if(document.getElementById("quanxuanbutton").checked == true
    7.     { 
    8.         //循環(huán)是checkbox類型的,就設(shè)置為true 
    9.         for (var i=0; i<a.length; i++) 
    10.         { 
    11.             if (a[i].type == "checkbox"
    12.             { 
    13.                 a[i].checked =true
    14.             } 
    15.         }        
    16.          
    17.     }else{ //如果全選按鈕沒有按上 
    18.       for (var i=0; i<a.length; i++) 
    19.         { 
    20.             if (a[i].type == "checkbox"
    21.             { 
    22.                  
    23.                 a[i].checked =false
    24.             } 
    25.         }   
    26.     } 
    27. }  

    posted @ 2012-07-27 14:03 zx_bing| 編輯 收藏

    dwr 實(shí)現(xiàn)二級(jí)聯(lián)動(dòng) js

    Java代碼 復(fù)制代碼 收藏代碼
    1. //省市聯(lián)動(dòng)  
    2. var c_cigy = ''
    3. //記錄第二個(gè)列表id,以備回調(diào)函數(shù)用 
    4. var cityItemName = ''
    5.  
    6. function  changeCityOyp(province,city,relateItemName) { 
    7.     ServerDwrUtil.getCityList(province.value,setCityOption); 
    8.     //記錄二級(jí)下拉的 id relateItemName 供回調(diào)函數(shù)使用 
    9.     cityItemName = relateItemName; 
    10.     // 中國(guó) 則 二級(jí)下拉 不能選擇 
    11.     if(province.value == '0001') { 
    12.         document.getElementById(cityItemName).disabled = true
    13.     } else
    14.         document.getElementById(cityItemName).disabled = false
    15.     } 
    16.     //省份在一個(gè)單元格里,省份前面有個(gè)input輸入框,得到input對(duì)象,再把省份傳進(jìn)去 
    17.     var provinceInput  = province.parentNode.firstChild; 
    18.     //如果省份為空,則單元格為空 
    19.     if (province.value == '') { 
    20.         provinceInput.value = ''
    21.         return
    22.     } 
    23.     provinceInput.value = province.options[province.selectedIndex].text; 
    24.      
    25. // 回調(diào)函數(shù) args返回的是list.add(Map) map中{id},經(jīng)過 spring配置 對(duì)于一些特例返回的Class,且dwr不能識(shí)別的, 
    26. //</dwr:configuration> 
    27. // 設(shè)置二級(jí)下拉列表 
    28. function setCityOption (args) { 
    29.     alert(args.toString()); 
    30.     DWRUtil.removeAllOptions(cityItemName); 
    31.     DWRUtil.addOptions(cityItemName, [ "" ]); 
    32.     //id和name怎么確保的   args{[id:xxx,name:yyy],[id:xxx,name:yyyy]} 
    33.     DWRUtil.addOptions(cityItemName, args, "id", "name"); 

    posted @ 2012-07-27 14:02 zx_bing| 編輯 收藏

    javascript獲取select的值全解

    Js代碼 復(fù)制代碼 收藏代碼
    1. 獲取顯示的漢字 
    2.  
    3. document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text 
    4.  
    5. 獲取數(shù)據(jù)庫(kù)中的id 
    6.  
    7. window.document.getElementById("bigclass").value 
    8.  
    9. 獲取select組分配的索引id 
    10.  
    11. window.document.getElementById("bigclass").selectedIndex 
    12.  
    13.  
    14. 例子: 
    15.  
    16. <select name="bigclass" id="bigclass" onChange="javascript:updatePage2();"
    17. <option value="" selected="selected">ajax實(shí)驗(yàn)</option> 
    18. <option value="4">我適宜市哈</option> 
    19. </select> 
    20.  
    21.  
    22. 使用 
    23. document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text 
    24. 的結(jié)果是:我適宜市哈 
    25.  
    26. 使用 
    27. window.document.getElementById("bigclass").value 
    28. 的結(jié)果是:4 
    29.  
    30. 使用 
    31. window.document.getElementById("bigclass").selectedIndex 
    32. 的結(jié)果是:1 

    posted @ 2012-07-27 14:01 zx_bing| 編輯 收藏

    js變量作為URL參數(shù) 中文亂碼解決方法

    1--前臺(tái)頁(yè)面

    Java代碼 復(fù)制代碼 收藏代碼
    1. var uuid = encodeURI(encodeURI(oRecord.getData("uuid"))); 
    2.              var uname =encodeURI(encodeURI(oRecord.getData("uname"))); 
    3.               alert(uuid+"--"+uname); 
    4.               var updateURL =  contextPath+"/yuidemo/userManager.do?method=updateUser?uuid="+uuid+"&uname="+uname; 



    2--控制層

    Java代碼 復(fù)制代碼 收藏代碼
    1. String uuid =  java.net.URLDecoder.decode(request.getParameter("uuid"),"utf-8"); 

    posted @ 2012-07-27 14:00 zx_bing| 編輯 收藏

    Hibernate query 學(xué)習(xí)筆記

        只有注冊(cè)用戶登錄后才能閱讀該文。閱讀全文

    posted @ 2012-07-27 13:51 zx_bing| 編輯 收藏

    MySQL 5.1參考手冊(cè)

        只有注冊(cè)用戶登錄后才能閱讀該文。閱讀全文

    posted @ 2012-07-26 08:06 zx_bing| 編輯 收藏

    mysql 時(shí)間列自動(dòng)插入當(dāng)前日期時(shí)間

        只有注冊(cè)用戶登錄后才能閱讀該文。閱讀全文

    posted @ 2012-07-26 08:05 zx_bing| 編輯 收藏

    從mysql 表中隨機(jī)找出10條記錄

        只有注冊(cè)用戶登錄后才能閱讀該文。閱讀全文

    posted @ 2012-07-26 08:04 zx_bing| 編輯 收藏

    mysql授權(quán)指令

        只有注冊(cè)用戶登錄后才能閱讀該文。閱讀全文

    posted @ 2012-07-26 08:03 zx_bing| 編輯 收藏

    監(jiān)聽器實(shí)現(xiàn)獲取網(wǎng)絡(luò)在線人數(shù)

        只有注冊(cè)用戶登錄后才能閱讀該文。閱讀全文

    posted @ 2012-07-26 08:00 zx_bing| 編輯 收藏

    Hibernate的generator屬性

        只有注冊(cè)用戶登錄后才能閱讀該文。閱讀全文

    posted @ 2012-07-26 07:59 zx_bing| 編輯 收藏

    Tomcat的跨區(qū)域訪問

        只有注冊(cè)用戶登錄后才能閱讀該文。閱讀全文

    posted @ 2012-07-26 07:57 zx_bing| 編輯 收藏

    自定義Struts2中全局轉(zhuǎn)換器

        只有注冊(cè)用戶登錄后才能閱讀該文。閱讀全文

    posted @ 2012-07-26 07:56 zx_bing| 編輯 收藏

    利用百度地圖的API定位地理位置

        只有注冊(cè)用戶登錄后才能閱讀該文。閱讀全文

    posted @ 2012-07-26 07:55 zx_bing| 編輯 收藏

    java執(zhí)行存儲(chǔ)過程

        只有注冊(cè)用戶登錄后才能閱讀該文。閱讀全文

    posted @ 2012-07-26 07:53 zx_bing| 編輯 收藏

    SpringMVC框架介紹


    Spring框架提供了構(gòu)造Web應(yīng)用程序的全能MVC模塊。Spring
    MVC
    分離了控制器、模型對(duì)象、分派器以及處理程序?qū)ο蟮慕巧@種分離讓它們更容易進(jìn)行制定。是一個(gè)標(biāo)準(zhǔn)的MVC框架。



    那你猜一猜哪一部分應(yīng)該是哪一部分?






    SpringMVC框架圖




    posted @ 2012-07-25 06:54 zx_bing| 編輯 收藏

    java 技術(shù)博客

    犀利中帶點(diǎn)柔情 的博客
    http://fengtiejun.iteye.com/blog/1606365

    posted @ 2012-07-25 06:48 zx_bing| 編輯 收藏

    提高js性能注意事項(xiàng)

    一.執(zhí)行效率
    1. DOM
    1.1 使用DocumentFragment優(yōu)化多次append
    說明:添加多個(gè)dom元素時(shí),先將元素append到DocumentFragment中,最后統(tǒng)一將DocumentFragment添加到頁(yè)面。
    該做法可以減少頁(yè)面渲染dom元素的次數(shù)。經(jīng)IE和Fx下測(cè)試,在append1000個(gè)元素時(shí),效率能提高10%-30%,F(xiàn)x下提升較為明顯。

    服用前:
    for (var i = 0; i < 1000; i++) {
        var el = document.createElement('p');
        el.innerHTML = i;
        document.body.appendChild(el);
    }

    服用后:
    var frag = document.createDocumentFragment();
    for (var i = 0; i < 1000; i++) {
        var el = document.createElement('p');
        el.innerHTML = i;
        frag.appendChild(el);
    }
    document.body.appendChild(frag);

    1.2 通過模板元素clone,替代createElement
    說明:通過一個(gè)模板dom對(duì)象cloneNode,效率比直接創(chuàng)建element高。
    性能提高不明顯,約為10%左右。在低于100個(gè)元素create和append操作時(shí),沒有優(yōu)勢(shì)。

    服用前:
    var frag = document.createDocumentFragment();
    for (var i = 0; i < 1000; i++) {
        var el = document.createElement('p');
        el.innerHTML = i;
        frag.appendChild(el);
    }
    document.body.appendChild(frag);   

    服用后:
    var frag = document.createDocumentFragment();
    var pEl = document.getElementsByTagName('p')[0];
    for (var i = 0; i < 1000; i++) {
        var el = pEl.cloneNode(false);
        el.innerHTML = i;
        frag.appendChild(el);
    }
    document.body.appendChild(frag);

    1.3 使用一次innerHTML賦值代替構(gòu)建dom元素
    說明:根據(jù)數(shù)據(jù)構(gòu)建列表樣式的時(shí)候,使用設(shè)置列表容器innerHTML的方式,比構(gòu)建dom元素并append到頁(yè)面中的方式,效率有數(shù)量級(jí)上的提高。

    服用前:
    var frag = document.createDocumentFragment();
    for (var i = 0; i < 1000; i++) {
        var el = document.createElement('p');
        el.innerHTML = i;
        frag.appendChild(el);
    }
    document.body.appendChild(frag);

    服用后:
    var html = [];
    for (var i = 0; i < 1000; i++) {
        html.push('' + i + '
    ');
    }
    document.body.innerHTML = html.join('');

    1.4 使用firstChild和nextSibling代替childNodes遍歷dom元素
    說明:約能獲得30%-50%的性能提高。逆向遍歷時(shí)使用lastChild和previousSibling。

    服用前:
    var nodes = element.childNodes;
    for (var i = 0, l = nodes.length; i < l; i++) {
    var node = nodes[i];
    ……
    }

    服用后:
    var node = element.firstChild;
    while (node) {
    ……
    node = node.nextSibling;
    }


    2. 字符串

    2.1 使用Array做為StringBuffer,代替字符串拼接的操作
    說明:IE在對(duì)字符串拼接的時(shí)候,會(huì)創(chuàng)建臨時(shí)的String對(duì)象;經(jīng)測(cè)試,在IE下,當(dāng)拼接的字符串越來越大時(shí),運(yùn)行效率會(huì)急劇下降。Fx和Opera都對(duì)字符串拼接操作進(jìn)行了優(yōu)化;經(jīng)測(cè)試,在Fx下,使用Array的join方式執(zhí)行時(shí)間約為直接字符串拼接的1.4倍。

    服用前:
    var now = new Date();
    var str = '';
    for (var i = 0; i < 10000; i++) {
        str += '123456789123456789';
    }
    alert(new Date() - now);

    服用后:
    var now = new Date();
    var strBuffer = [];
    for (var i = 0; i < 10000; i++) {
        strBuffer.push('123456789123456789');
    }
    var str = strBuffer.join('');
    alert(new Date() - now);


    3. 循環(huán)語(yǔ)句

    3.1 將循環(huán)控制量保存到局部變量
    說明:對(duì)數(shù)組和列表對(duì)象的遍歷時(shí),提前將length保存到局部變量中,避免在循環(huán)的每一步重復(fù)取值。

    服用前:
    var list = document.getElementsByTagName('p');
    for (var i = 0; i < list.length; i++) {
        ……
    }

    服用后:
    var list = document.getElementsByTagName('p');
    for (var i = 0, l = list.length; i < l; i++) {
        ……
    }


    3.2 順序無關(guān)的遍歷時(shí),用while替代for
    說明:該方法可以減少局部變量的使用。比起效率優(yōu)化,更能直接看到的是字符數(shù)量的優(yōu)化。該做法有程序員強(qiáng)迫癥的嫌疑。

    服用前:
    var arr = [1,2,3,4,5,6,7];
    var sum = 0;
    for (var i = 0, l = arr.length; i < l; i++) {
        sum += arr[i];
    }   

    服用后:
    var arr = [1,2,3,4,5,6,7];
    var sum = 0, l = arr.length;
    while (l--) {
        sum += arr[l];
    }

    4. 條件分支

    4.1 將條件分支,按可能性順序從高到低排列
    說明:可以減少解釋器對(duì)條件的探測(cè)次數(shù)。

    4.2 在同一條件子的多(>2)條件分支時(shí),使用switch優(yōu)于if
    說明:switch分支選擇的效率高于if,在IE下尤為明顯。4分支的測(cè)試,IE下switch的執(zhí)行時(shí)間約為if的一半。

    4.3 使用三目運(yùn)算符替代條件分支
    服用前:
    if (a > b) {
    num = a;
    } else {
    num = b;
    }

    服用后:
    num = a > b ? a : b;


    5. 定時(shí)器

    5.1 需要不斷執(zhí)行的時(shí)候,優(yōu)先考慮使用setInterval
    說明:setTimeout每一次都會(huì)初始化一個(gè)定時(shí)器。setInterval只會(huì)在開始的時(shí)候初始化一個(gè)定時(shí)器

    服用前:
    var timeoutTimes = 0;
    function timeout () {
        timeoutTimes++;
        if (timeoutTimes < 10) {
            setTimeout(timeout, 10);
        }
    }
    timeout();

    服用后:
    var intervalTimes = 0;
    function interval () {
        intervalTimes++;
        if (intervalTimes >= 10) {
            clearInterval(interv);
        }
    }
    var interv = setInterval(interval, 10);

    5.2 使用function而不是string
    說明:如果把字符串作為setTimeout和setInterval的參數(shù),瀏覽器會(huì)先用這個(gè)字符串構(gòu)建一個(gè)function。

    服用前:
    var num = 0;
    setTimeout('num++', 10);   

    服用后:
    var num = 0;
    function addNum () {
        num++;
    }
    setTimeout(addNum, 10);


    6. 其他

    6.1 盡量不使用動(dòng)態(tài)語(yǔ)法元素
    說明:eval、Function、execScript等語(yǔ)句會(huì)再次使用javascript解析引擎進(jìn)行解析,需要消耗大量的執(zhí)行時(shí)間。

    6.2 重復(fù)使用的調(diào)用結(jié)果,事先保存到局部變量
    說明:避免多次取值的調(diào)用開銷。

    服用前:
    var h1 = element1.clientHeight + num1;
    var h2 = element1.clientHeight + num2;

    服用后:
    var eleHeight = element1.clientHeight;
    var h1 = eleHeight + num1;
    var h2 = eleHeight + num2;

    6.3 使用直接量
    說明:
    var a = new Array(param,param,...) -> var a = []
    var foo = new Object() -> var foo = {}
    var reg = new RegExp() -> var reg = /.../

    6.4 避免使用with
    說明: with雖然可以縮短代碼量,但是會(huì)在運(yùn)行時(shí)構(gòu)造一個(gè)新的scope。
    OperaDev上還有這樣的解釋,使用with語(yǔ)句會(huì)使得解釋器無法在語(yǔ)法解析階段對(duì)代碼進(jìn)行優(yōu)化。對(duì)此說法,無法驗(yàn)證。

    服用前:
    with (a.b.c.d) {
    property1 = 1;
    property2 = 2;
    }


    服用后:
    var obj = a.b.c.d;
    obj.property1 = 1;
    obj.property2 = 2;


    6.5 巧用||和&&布爾運(yùn)算符

    服用前:
    function eventHandler (e) {
    if(!e) e = window.event;
    }


    服用后:
    function eventHandler (e) {
    e = e || window.event;
    }


    服用前:
    if (myobj) {
    doSomething(myobj);
    }


    服用后:
    myobj && doSomething(myobj);


    6.6 類型轉(zhuǎn)換
    說明:
    1).    數(shù)字轉(zhuǎn)換成字符串,應(yīng)用"" + 1,性能上:("" +) > String() > .toString() > new String();
    2).    浮點(diǎn)數(shù)轉(zhuǎn)換成整型,不使用parseInt(), parseInt()是用于將字符串轉(zhuǎn)換成數(shù)字,而不是浮點(diǎn)數(shù)和整型之間的轉(zhuǎn)換,建議使用Math.floor()或者M(jìn)ath.round()
    3).    對(duì)于自定義的對(duì)象,推薦顯式調(diào)用toString()。內(nèi)部操作在嘗試所有可能性之后,會(huì)嘗試對(duì)象的toString()方法嘗試能否轉(zhuǎn)化為String。


    二.內(nèi)存管理

    2.1 循環(huán)引用
    說明:如果循環(huán)引用中包含DOM對(duì)象或者ActiveX對(duì)象,那么就會(huì)發(fā)生內(nèi)存泄露。內(nèi)存泄露的后果是在瀏覽器關(guān)閉前,即使是刷新頁(yè)面,這部分內(nèi)存不會(huì)被瀏覽器釋放。

    簡(jiǎn)單的循環(huán)引用:
    var el = document.getElementById('MyElement');
    var func = function () {…}
    el.func = func;
    func.element = el;


    但是通常不會(huì)出現(xiàn)這種情況。通常循環(huán)引用發(fā)生在為dom元素添加閉包作為expendo的時(shí)候。

    如:
    function init() {
        var el = document.getElementById('MyElement');
    el.onclick = function () {……}
    }
    init();


    init在執(zhí)行的時(shí)候,當(dāng)前上下文我們叫做context。這個(gè)時(shí)候,context引用了el,el引用了function,function引用了context。這時(shí)候形成了一個(gè)循環(huán)引用。

    下面2種方法可以解決循環(huán)引用:

    1)    置空dom對(duì)象

    服用前:
    function init() {
    var el = document.getElementById('MyElement');
    el.onclick = function () {……}
    }
    init();


    服用后:
    function init() {
    var el = document.getElementById('MyElement');
    el.onclick = function () {……}
    el = null;
    }
    init();


    將el置空,context中不包含對(duì)dom對(duì)象的引用,從而打斷循環(huán)應(yīng)用。
    如果我們需要將dom對(duì)象返回,可以用如下方法:

    服用前:
    function init() {
        var el = document.getElementById('MyElement');
        el.onclick = function () {……}
        return el;
    }
    init();


    服用后:
    function init() {
    var el = document.getElementById('MyElement');
    el.onclick = function () {……}
    try{
    return el;
    } finally {
        el = null;
    }
    }
    init();

    2)    構(gòu)造新的context
    服用前:
    function init() {
        var el = document.getElementById('MyElement');
        el.onclick = function () {……}
    }
    init();


    服用后:
    function elClickHandler() {……}
    function init() {
        var el = document.getElementById('MyElement');
        el.onclick = elClickHandler;
    }
    init();

    把function抽到新的context中,這樣,function的context就不包含對(duì)el的引用,從而打斷循環(huán)引用。

    2.2 通過javascript創(chuàng)建的dom對(duì)象,必須append到頁(yè)面中
    說明:IE下,腳本創(chuàng)建的dom對(duì)象,如果沒有append到頁(yè)面中,刷新頁(yè)面,這部分內(nèi)存是不會(huì)回收的!

    示例代碼:

        function create () {
            var gc = document.getElementById('GC');
            for (var i = 0; i < 5000 ; i++)
            {
                var el = document.createElement('div');
                el.innerHTML = "test";

                //下面這句可以注釋掉,看看瀏覽器在任務(wù)管理器中,點(diǎn)擊按鈕然后刷新后的內(nèi)存變化
                gc.appendChild(el);
            }
        }


    2.3 釋放dom元素占用的內(nèi)存
    說明:
    將dom元素的innerHTML設(shè)置為空字符串,可以釋放其子元素占用的內(nèi)存。
    在rich應(yīng)用中,用戶也許會(huì)在一個(gè)頁(yè)面上停留很長(zhǎng)時(shí)間,可以使用該方法釋放積累得越來越多的dom元素使用的內(nèi)存。

    2.4 釋放javascript對(duì)象
    說明:在rich應(yīng)用中,隨著實(shí)例化對(duì)象數(shù)量的增加,內(nèi)存消耗會(huì)越來越大。所以應(yīng)當(dāng)及時(shí)釋放對(duì)對(duì)象的引用,讓GC能夠回收這些內(nèi)存控件。
    對(duì)象:obj = null
    對(duì)象屬性:delete obj.myproperty
    數(shù)組item:使用數(shù)組的splice方法釋放數(shù)組中不用的item

    2.5 避免string的隱式裝箱
    說明:對(duì)string的方法調(diào)用,比如'xxx'.length,瀏覽器會(huì)進(jìn)行一個(gè)隱式的裝箱操作,將字符串先轉(zhuǎn)換成一個(gè)String對(duì)象。推薦對(duì)聲明有可能使用String實(shí)例方法的字符串時(shí),采用如下寫法:
    var myString = new String('Hello World');

    posted @ 2012-07-25 06:44 zx_bing| 編輯 收藏

    徹底刪除SQL Server注冊(cè)表信息

    1.徹底刪除SQL Server:
    hkey_local_machine\software\Microsoft\MSSQLServer
    hkey_local_machine\software\Microsoft\Microsoft SQL Server
    hkey_current_user\software\Microsoft\Microsoft SQL Server
    hkey_current_user\software\Microsoft\MSSQLServer
    hkey_local_machine\system\currentcontrolset\control\sessionmanager\pendingfileren      
    ameoperations


     


    2。注冊(cè)表中的相關(guān)信息刪除:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer。

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSDTC。

    3。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
    Manager中找到PendingFileRenameOperations項(xiàng)目,并刪除它。這樣就可以清除安裝暫掛項(xiàng)目
    4。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\setup
    刪除ExceptionComponents



    3、運(yùn)行注冊(cè)表,刪除如下項(xiàng):
    HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL
    Server
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer

    posted @ 2012-07-25 06:40 zx_bing| 編輯 收藏

    AndroMDA開發(fā)環(huán)境搭建

    翻譯者:Jason S.H.Chen
    (英文地址:http://www.andromda.org/index.php?option=com_content&view=article&id=105:environment-setup&catid=42:getting-started-java&Itemid=89

    環(huán)境設(shè)置
    本節(jié)將一步步的指導(dǎo)你完成AndroMDA開發(fā)環(huán)境的設(shè)置。我們假定你工作在Windows操作系統(tǒng)上。
    通過此節(jié),你將安裝多種程序。每種程序的推薦安裝路徑以及所需要的其他目錄已列在下面。你可以根據(jù)你的系統(tǒng)配置和個(gè)人喜好自由的修改這些目錄。比如,你可以選擇將程序安裝在D盤而不是C盤。無論如何,請(qǐng)注意一件事情,有些程序會(huì)因?yàn)槟闼O(shè)置的路徑名中包含空格而不能正常工作。所以,在安裝配置程序過程中盡可能復(fù)制粘貼下面推薦的路徑。
    推薦安裝路徑 用途
    C:\Documents and Settings\你的用戶名\.m2\repository Maven本地庫(kù)
    C:\Program Files\Apache Software Foundation\maven-2.0.8 Maven安裝路徑
    C:\Program Files\Java\jdk1.6.0_xx JDK
    C:\Program Files\Java\jre1.6.0_xx JRE,Java 運(yùn)行引擎
    C:\Program Files\MySQL\MySQL Server 5.0 MySQL數(shù)據(jù)庫(kù)服務(wù)器
    C:\eclipse Eclipse集成開發(fā)環(huán)境(可選)
    C:\jboss-4.0.5 JBoss應(yīng)用服務(wù)器
    你還需要設(shè)置一些相關(guān)的環(huán)境變量。在控制面板中可完成環(huán)境的設(shè)置(控制面板>系統(tǒng)>高級(jí)>環(huán)境變量)。注意:任何程序的安裝目錄被修改后,你必須確保將與之相關(guān)的環(huán)境變量的取值修改與之一致。
    準(zhǔn)備開發(fā)環(huán)境
    請(qǐng)按照下面的步驟開始準(zhǔn)備AndroMDA的開發(fā)環(huán)境。
    安裝Java
    請(qǐng)從這里下載JDK6安裝程序并執(zhí)行安裝。此版本是AndroMDA推薦的JDK安裝版本。AndroMDA也支持JDK1.5.我們不再支持JDK1.4.
    確保JAVA_HOME環(huán)境變量指向的目錄是JDK的安裝目錄。也許你已經(jīng)設(shè)置了這個(gè)環(huán)境變量,但最好還是檢查一下:
    1. 進(jìn)入【控制面板】,雙擊【系統(tǒng)】。
    2. 選擇【高級(jí)】選項(xiàng)卡,點(diǎn)擊【環(huán)境變量】。
    3. 查看JAVA_HOME的值是否指向你的JDK安裝目錄。如果不是請(qǐng)編輯JAVA_HOME變量的值,讓他指向JDK的安裝目錄(比如:C:\Program Files\Java\jdk1.6.0_06)。
    安裝Maven
    Maven是AndroMDA的首選應(yīng)用系統(tǒng)構(gòu)建部署工具。基于項(xiàng)目對(duì)象模型(POM)的概念,Maven可以管理一個(gè)項(xiàng)目的構(gòu)建,報(bào)告和文檔等。如果你熟悉Ant的話,Maven與之有不少相同之處,但Maven提供了更多的功能:
    1. 可繼承的構(gòu)建環(huán)境配置,在POM文件(pom.xml)中配置的參數(shù)可以傳遞給所有子項(xiàng)目的POM文件。
    2. 標(biāo)準(zhǔn)化的構(gòu)建任務(wù)(清除,構(gòu)建,安裝,部署等)。
    3. 能表達(dá)構(gòu)建和部署任務(wù)所依賴的庫(kù),不管是內(nèi)部依賴庫(kù)還是外部依賴庫(kù),都必須指明所依賴的具體版本號(hào)。
    4. 提供一個(gè)包含所有項(xiàng)目所依賴的版本的庫(kù)文件的倉(cāng)庫(kù)。在系統(tǒng)的構(gòu)建和部署過程中會(huì)用到倉(cāng)庫(kù)(有點(diǎn)類似于.net的全局匯編緩存的概念)。
    按照下面的步驟安裝Maven2.0.8.
    1. 點(diǎn)擊這里下載Maven2.0.8.
    2. 將文件解壓到C:\Program Files\Apache Software Foundation這個(gè)目錄,一個(gè)名為maven-2.0.8的目錄將被創(chuàng)建,此目錄下面就是Maven2.0.8的程序。
    注意:如果你使用代理服務(wù)器上網(wǎng)的話,你必須配置Maven使用代理。詳細(xì)的配置你可以在這里找到。
    安裝JBoss應(yīng)用服務(wù)器
    JBoss應(yīng)用服務(wù)器是一款應(yīng)用很廣泛的開源應(yīng)用服務(wù)器。按照下面的步驟安裝JBoss4.0.5.
    1. 點(diǎn)擊這里轉(zhuǎn)到JBoss的下載頁(yè)面。
    2. 在下載列表上選擇JBoss Application Server version 4.0.5的下載按鈕,系統(tǒng)將把你帶到SourceForge的下載頁(yè)面。
    3. 點(diǎn)擊名為“jboss-4.0.5GA.zip”的下載鏈接,進(jìn)行下載。
    4. 下載完畢,將下載的文件解壓到C盤,一個(gè)名為jboss-4.0.4GA的目錄將被創(chuàng)建。此目錄下包含JBoss應(yīng)用服務(wù)器的程序文件。
    5. 如果你打算在你的機(jī)器上也安裝Oracle數(shù)據(jù)庫(kù)的話,你必須將JBoss的 http端口8080修改成其他端口。Oracle也默認(rèn)使用此端口,而且Oracle的配置不容易修改。如果你要修改JBoss的http端口的話,請(qǐng)打開C:\jboss-4.0.5\server\default\deploy\jbossweb-tomcat55.sar這個(gè)目錄下的名為server.xml的文件,將文件中所有8080數(shù)字修改為其他的值,比如9090.這樣即可解決Oracle和JBoss之間的沖突。如果你將8080端口修改成了9090,那么手冊(cè)中所有使用到8080端口的地方,對(duì)于你來說都是9090端口。
    設(shè)置環(huán)境變量
    前面我們已經(jīng)通過設(shè)置環(huán)境變量JAVA_HOME講解了怎樣設(shè)置環(huán)境變量。強(qiáng)烈推薦先設(shè)置完下面列出的環(huán)境變量后在繼續(xù)后面的學(xué)習(xí)。為了保持文章的完整性,我們將環(huán)境變量JAVA_HOME也列在了下面。
    環(huán)境變量名 環(huán)境變量值 是否必須
    JAVA_HOME JAVA安裝目錄,比如C:\Program Files\Java\jdk1.6.0_06 必須
    JBOSS_HOME JBoss安裝目錄,比如C:\jboss-4.0.5 必須
    M2_HOME Maven安裝目錄,比如C:\Program Files\Apache Software Foundation\maven-2.0.8 必須
    M2_REPO Maven本地庫(kù) 必須
    MAVEN_OPTS 運(yùn)行Maven的JVM參數(shù)(推薦:-XX:MaxPermSize=128m -Xmx512m,構(gòu)建大型項(xiàng)目最好設(shè)置) 可選
    PATH 將%JAVA_HOME%\bin;%M2_HOME%\bin添加到PATH值中 必須

    測(cè)試Maven并創(chuàng)建本地Maven庫(kù)
    Maven is based on the concept of a central(這句不知道怎樣翻譯合理), local repository located on your machine, where it stores artifacts such as 3rd party libraries as well as components created by you.本地Maven庫(kù)存在你的電腦上,在庫(kù)中存儲(chǔ)著很多項(xiàng)目需要使用的第三方庫(kù)和你自己創(chuàng)建的庫(kù)。當(dāng)你創(chuàng)建一個(gè)新項(xiàng)目時(shí),你必須創(chuàng)建一個(gè)名為pom.xml用于描述項(xiàng)目對(duì)象信息的文件。在這個(gè)文件中,你告訴maven你的應(yīng)用會(huì)依賴哪些第三方庫(kù)以及他們的具體版本。當(dāng)Maven開始構(gòu)建應(yīng)用的時(shí)候,他會(huì)首先從遠(yuǎn)程庫(kù)(通過網(wǎng)絡(luò))中獲取項(xiàng)目所依賴的這些庫(kù),并把從遠(yuǎn)程庫(kù)獲取的庫(kù)復(fù)制到本地庫(kù)。因?yàn)檫@樣你以后就可以完全通過本地庫(kù)完成構(gòu)建應(yīng)用。默認(rèn)情況下,你的本地庫(kù)在“C:\Documents and Settings\{你的用戶名}\.m2\repository”這個(gè)目錄下(其中,你的用戶名是只你登錄系統(tǒng)的用戶名)。到目前為止,我們只安裝了Maven程序,還沒有創(chuàng)建本地庫(kù)。按照下面的步驟測(cè)試你是否已經(jīng)正確安裝了Maven和創(chuàng)建你的本地庫(kù)。我們將使用Maven的標(biāo)準(zhǔn)插件創(chuàng)建一個(gè)臨時(shí)項(xiàng)目進(jìn)行測(cè)試,測(cè)試完可以刪除臨時(shí)項(xiàng)目。
    1. 開啟命名提示窗口,將當(dāng)前路徑切換到任何一個(gè)臨時(shí)文件目錄下,比如c:\temp
    2. 執(zhí)行下面的命令檢查你是否正確安裝配置了Mavne:
    Mvn --version
    3. 窗口中出現(xiàn)如下信息,則標(biāo)示你安裝配置正確。
    Maven version:2.0.2
    4. 執(zhí)行下面的命令創(chuàng)建一個(gè)臨時(shí)項(xiàng)目:
    mvn archetype:create -DgroupId=testapp -DartifactId=testapp
    必須確保在此命令執(zhí)行完畢,你得到的反饋信息是“Build Successful”.有時(shí)候會(huì)因?yàn)榫W(wǎng)絡(luò)問題導(dǎo)致maven不能下載所有所依賴的庫(kù)文件而失敗。如果你也是遇到這個(gè)問題的話,你不妨多執(zhí)行幾次上面的命令,直到成功執(zhí)行此命令為止。
    5. 到當(dāng)前目錄中去核實(shí)一下,看是否有個(gè)名為testapp的臨時(shí)項(xiàng)目被創(chuàng)建,同時(shí)到上面提到的倉(cāng)庫(kù)路徑目錄去核實(shí)一下本地倉(cāng)庫(kù)是否被創(chuàng)建了。如果這兩項(xiàng)工作都成功地完成,那么你可以刪除剛才測(cè)試時(shí)所產(chǎn)生的臨時(shí)項(xiàng)目了。
    安裝AndroMDA插件
    下面我們將下載并安裝AndroMDA的maven插件到你的本地maven庫(kù)。此插件是Java調(diào)用AndroMDA的入口程序。這事唯一一個(gè)需要安裝的AndroMDA文件。其他的文件(比如代碼生成器)將根據(jù)構(gòu)建工作的需要自動(dòng)下載。按照下面的步驟進(jìn)行安裝:
    1. 點(diǎn)擊這里下載AndroMDA插件安裝程序。
    2. 在安裝文件在你的本地maven庫(kù)的目錄下(C:\Documents and Settings\{你的用戶名}\.m2\repository)進(jìn)行解壓縮。
    3. 請(qǐng)確認(rèn)下面的目錄是否存在,存在則繼續(xù)
    C:\Documents and Settings\你的用戶名 \.m2\repository\org\andromda\maven\plugins\andromdapp-maven-plugin
    4. 創(chuàng)建一個(gè)臨時(shí)文件夾,比如:c:\andromda-temp
    5. 在臨時(shí)文件夾中創(chuàng)建一個(gè)pom.xml文件,并將下面的內(nèi)容拷貝到pom.xml文件中并保存。
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>samples.test</groupId>
        <artifactId>test</artifactId>
        <version>1.0</version>
        <packaging>jar</packaging>
        <name>test</name>

        <build>
            <defaultGoal>compile</defaultGoal>
            <plugins>
                <plugin>
                    <groupId>org.andromda.maven.plugins</groupId>
                    <artifactId>andromdapp-maven-plugin</artifactId>
                    <version>3.3</version>
                </plugin>
            </plugins>
        </build>

        <repositories>
            <repository>
                <id>andromda</id>
                <name>AndroMDA Repository</name>
                <url>http://team.andromda.org/maven2</url>
            </repository>
        </repositories>

        <pluginRepositories>
            <pluginRepository>
                <id>andromda</id>
                <name>AndroMDA Repository</name>
                <url>http://team.andromda.org/maven2</url>
            </pluginRepository>
        </pluginRepositories>
    </project>
    6. 打開dos窗口,并將當(dāng)強(qiáng)目錄切換為剛才創(chuàng)建的pom.xml文件所在的目錄,輸入 mvn (不需要帶參數(shù))回車。確保命令執(zhí)行完后,屏幕上顯示的信息是“BUILD SUCCESSFUL”(有時(shí)候會(huì)因?yàn)榫W(wǎng)絡(luò)的原因不能下載完畢所有需要的庫(kù)文件,故不能執(zhí)行成功,如果遇到這種問題,請(qǐng)多執(zhí)行幾次這個(gè)命令,直到成功執(zhí)行為止)。
    7. 可以將剛才創(chuàng)建的臨時(shí)目錄刪除了。
    安裝一款UML工具
    安裝一款UML建模工具,你能使用他進(jìn)行應(yīng)用系統(tǒng)的建模,并能將創(chuàng)建的模型導(dǎo)成AndroMDA能識(shí)別的格式的文檔。AndroMDA目前支持UML1.4/XMI1.2和UML2/EMF幾種格式的文檔。下面列出了推薦使用的UML建模工具大安裝配置鏈接,你可以根據(jù)自己選擇的UML工具參考對(duì)應(yīng)的安裝配置鏈接。如果你已經(jīng)安裝了下面推薦的某款UML工具,你也最好看看其相應(yīng)的配置頁(yè)面。
    ArgoUML(支持UML1.4/XMI1.2)
    MagicDraw9.x(支持UML1.4/XMI1.2)
    MagicDraw15.5(支持UML2/EMF)
    RSM6(Rational Software Modeler/Architect 支持UML2/EMF)
    安裝數(shù)據(jù)庫(kù)服務(wù)器
    安裝任一款Hibernate支持的數(shù)據(jù)庫(kù)。點(diǎn)擊這里查看Hibernate所支持的所有數(shù)據(jù)庫(kù)的列表。此手冊(cè)中我們使用MySQL5.0(一款應(yīng)用非常廣泛的開源數(shù)據(jù)庫(kù))。如果你安裝是Hibernate支持的其他的數(shù)據(jù)庫(kù),請(qǐng)對(duì)JBoss和Hibernate的配置做相應(yīng)的調(diào)整。按照下面的步驟安裝配置MySQL.
    1. 點(diǎn)擊這里到MySQL的下載頁(yè)面。
    2. 下載Windows版的安裝程序(確切的說是“Windows(X86)”,不是“Essentials”)。將MySQL安裝在C:\Program Files\MySQL\MySQL Server 5.0目錄下。請(qǐng)記住所使用的端口(port),用戶賬號(hào)和密碼。每次你通過控制臺(tái)連接數(shù)據(jù)庫(kù)都需要用到,在應(yīng)用程序中數(shù)據(jù)庫(kù)連接配置中也要用到。
    3. 下載安裝MySQL GUI Tool Bundle(MySQL數(shù)據(jù)庫(kù)圖形化的管理查詢工具)。
    4. 下載MySQL Connector/J version 5.0.4,MySQL的JDBC驅(qū)動(dòng)程序。解壓到C:\Program Files\MySQL目錄。
    5. 將MySQL的JDBC驅(qū)動(dòng)程序C:\Program Files\MySQL\mysql-connector-java-5.0.4\mysql-connector-java-5.0.4-bin.jar拷貝到JBoss的C:\jboss-4.0.5\server\default\lib目錄。請(qǐng)將mysql-connector-java-5.0.4-bin.jar的文件名改為mysql-connector-java-5.0.4.jar,這樣更符合maven的規(guī)范。有了JDBC驅(qū)動(dòng)程序,JBoss就可以訪問你的數(shù)據(jù)庫(kù)了。
    安裝Eclipse(可選)
    Eclipse是一款非常流程的開源的JAVA應(yīng)用集成開發(fā)環(huán)境(IDE).AndroMDA并不需要他,但是我們推薦你使用他以提高你的開發(fā)效率。Eclipse用戶應(yīng)該非常高興,因?yàn)锳ndroMDA可以為你們生成項(xiàng)目的.project和.classpath文件。你們只需要簡(jiǎn)單地將項(xiàng)目導(dǎo)入Eclipse即可進(jìn)行代碼的編寫了。
    你可從這里下載Eclipse.我們推薦下載Eclipse IDE for Java EE Developers這個(gè)版本。按照下面的步驟安裝配置Eclipse.
    1. 將下載的文件解壓到你的硬盤上,推薦C:\eclipse
    2. 編輯C:\eclipse目錄下的eclipse.ini文件以增加分配給Eclipse的內(nèi)存。下面是推薦你向文件中添加的內(nèi)容:
    -vmargs
    -Xms256m
    -Xmx512m
    -XX:PermSize=64m
    -XX:MaxPermSize=128m
    3. 雙擊Eclipse.exe開啟Eclipse.
    4. Eclipse會(huì)要求你設(shè)置一個(gè)存放項(xiàng)目的文件夾。這個(gè)文件夾被成為Eclipse的工作區(qū)。將這個(gè)目錄設(shè)置為你通常用來保存創(chuàng)建項(xiàng)目的目錄,比如c:\projects目錄。
    5. 從【W(wǎng)indow】菜單中選擇【參數(shù)設(shè)置】(Preferences)菜單項(xiàng)。
    6. 在出現(xiàn)的面板的左邊依次選擇Java>Build Path>Classpath Variables.
    7. 點(diǎn)【新建】(New)。
    8. 將“M2_REPO”填寫在名稱文本框(Name),將你本機(jī)的maven庫(kù)的路徑(C:\Documents and Settings\{你的用戶名}\.m2\repository,前面所設(shè)置的)填寫在路徑文本框(Path)。當(dāng)導(dǎo)入AndroMDA產(chǎn)生的項(xiàng)目時(shí),項(xiàng)目會(huì)根據(jù)此變量查找所引用的Maven庫(kù)中的庫(kù)文件。
    9. 點(diǎn)擊2次【確定】(ok)關(guān)閉所有對(duì)話框。
    好的,現(xiàn)在我們已經(jīng)將AndroMDA開發(fā)環(huán)境搭建好,我們已經(jīng)準(zhǔn)備好拿日志跟蹤系統(tǒng)來試驗(yàn)AndroMDA了。下節(jié)我們將在講解具體怎樣開發(fā)日志跟蹤系統(tǒng)之前先帶大家體驗(yàn)一下我們已經(jīng)開發(fā)完畢的系統(tǒng),讓你在學(xué)習(xí)過程中也好做到心中有數(shù)。

    posted @ 2012-07-25 06:38 zx_bing| 編輯 收藏

    widow orcal 卸載

    oracle在默認(rèn)安裝下會(huì)安裝5個(gè)計(jì)算機(jī)服務(wù)(右鍵我的電腦-管理-計(jì)算機(jī)管理-服務(wù)與應(yīng)用程序-服務(wù))或者(控制面板-管理工具-服務(wù)),同時(shí),五個(gè)服務(wù)分別為
    Oracle代碼 復(fù)制代碼 收藏代碼
    1. OracleDBConsoleorcl 
    2. OracleJobSchedulerORCL 
    3. OracleOraDb10g_home1iSQL*Plus 
    4. OracleOraDb10g_home1TNSListener 
    5. OracleServiceORCL 
    6. (默認(rèn)數(shù)據(jù)庫(kù)為orcl) 
    7. 另外還有注冊(cè)表項(xiàng) 
    8. Oracle.orcl 
    9. Oracle in OraDb10g_home1 
    10. 此外 
    11. OracleOraDb10g_home1根據(jù)不同電腦配置會(huì)有所不同,也可能是 
    12. OracleOraDb10g_home2 
    13. OracleOraDb10g_home3 



    在程序沒有完全損壞的情況下,尤其是卸載程序尚可使用,建議先卸載程序,再清空注冊(cè)表。如果程序已經(jīng)已經(jīng)損壞,只能從清理注冊(cè)表開始了。
    清理注冊(cè)表之后,刪除oracle安裝目錄下所有文件(有需要備份酌情考慮吧)

    使用命令進(jìn)入注冊(cè)表:
    Cmd代碼 復(fù)制代碼 收藏代碼
    1. regedit 

    清理一下節(jié)點(diǎn)
    Regedit代碼 復(fù)制代碼 收藏代碼
    1. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\SYSMAN 有1項(xiàng) (OracleDBConsoleorcl) 
    2. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\eventlog\Application  
    3. 3項(xiàng) (其中有Oracle.orcl) 
    4. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services  有5項(xiàng) 
    5. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\eventlog\Application   
    6. 3項(xiàng) (其中有Oracle.orcl) 
    7. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services  有5項(xiàng) 
    8. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application  
    9. 3項(xiàng) (其中有Oracle.orcl) 
    10. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services 有5項(xiàng) 


    如果是正常卸載的話,可能有些節(jié)點(diǎn)會(huì)減少,不過按理說清空這些就差不多了。然后刪除oracle目錄下所有文件,重啟電腦,會(huì)發(fā)現(xiàn)五個(gè)服務(wù)都已經(jīng)沒有了,這時(shí)候就可以重新安裝一個(gè)新的oracle了。
    當(dāng)然,有可能會(huì)提示安裝目錄被使用,這時(shí)候進(jìn)入注冊(cè)表搜索那些節(jié)點(diǎn)占用了安裝目錄,刪除掉,重啟后繼續(xù)安裝就行了。

    下面提供以下需要清理的注冊(cè)表項(xiàng)的位置

    OracleDBConsoleorcl
    Regedit代碼 復(fù)制代碼 收藏代碼
    1. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\SYSMAN 
    2. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\eventlog\Application\OracleDBConsoleorcl 
    3. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OracleDBConsoleorcl 
    4. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\eventlog\Application\OracleDBConsoleorcl 
    5. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\OracleDBConsoleorcl 
    6. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\OracleDBConsoleorcl 
    7. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\OracleDBConsoleorcl 


    OracleJobSchedulerORCL
    Regedit代碼 復(fù)制代碼 收藏代碼
    1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OracleJobSchedulerORCL 
    2. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\OracleJobSchedulerORCL 
    3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\OracleJobSchedulerORCL 


    OracleOraDb10g_home2iSQL*Plus
    Regedit代碼 復(fù)制代碼 收藏代碼
    1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\eventlog\Application\OracleOraDb10g_home2iSQL*Plus 
    2. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OracleOraDb10g_home2iSQL*Plus 
    3. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\eventlog\Application\OracleOraDb10g_home2iSQL*Plus 
    4. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\OracleOraDb10g_home2iSQL*Plus 
    5. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\OracleOraDb10g_home2iSQL*Plus 
    6. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\OracleOraDb10g_home2iSQL*Plus 


    OracleOraDb10g_home2TNSListener
    Regedit代碼 復(fù)制代碼 收藏代碼
    1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OracleOraDb10g_home2TNSListener 
    2. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\OracleOraDb10g_home2TNSListener 
    3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\OracleOraDb10g_home2TNSListener 


    OracleServiceORCL
    Regedit代碼 復(fù)制代碼 收藏代碼
    1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OracleServiceORCL 
    2. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\OracleServiceORCL 
    3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\OracleServiceORCL 


    Oracle.orcl
    Regedit代碼 復(fù)制代碼 收藏代碼
    1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\eventlog\Application  
    2. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\services\eventlog\Application 
    3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application 


    Oracle in OraDb10g_home
    Regedit代碼 復(fù)制代碼 收藏代碼
    1. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI 
    2. 可能有home1 home2等等 

    呵呵 ,還會(huì)為oracle不能干凈卸載、重新安裝發(fā)愁么,有興趣的來試一下吧……
    此外,聽說360也能清理注冊(cè)表,不知道是不是真的,我還沒用過那個(gè)清理,期待有人出來說說啊……



    1、停止所有Oracle服務(wù)

    2、刪除注冊(cè)表中的所有關(guān)于Oracle項(xiàng)

    (1)在HKEY_LOCAL_MACHINE\SOFTWARE下,刪除Oracle目錄

    (2)在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services下,刪除所有Oracle項(xiàng)

    (3)在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services下,刪除所有Oracle項(xiàng)

    (4)在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下,刪除所有Oracle項(xiàng)

    (5)在HKEY_CLASSES_ROOT下,刪除所有Oracle項(xiàng)

    3、刪除硬盤上所有Oracle文件

    (1)Oracle安裝文件

    (2)系統(tǒng)目錄下,在Program files文件夾中的Oracle文件

    4、有些文件刪不去,重啟后再刪,完成卸載。


    posted @ 2012-07-25 06:34 zx_bing| 編輯 收藏

    MySQL刪除注冊(cè)表

        只有注冊(cè)用戶登錄后才能閱讀該文。閱讀全文

    posted @ 2012-07-25 06:30 zx_bing 閱讀(39) | 評(píng)論 (0)編輯 收藏

    電腦中毒后 提示“網(wǎng)絡(luò)連接中斷,可能是您的網(wǎng)卡被禁用或者網(wǎng)絡(luò)電纜沒有插好”

     前幾天我的電腦中毒了,然后就是一直連不上網(wǎng)(校園網(wǎng)),總是提示我“網(wǎng)絡(luò)中斷,可能是網(wǎng)卡被禁用或者是網(wǎng)絡(luò)電纜沒有連接好”

    解決的方法:卸載H3C聯(lián)網(wǎng)客戶端,重新安裝一下,一般在你裝完后的第一次啟動(dòng)電腦的時(shí)候是可以連上網(wǎng)的(第二次啟動(dòng)電腦的時(shí)候可能就被病毒搞了,可能就連不上網(wǎng)了),所以你要趁著這一時(shí)機(jī)能連上網(wǎng),下載一個(gè)“360系統(tǒng)拯救”查殺一下(360系統(tǒng)拯救
    使用需要聯(lián)網(wǎng),而且殺毒非常徹底),這個(gè)時(shí)候一般都能查出有很多的木馬,然后殺死它們,重啟電腦,可以聯(lián)網(wǎng)了,現(xiàn)在以我的經(jīng)驗(yàn),你最好在用它殺一遍毒看看,可能還會(huì)有一些病毒的,保險(xiǎn)起見,然后再重啟,這次應(yīng)該說是基本沒問題了,這時(shí)候你就可以放心地上網(wǎng)啦!


    http://wenku.baidu.com/view/399d76c10c22590102029da5.html

    --

    http://wenku.baidu.com/view/399d76c10c22590102029da5.html

    posted @ 2012-07-14 20:56 zx_bing| 編輯 收藏

    斷點(diǎn)調(diào)試

    復(fù)制的網(wǎng)上的 算是懂得了調(diào)試的方法 但還是不懂的調(diào)試有何作用
    最基本的操作是:
    1, 首先在一個(gè)java文件中設(shè)斷點(diǎn),然后運(yùn)行,當(dāng)程序走到斷點(diǎn)處就會(huì)轉(zhuǎn)到debug視圖下,
    2, F5鍵與F6鍵均為單步調(diào)試,F(xiàn)5是step into,也就是進(jìn)入本行代碼中執(zhí)行,F(xiàn)6是step over,
    也就是執(zhí)行本行代碼,跳到下一行,
    3,F7是跳出函數(shù) step return
    4,F8是執(zhí)行到最后。

    =====================================

    1.Step Into (also F5) 跳入
    2.Step Over (also F6) 跳過
    3.Step Return (also F7) 執(zhí)行完當(dāng)前method,然后return跳出此method
    4.step Filter 逐步過濾 一直執(zhí)行直到遇到未經(jīng)過濾的位置或斷點(diǎn)(設(shè)置Filter:window-preferences-java-Debug-step Filtering)
    5.resume 重新開始執(zhí)行debug,一直運(yùn)行直到遇到breakpoint
    6.hit count 設(shè)置執(zhí)行次數(shù) 適合程序中的for循環(huán)(設(shè)置 breakpoint view-右鍵hit count)
    7.inspect 檢查 運(yùn)算。執(zhí)行一個(gè)表達(dá)式顯示執(zhí)行值
    8.watch 實(shí)時(shí)地監(jiān)視變量的變化
    9.我們常說的斷點(diǎn)(breakpoints)是指line breakpoints,除了line breakpoints,還有其他的斷點(diǎn)類型:field(watchpoint)breakpoint,method breakpoint,exception breakpoint.
    10.field breakpoint 也叫watchpoint(監(jiān)視點(diǎn)) 當(dāng)成員變量被讀取或修改時(shí)暫掛
    11.添加method breakpoint 進(jìn)入/離開此方法時(shí)暫掛(Run-method breakpoint)
    12.添加Exception breakpoint 捕抓到Execption時(shí)暫掛(待續(xù)...)
    斷點(diǎn)屬性:
    1.hit count 執(zhí)行多少次數(shù)后暫掛 用于循環(huán)
    2.enable condition 遇到符合你輸入條件(為ture\改變時(shí))就暫掛
    3.suspend thread 多線程時(shí)暫掛此線程
    4.suspend VM 暫掛虛擬機(jī)
    13.variables 視圖里的變量可以改變變量值,在variables 視圖選擇變量點(diǎn)擊右鍵--change value.一次來進(jìn)行快速調(diào)試。
    14.debug 過程中修改了某些code后--〉save&build-->resume-->重新暫掛于斷點(diǎn)


    ===========================
    例如你有如下程序:
    public static void main(String args[]) {

    MyDate aa = new MyDate();
    aa.addDays(day);                      =============》(1)
    System.out.println("eeeeeeeeeeeeeee");=============》(2)
    }

    public String addDays(int more_days) {
    System.out.println("1");               =============》(3)
    String result = "";         =============》(4)
    System.out.println("2");               =============》(5)
    return result;
    }

    你在(1)處加斷點(diǎn),運(yùn)行到此處時(shí)如果Step Into (also F5)為跳入,則接著執(zhí)行到(3)。再執(zhí)行Step Over (also F6)執(zhí)行本行,則執(zhí)行到(4)。最后執(zhí)行Step Return (also F7),則跳出addDays方法,跳到(2)

    MyEclipse斷點(diǎn)調(diào)試JavaScript我們可以從以下的幾個(gè)步驟來說明:
    1.在站點(diǎn)下準(zhǔn)備兩個(gè)文件:1.js和index.html,在index.html中引入1.js,點(diǎn)擊index.html中的按鈕,就會(huì)調(diào)用1.js中的test()方法:
    xml 代碼
    ﹤html﹥ 
    ﹤head﹥ 
    ﹤meta http-equiv="Content-Type" content="text/html; charset=gb2312" /﹥ 
    ﹤/head﹥ 
    ﹤script type='text/javascript' src='./1.js'﹥﹤/script﹥ 
    ﹤body﹥ 
    ﹤input type="button" name="t" value="測(cè)試" onclick="test()"/﹥ 
    ﹤/body﹥ 
    ﹤/html﹥ 
    2.啟動(dòng)tomcat后,用myEclipse的web2.0瀏覽器瀏覽頁(yè)面:

    MyEclipse斷點(diǎn)調(diào)試JavaScript淺析圖1
    3.在web2.0瀏覽器中,輸入頁(yè)面地址,出現(xiàn)頁(yè)面后,點(diǎn)擊工具欄中的“js調(diào)試”按鈕,這時(shí)會(huì)在“Javascript Scripts Inspector”窗口中列出當(dāng)前頁(yè)面設(shè)計(jì)的所有js文件。選擇需要斷點(diǎn)調(diào)試的js文件,雙擊進(jìn)入。

    MyEclipse斷點(diǎn)調(diào)試JavaScript淺析圖2
    4.進(jìn)入到1.js文件后,就可以給js代碼加斷點(diǎn)了:

    MyEclipse斷點(diǎn)調(diào)試JavaScript淺析圖3
    5.這時(shí)再回到剛才web2.0的瀏覽頁(yè)面,點(diǎn)擊 按鈕,調(diào)用1.js中的test()方法,系統(tǒng)就會(huì)自動(dòng)跳轉(zhuǎn)到調(diào)試狀態(tài),并定位到1.js中剛才設(shè)置斷點(diǎn)的位置了。

    posted @ 2012-07-14 06:52 zx_bing| 編輯 收藏

    主站蜘蛛池模板: 亚洲娇小性xxxx色| 男女免费观看在线爽爽爽视频| 又爽又高潮的BB视频免费看| 亚洲中文字幕人成乱码| 性xxxx视频免费播放直播| 中文字幕不卡亚洲| 无码毛片一区二区三区视频免费播放 | 亚洲91精品麻豆国产系列在线| 免费看又黄又无码的网站| 国产亚洲精品自在久久| japanese色国产在线看免费| 亚洲第一黄片大全| 香蕉视频免费在线播放| 国产大片91精品免费看3| 亚洲色偷偷偷综合网| 国拍在线精品视频免费观看| 亚洲日本视频在线观看| 黄色成人免费网站| 91亚洲精品自在在线观看| 69av免费观看| 亚洲精品电影天堂网| 毛片免费全部播放无码 | 亚洲妇女无套内射精| 女人18毛片水真多免费看| 久久国产亚洲精品| 18禁无遮挡无码网站免费| 亚洲国产日韩精品| 免费毛片在线播放| 无码一区二区三区亚洲人妻| 国产片免费在线观看| 国产精品亚洲а∨无码播放不卡| 国产免费无遮挡精品视频| 美女无遮挡免费视频网站| 亚洲国产香蕉人人爽成AV片久久| 日韩在线视频免费| 在线观看亚洲精品国产| 两个人看的www免费视频| 亚洲AV乱码久久精品蜜桃| 4399影视免费观看高清直播| 亚洲国产精品免费在线观看| 四虎永久在线精品免费网址|