zx_bing

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

          2012年7月25日

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

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

          1. 單擊“開始”,依次指向“程序”、“Microsoft SQL Server 2005”和“配置工具”,然后單擊“SQL Server 外圍應(yīng)用配置器”。
          2. 在“SQL Server 2005 外圍應(yīng)用配置器”頁上,單擊“服務(wù)和連接的外圍應(yīng)用配置器”。
          3. 在“服務(wù)和連接的外圍應(yīng)用配置器”頁上,展開“數(shù)據(jù)庫引擎”,依次單擊“遠(yuǎn)程連接”和“本地連接和遠(yuǎn)程連接”,單擊適用于您的環(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 的安裝位置而不同。

          五、遠(yuǎn)程連接端口設(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è)置為可用端口。(如果默認(rèn)的1433端口老是連接不上,你就設(shè)置為你確認(rèn)已經(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類型標(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實例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機(jī)制:

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

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

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

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

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

          提示:Hibernate采用CGLIB工具來生成持久化類的代理類。CGLIB是一個功能強(qiáng)大的Java字節(jié)碼生成工具,它能夠在程序運(yùn)行時動態(tài)生成擴(kuò)展 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();

          在運(yùn)行session.load()方法時Hibernate不執(zhí)行任何select語句,僅僅返回Customer類的代理類的實例,它的OID為1,這是由load()方法的第二個參數(shù)指定的。當(dāng)應(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;

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

          1.如果加載的Customer對象在數(shù)據(jù)庫中不存在,Session的load()方法不會拋出異常,只有當(dāng)運(yùn)行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代理類的實例只有在當(dāng)前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代理類實例,因此當(dāng)Session關(guān)閉后,可以正常訪問Customer游離對象。

          4.當(dāng)應(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();

          當(dāng)應(yīng)用程序訪問customer.getId()方法時,該方法直接返回Customer代理類實例的OID值,無需查詢數(shù)據(jù)庫。由于引用變量 customer始終引用的是沒有被初始化的Customer代理類實例,因此當(dāng)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,這樣當(dāng)你用hibernate查詢時,返回實際為利用cglib增強(qiáng)的代理類,但其并沒有實際填充;當(dāng)你在前端,利用它來取值(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異?!?br />
          ?
          解決方法:在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ù)庫都在初始化的階段被讀出來了。當(dāng)然,你可以不厭其煩地檢查每一個對象與其他對象的關(guān)系,并把那些最昂貴的刪除,但是到最后,我們可能會因此失去了本想在ORM工具中獲得的便利。


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

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

          幸運(yùn)的是,Spring框架為Hibernate延遲加載與DAO模式的整合提供了一種方便的解決方法。對那些不熟悉Spring與Hibernate集成使用的人,我不會在這里討論過多的細(xì)節(jié),但是我建議你去了解Hibernate與Spring集成的數(shù)據(jù)訪問。以一個Web應(yīng)用為例,Spring提供了OpenSessionInViewFilter和OpenSessionInViewInterceptor。我們可以隨意選擇一個類來實現(xiàn)相同的功能。兩種方法唯一的不同就在于interceptor在Spring容器中運(yùn)行并被配置在web應(yīng)用的上下文中,而Filter在Spring之前運(yùn)行并被配置在web.xml中。不管用哪個,他們都在請求將當(dāng)前會話與當(dāng)前(數(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>

          當(dāng)businessObject被調(diào)用的時候,HibernateInterceptor打開一個Hibernate會話,并將調(diào)用請求傳遞給BusinessObjectImpl對象。當(dāng)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對象,再把省份傳進(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配置 對于一些特例返回的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 時間列自動插入當(dāng)前日期時間

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

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

          從mysql 表中隨機(jī)找出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ū)ο蟮慕巧@種分離讓它們更容易進(jìn)行制定。是一個標(biāo)準(zhǔn)的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下,當(dāng)拼接的字符串越來越大時,運(yùn)行效率會急劇下降。Fx和Opera都對字符串拼接操作進(jìn)行了優(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)化。該做法有程序員強(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 將條件分支,按可能性順序從高到低排列
          說明:可以減少解釋器對條件的探測次數(shù)。

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

          4.3 使用三目運(yùn)算符替代條件分支
          服用前:
          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解析引擎進(jìn)行解析,需要消耗大量的執(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雖然可以縮短代碼量,但是會在運(yùn)行時構(gòu)造一個新的scope。
          OperaDev上還有這樣的解釋,使用with語句會使得解釋器無法在語法解析階段對代碼進(jìn)行優(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 巧用||和&&布爾運(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).    浮點數(shù)轉(zhuǎn)換成整型,不使用parseInt(), parseInt()是用于將字符串轉(zhuǎn)換成數(shù)字,而不是浮點數(shù)和整型之間的轉(zhuǎn)換,建議使用Math.floor()或者M(jìn)ath.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í)行的時候,當(dāng)前上下文我們叫做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)當(dāng)及時釋放對對象的引用,讓GC能夠回收這些內(nèi)存控件。
          對象:obj = null
          對象屬性:delete obj.myproperty
          數(shù)組item:使用數(shù)組的splice方法釋放數(shù)組中不用的item

          2.5 避免string的隱式裝箱
          說明:對string的方法調(diào)用,比如'xxx'.length,瀏覽器會進(jìn)行一個隱式的裝箱操作,將字符串先轉(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、運(yùn)行注冊表,刪除如下項:
          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 運(yùn)行引擎
          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)境變量的取值修改與之一致。
          準(zhǔn)備開發(fā)環(huán)境
          請按照下面的步驟開始準(zhǔ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. 進(jìn)入【控制面板】,雙擊【系統(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)建部署工具?;陧椖繉ο竽P停≒OM)的概念,Maven可以管理一個項目的構(gòu)建,報告和文檔等。如果你熟悉Ant的話,Maven與之有不少相同之處,但Maven提供了更多的功能:
          1. 可繼承的構(gòu)建環(huán)境配置,在POM文件(pom.xml)中配置的參數(shù)可以傳遞給所有子項目的POM文件。
          2. 標(biāo)準(zhǔn)化的構(gòu)建任務(wù)(清除,構(gòu)建,安裝,部署等)。
          3. 能表達(dá)構(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使用代理。詳細(xì)的配置你可以在這里找到。
          安裝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”的下載鏈接,進(jìn)行下載。
          4. 下載完畢,將下載的文件解壓到C盤,一個名為jboss-4.0.4GA的目錄將被創(chuàng)建。此目錄下包含JBoss應(yīng)用服務(wù)器的程序文件。
          5. 如果你打算在你的機(jī)器上也安裝Oracle數(shù)據(jù)庫的話,你必須將JBoss的 http端口8080修改成其他端口。Oracle也默認(rèn)使用此端口,而且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)境變量。強(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本地庫 必須
          MAVEN_OPTS 運(yùn)行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)建的庫。當(dāng)你創(chuàng)建一個新項目時,你必須創(chuàng)建一個名為pom.xml用于描述項目對象信息的文件。在這個文件中,你告訴maven你的應(yīng)用會依賴哪些第三方庫以及他們的具體版本。當(dāng)Maven開始構(gòu)建應(yīng)用的時候,他會首先從遠(yuǎn)程庫(通過網(wǎng)絡(luò))中獲取項目所依賴的這些庫,并把從遠(yuǎn)程庫獲取的庫復(fù)制到本地庫。因為這樣你以后就可以完全通過本地庫完成構(gòu)建應(yīng)用。默認(rèn)情況下,你的本地庫在“C:\Documents and Settings\{你的用戶名}\.m2\repository”這個目錄下(其中,你的用戶名是只你登錄系統(tǒng)的用戶名)。到目前為止,我們只安裝了Maven程序,還沒有創(chuàng)建本地庫。按照下面的步驟測試你是否已經(jīng)正確安裝了Maven和創(chuàng)建你的本地庫。我們將使用Maven的標(biāo)準(zhǔn)插件創(chuàng)建一個臨時項目進(jìn)行測試,測試完可以刪除臨時項目。
          1. 開啟命名提示窗口,將當(dāng)前路徑切換到任何一個臨時文件目錄下,比如c:\temp
          2. 執(zhí)行下面的命令檢查你是否正確安裝配置了Mavne:
          Mvn --version
          3. 窗口中出現(xiàn)如下信息,則標(biāo)示你安裝配置正確。
          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. 到當(dāng)前目錄中去核實一下,看是否有個名為testapp的臨時項目被創(chuàng)建,同時到上面提到的倉庫路徑目錄去核實一下本地倉庫是否被創(chuàng)建了。如果這兩項工作都成功地完成,那么你可以刪除剛才測試時所產(chǎn)生的臨時項目了。
          安裝AndroMDA插件
          下面我們將下載并安裝AndroMDA的maven插件到你的本地maven庫。此插件是Java調(diào)用AndroMDA的入口程序。這事唯一一個需要安裝的AndroMDA文件。其他的文件(比如代碼生成器)將根據(jù)構(gòu)建工作的需要自動下載。按照下面的步驟進(jìn)行安裝:
          1. 點擊這里下載AndroMDA插件安裝程序。
          2. 在安裝文件在你的本地maven庫的目錄下(C:\Documents and Settings\{你的用戶名}\.m2\repository)進(jìn)行解壓縮。
          3. 請確認(rèn)下面的目錄是否存在,存在則繼續(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窗口,并將當(dāng)強(qiáng)目錄切換為剛才創(chuàng)建的pom.xml文件所在的目錄,輸入 mvn (不需要帶參數(shù))回車。確保命令執(zhí)行完后,屏幕上顯示的信息是“BUILD SUCCESSFUL”(有時候會因為網(wǎng)絡(luò)的原因不能下載完畢所有需要的庫文件,故不能執(zhí)行成功,如果遇到這種問題,請多執(zhí)行幾次這個命令,直到成功執(zhí)行為止)。
          7. 可以將剛才創(chuàng)建的臨時目錄刪除了。
          安裝一款UML工具
          安裝一款UML建模工具,你能使用他進(jìn)行應(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即可進(jìn)行代碼的編寫了。
          你可從這里下載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),將你本機(jī)的maven庫的路徑(C:\Documents and Settings\{你的用戶名}\.m2\repository,前面所設(shè)置的)填寫在路徑文本框(Path)。當(dāng)導(dǎo)入AndroMDA產(chǎn)生的項目時,項目會根據(jù)此變量查找所引用的Maven庫中的庫文件。
          9. 點擊2次【確定】(ok)關(guān)閉所有對話框。
          好的,現(xiàn)在我們已經(jīng)將AndroMDA開發(fā)環(huán)境搭建好,我們已經(jīng)準(zhǔn)備好拿日志跟蹤系統(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在默認(rèn)安裝下會安裝5個計算機(jī)服務(wù)(右鍵我的電腦-管理-計算機(jī)管理-服務(wù)與應(yīng)用程序-服務(wù))或者(控制面板-管理工具-服務(wù)),同時,五個服務(wù)分別為
          Oracle代碼 復(fù)制代碼 收藏代碼
          1. OracleDBConsoleorcl 
          2. OracleJobSchedulerORCL 
          3. OracleOraDb10g_home1iSQL*Plus 
          4. OracleOraDb10g_home1TNSListener 
          5. OracleServiceORCL 
          6. (默認(rèn)數(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安裝目錄下所有文件(有需要備份酌情考慮吧)

          使用命令進(jìn)入注冊表:
          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了。
          當(dāng)然,有可能會提示安裝目錄被使用,這時候進(jìn)入注冊表搜索那些節(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)編輯 收藏

          主站蜘蛛池模板: 德州市| 栾城县| 大理市| 米易县| 吉林市| 屯留县| 武宣县| 黄浦区| 永胜县| 永清县| 青河县| 屯留县| 秦皇岛市| 随州市| 闽清县| 海林市| 神池县| 望都县| 裕民县| 海南省| 许昌县| 湖州市| 伊宁县| 潼关县| 涡阳县| 曲水县| 惠州市| 黔东| 富阳市| 大方县| 涞源县| 湖口县| 宣恩县| 丹棱县| 察雅县| 朝阳区| 淮安市| 通辽市| 河西区| 司法| 房山区|