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

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

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

    zx_bing

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

    2012年7月25日

    sql browser 無法啟動終極解決辦法

    一、為 SQL 啟用遠程連接

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

    注意:請在接收到以下消息時單擊“確定”:
    直到重新啟動數(shù)據(jù)庫引擎服務(wù)后,對連接設(shè)置所做的更改才會生效。
    4. 在“服務(wù)和連接的外圍應(yīng)用配置器”頁上,展開“數(shù)據(jù)庫引擎”,依次單擊“服務(wù)”和“停止”,等待 MSSQLSERVER 服務(wù)停止,然后單擊“啟動”以重新啟動 MSSQLSERVER 服務(wù)。

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

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

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

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

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

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

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

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

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

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

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

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

    六、測試連接

    1、打開SQL2005登陸界面,輸入服務(wù)器IP和用戶名及密碼。
    如:
    服務(wù)器名稱:
    192.168.1.200,21
    用戶名:sa
    密碼:sa
    點連接,結(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類型標準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實例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| 編輯 收藏

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

    關(guān)于lazy機制:

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

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

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

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

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

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

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

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

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

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

    當<class>元素的lazy屬性為true,會影響Session的load()方法的各種運行時行為,下面舉例說明。

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

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

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

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

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

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

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

    3.net.sf.hibernate.Hibernate類的initialize()靜態(tài)方法用于在Session范圍內(nèi)顯式初始化代理類實例,isInitialized()方法用于判斷代理類實例是否已經(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代理類實例,因此當Session關(guān)閉后,可以正常訪問Customer游離對象。

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

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

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

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


    解決方法:

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

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

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


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

    在Web層進行延遲加載

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



    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>


    實現(xiàn)Hibernate的Dao接口來使用打開的會話是很容易的。事實上,如果你已經(jīng)使用了Spring框架來實現(xiàn)你的Hibernate Dao,很可能你不需要改變?nèi)魏螙|西。方便的HibernateTemplate公用組件使訪問數(shù)據(jù)庫變成小菜一碟,而DAO接口只有通過這個組件才可以訪問到數(shù)據(jù)庫。下面是一個示例的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來使得延遲加載變得很容易實現(xiàn)。這個Hibernate 攔截器透明地將調(diào)用配置在Spring應(yīng)用程序上下文中的業(yè)務(wù)對象中方法的請求攔截下來,在調(diào)用方法之前打開一個Hibernate會話,然后在方法執(zhí)行完之后將會話關(guān)閉。讓我們來看一個簡單的例子,假設(shè)我們有一個接口BussinessObject:


    public     interface    BusinessObject     {
    public     void    doSomethingThatInvolvesDaos();
    }
    類BusinessObjectImpl實現(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的方法攔截下來,再令它的方法支持延遲加載。看看下面的一個程序片段:



    <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>

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


    在單元測試中測試延遲加載

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


    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去驗證不能超過12個數(shù)字或英文或數(shù)字英文組合,還要求不能超過6個漢字,還要驗證漢字和字母,數(shù)字的組合

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

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

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

    因為數(shù)據(jù)庫里面要求的長度是12,一個漢字就占兩個,但是在頁面可以輸入12個漢字
    請用JAVASCRIPT寫出你的解決方案?



    Js代碼 復(fù)制代碼 收藏代碼
    1. <html>   
    2. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">   
    3. 輸入待測字串: &nbsp;<input type="text" onblur="test(this.value);">   
    4. </html>   
    5. <script language="javascript">   
    6. <!--    
    7. //測試匹配情況    
    8. function test(inputVal)    
    9. {    
    10.     //去除首尾空格    
    11.     inputValinputVal = inputVal.replace(/^\s*|\s*$/g,"");    
    12.     //零長字串不作處理    
    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ù)字或字母個數(shù)    
    24.     var codeNum = codeMatch ? codeMatch.length : 0;    
    25.     //漢字個數(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("輸入錯誤!");     
    35. }    
    36. //-->   
    37. </script> 

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

    Ajax 模擬動態(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.     //獲取頁面上所有的輸入元素 
    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 實現(xiàn)二級聯(lián)動 js

    Java代碼 復(fù)制代碼 收藏代碼
    1. //省市聯(lián)動  
    2. var c_cigy = ''
    3. //記錄第二個列表id,以備回調(diào)函數(shù)用 
    4. var cityItemName = ''
    5.  
    6. function  changeCityOyp(province,city,relateItemName) { 
    7.     ServerDwrUtil.getCityList(province.value,setCityOption); 
    8.     //記錄二級下拉的 id relateItemName 供回調(diào)函數(shù)使用 
    9.     cityItemName = relateItemName; 
    10.     // 中國 則 二級下拉 不能選擇 
    11.     if(province.value == '0001') { 
    12.         document.getElementById(cityItemName).disabled = true
    13.     } else
    14.         document.getElementById(cityItemName).disabled = false
    15.     } 
    16.     //省份在一個單元格里,省份前面有個input輸入框,得到input對象,再把省份傳進去 
    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配置 對于一些特例返回的Class,且dwr不能識別的, 
    26. //</dwr:configuration> 
    27. // 設(shè)置二級下拉列表 
    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ù)庫中的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實驗</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--前臺頁面

    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í)筆記

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

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

    MySQL 5.1參考手冊

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

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

    mysql 時間列自動插入當前日期時間

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

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

    從mysql 表中隨機找出10條記錄

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

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

    mysql授權(quán)指令

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

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

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

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

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

    Hibernate的generator屬性

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

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

    Tomcat的跨區(qū)域訪問

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

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

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

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

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

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

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

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

    java執(zhí)行存儲過程

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

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

    SpringMVC框架介紹


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



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






    SpringMVC框架圖




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

    java 技術(shù)博客

    犀利中帶點柔情 的博客
    http://fengtiejun.iteye.com/blog/1606365

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

    提高js性能注意事項

    一.執(zhí)行效率
    1. DOM
    1.1 使用DocumentFragment優(yōu)化多次append
    說明:添加多個dom元素時,先將元素append到DocumentFragment中,最后統(tǒng)一將DocumentFragment添加到頁面。
    該做法可以減少頁面渲染dom元素的次數(shù)。經(jīng)IE和Fx下測試,在append1000個元素時,效率能提高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
    說明:通過一個模板dom對象cloneNode,效率比直接創(chuàng)建element高。
    性能提高不明顯,約為10%左右。在低于100個元素create和append操作時,沒有優(yōu)勢。

    服用前:
    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è)置列表容器innerHTML的方式,比構(gòu)建dom元素并append到頁面中的方式,效率有數(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 html = [];
    for (var i = 0; i < 1000; i++) {
        html.push('' + i + '
    ');
    }
    document.body.innerHTML = html.join('');

    1.4 使用firstChild和nextSibling代替childNodes遍歷dom元素
    說明:約能獲得30%-50%的性能提高。逆向遍歷時使用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在對字符串拼接的時候,會創(chuàng)建臨時的String對象;經(jīng)測試,在IE下,當拼接的字符串越來越大時,運行效率會急劇下降。Fx和Opera都對字符串拼接操作進行了優(yōu)化;經(jīng)測試,在Fx下,使用Array的join方式執(zhí)行時間約為直接字符串拼接的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)語句

    3.1 將循環(huán)控制量保存到局部變量
    說明:對數(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)的遍歷時,用while替代for
    說明:該方法可以減少局部變量的使用。比起效率優(yōu)化,更能直接看到的是字符數(shù)量的優(yōu)化。該做法有程序員強迫癥的嫌疑。

    服用前:
    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 將條件分支,按可能性順序從高到低排列
    說明:可以減少解釋器對條件的探測次數(shù)。

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

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

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


    5. 定時器

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

    服用前:
    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ù),瀏覽器會先用這個字符串構(gòu)建一個function。

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

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


    6. 其他

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

    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雖然可以縮短代碼量,但是會在運行時構(gòu)造一個新的scope。
    OperaDev上還有這樣的解釋,使用with語句會使得解釋器無法在語法解析階段對代碼進行優(yōu)化。對此說法,無法驗證。

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


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


    6.5 巧用||和&&布爾運算符

    服用前:
    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).    浮點數(shù)轉(zhuǎn)換成整型,不使用parseInt(), parseInt()是用于將字符串轉(zhuǎn)換成數(shù)字,而不是浮點數(shù)和整型之間的轉(zhuǎn)換,建議使用Math.floor()或者Math.round()
    3).    對于自定義的對象,推薦顯式調(diào)用toString()。內(nèi)部操作在嘗試所有可能性之后,會嘗試對象的toString()方法嘗試能否轉(zhuǎn)化為String。


    二.內(nèi)存管理

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

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


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

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


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

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

    1)    置空dom對象

    服用前:
    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中不包含對dom對象的引用,從而打斷循環(huán)應(yīng)用。
    如果我們需要將dom對象返回,可以用如下方法:

    服用前:
    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就不包含對el的引用,從而打斷循環(huán)引用。

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

    示例代碼:

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

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


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

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

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

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

    徹底刪除SQL Server注冊表信息

    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。注冊表中的相關(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項目,并刪除它。這樣就可以清除安裝暫掛項目
    4。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\setup
    刪除ExceptionComponents



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

    測試Maven并創(chuàng)建本地Maven庫
    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庫存在你的電腦上,在庫中存儲著很多項目需要使用的第三方庫和你自己創(chuàng)建的庫。當你創(chuàng)建一個新項目時,你必須創(chuàng)建一個名為pom.xml用于描述項目對象信息的文件。在這個文件中,你告訴maven你的應(yīng)用會依賴哪些第三方庫以及他們的具體版本。當Maven開始構(gòu)建應(yīng)用的時候,他會首先從遠程庫(通過網(wǎng)絡(luò))中獲取項目所依賴的這些庫,并把從遠程庫獲取的庫復(fù)制到本地庫。因為這樣你以后就可以完全通過本地庫完成構(gòu)建應(yīng)用。默認情況下,你的本地庫在“C:\Documents and Settings\{你的用戶名}\.m2\repository”這個目錄下(其中,你的用戶名是只你登錄系統(tǒng)的用戶名)。到目前為止,我們只安裝了Maven程序,還沒有創(chuàng)建本地庫。按照下面的步驟測試你是否已經(jīng)正確安裝了Maven和創(chuàng)建你的本地庫。我們將使用Maven的標準插件創(chuàng)建一個臨時項目進行測試,測試完可以刪除臨時項目。
    1. 開啟命名提示窗口,將當前路徑切換到任何一個臨時文件目錄下,比如c:\temp
    2. 執(zhí)行下面的命令檢查你是否正確安裝配置了Mavne:
    Mvn --version
    3. 窗口中出現(xiàn)如下信息,則標示你安裝配置正確。
    Maven version:2.0.2
    4. 執(zhí)行下面的命令創(chuàng)建一個臨時項目:
    mvn archetype:create -DgroupId=testapp -DartifactId=testapp
    必須確保在此命令執(zhí)行完畢,你得到的反饋信息是“Build Successful”.有時候會因為網(wǎng)絡(luò)問題導(dǎo)致maven不能下載所有所依賴的庫文件而失敗。如果你也是遇到這個問題的話,你不妨多執(zhí)行幾次上面的命令,直到成功執(zhí)行此命令為止。
    5. 到當前目錄中去核實一下,看是否有個名為testapp的臨時項目被創(chuàng)建,同時到上面提到的倉庫路徑目錄去核實一下本地倉庫是否被創(chuàng)建了。如果這兩項工作都成功地完成,那么你可以刪除剛才測試時所產(chǎn)生的臨時項目了。
    安裝AndroMDA插件
    下面我們將下載并安裝AndroMDA的maven插件到你的本地maven庫。此插件是Java調(diào)用AndroMDA的入口程序。這事唯一一個需要安裝的AndroMDA文件。其他的文件(比如代碼生成器)將根據(jù)構(gòu)建工作的需要自動下載。按照下面的步驟進行安裝:
    1. 點擊這里下載AndroMDA插件安裝程序。
    2. 在安裝文件在你的本地maven庫的目錄下(C:\Documents and Settings\{你的用戶名}\.m2\repository)進行解壓縮。
    3. 請確認下面的目錄是否存在,存在則繼續(xù)
    C:\Documents and Settings\你的用戶名 \.m2\repository\org\andromda\maven\plugins\andromdapp-maven-plugin
    4. 創(chuàng)建一個臨時文件夾,比如:c:\andromda-temp
    5. 在臨時文件夾中創(chuàng)建一個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窗口,并將當強目錄切換為剛才創(chuàng)建的pom.xml文件所在的目錄,輸入 mvn (不需要帶參數(shù))回車。確保命令執(zhí)行完后,屏幕上顯示的信息是“BUILD SUCCESSFUL”(有時候會因為網(wǎng)絡(luò)的原因不能下載完畢所有需要的庫文件,故不能執(zhí)行成功,如果遇到這種問題,請多執(zhí)行幾次這個命令,直到成功執(zhí)行為止)。
    7. 可以將剛才創(chuàng)建的臨時目錄刪除了。
    安裝一款UML工具
    安裝一款UML建模工具,你能使用他進行應(yīng)用系統(tǒng)的建模,并能將創(chuàng)建的模型導(dǎo)成AndroMDA能識別的格式的文檔。AndroMDA目前支持UML1.4/XMI1.2和UML2/EMF幾種格式的文檔。下面列出了推薦使用的UML建模工具大安裝配置鏈接,你可以根據(jù)自己選擇的UML工具參考對應(yīng)的安裝配置鏈接。如果你已經(jīng)安裝了下面推薦的某款UML工具,你也最好看看其相應(yīng)的配置頁面。
    ArgoUML(支持UML1.4/XMI1.2)
    MagicDraw9.x(支持UML1.4/XMI1.2)
    MagicDraw15.5(支持UML2/EMF)
    RSM6(Rational Software Modeler/Architect 支持UML2/EMF)
    安裝數(shù)據(jù)庫服務(wù)器
    安裝任一款Hibernate支持的數(shù)據(jù)庫。點擊這里查看Hibernate所支持的所有數(shù)據(jù)庫的列表。此手冊中我們使用MySQL5.0(一款應(yīng)用非常廣泛的開源數(shù)據(jù)庫)。如果你安裝是Hibernate支持的其他的數(shù)據(jù)庫,請對JBoss和Hibernate的配置做相應(yīng)的調(diào)整。按照下面的步驟安裝配置MySQL.
    1. 點擊這里到MySQL的下載頁面。
    2. 下載Windows版的安裝程序(確切的說是“Windows(X86)”,不是“Essentials”)。將MySQL安裝在C:\Program Files\MySQL\MySQL Server 5.0目錄下。請記住所使用的端口(port),用戶賬號和密碼。每次你通過控制臺連接數(shù)據(jù)庫都需要用到,在應(yīng)用程序中數(shù)據(jù)庫連接配置中也要用到。
    3. 下載安裝MySQL GUI Tool Bundle(MySQL數(shù)據(jù)庫圖形化的管理查詢工具)。
    4. 下載MySQL Connector/J version 5.0.4,MySQL的JDBC驅(qū)動程序。解壓到C:\Program Files\MySQL目錄。
    5. 將MySQL的JDBC驅(qū)動程序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目錄。請將mysql-connector-java-5.0.4-bin.jar的文件名改為mysql-connector-java-5.0.4.jar,這樣更符合maven的規(guī)范。有了JDBC驅(qū)動程序,JBoss就可以訪問你的數(shù)據(jù)庫了。
    安裝Eclipse(可選)
    Eclipse是一款非常流程的開源的JAVA應(yīng)用集成開發(fā)環(huán)境(IDE).AndroMDA并不需要他,但是我們推薦你使用他以提高你的開發(fā)效率。Eclipse用戶應(yīng)該非常高興,因為AndroMDA可以為你們生成項目的.project和.classpath文件。你們只需要簡單地將項目導(dǎo)入Eclipse即可進行代碼的編寫了。
    你可從這里下載Eclipse.我們推薦下載Eclipse IDE for Java EE Developers這個版本。按照下面的步驟安裝配置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會要求你設(shè)置一個存放項目的文件夾。這個文件夾被成為Eclipse的工作區(qū)。將這個目錄設(shè)置為你通常用來保存創(chuàng)建項目的目錄,比如c:\projects目錄。
    5. 從【W(wǎng)indow】菜單中選擇【參數(shù)設(shè)置】(Preferences)菜單項。
    6. 在出現(xiàn)的面板的左邊依次選擇Java>Build Path>Classpath Variables.
    7. 點【新建】(New)。
    8. 將“M2_REPO”填寫在名稱文本框(Name),將你本機的maven庫的路徑(C:\Documents and Settings\{你的用戶名}\.m2\repository,前面所設(shè)置的)填寫在路徑文本框(Path)。當導(dǎo)入AndroMDA產(chǎn)生的項目時,項目會根據(jù)此變量查找所引用的Maven庫中的庫文件。
    9. 點擊2次【確定】(ok)關(guān)閉所有對話框。
    好的,現(xiàn)在我們已經(jīng)將AndroMDA開發(fā)環(huán)境搭建好,我們已經(jīng)準備好拿日志跟蹤系統(tǒng)來試驗AndroMDA了。下節(jié)我們將在講解具體怎樣開發(fā)日志跟蹤系統(tǒng)之前先帶大家體驗一下我們已經(jīng)開發(fā)完畢的系統(tǒng),讓你在學(xué)習(xí)過程中也好做到心中有數(shù)。

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

    widow orcal 卸載

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



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

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

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


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

    下面提供以下需要清理的注冊表項的位置

    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等等 

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



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

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

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

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

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

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

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

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

    (1)Oracle安裝文件

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

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


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

    MySQL刪除注冊表

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

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

    主站蜘蛛池模板: 亚洲熟妇无码八V在线播放| 国产精品嫩草影院免费| 青娱乐免费在线视频| a毛片全部播放免费视频完整18| 成人婷婷网色偷偷亚洲男人的天堂 | 亚洲免费在线观看| 免费国产成人α片| 国产精品青草视频免费播放| 91成人免费观看在线观看| 免费无遮挡无码永久视频| 在线天堂免费观看.WWW| 国产成人aaa在线视频免费观看 | 永久在线免费观看| 国产电影午夜成年免费视频 | 一级毛片**免费看试看20分钟| 亚洲最大的成人网站| 免费手机在线看片| 久久青草91免费观看| 好吊妞788免费视频播放| 亚洲伊人久久综合影院| 亚洲电影国产一区| 亚洲国产人成在线观看69网站| 亚洲爆乳无码一区二区三区| 亚洲人成网站在线播放vr| 精品国产日韩亚洲一区| 亚洲高清无在码在线电影不卡| 久久亚洲中文字幕精品有坂深雪| 亚洲国产精品婷婷久久| 亚洲五月六月丁香激情| 亚洲色大成网站www尤物| 亚洲国产成人AV在线播放| 亚洲精品久久久久无码AV片软件| 亚洲日韩精品国产一区二区三区| 亚洲小说图区综合在线| 国产在线观看无码免费视频| 一个人免费观看视频www| 在线观看免费污视频| 国产aⅴ无码专区亚洲av| 亚洲欧洲日产国码久在线观看| 亚洲欧洲国产经精品香蕉网| 免费无码国产在线观国内自拍中文字幕 |