zx_bing

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

          2012年7月14日

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          六、測(cè)試連接

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

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

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














































































































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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


          解決方法:

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

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

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

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

          參考了:
          Hibernate與延遲加載:

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


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

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

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



          Interceptor的配置:


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

          </bean>

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

          Filter的配置


          <web-app>

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

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

          </web-app>


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


          public class HibernateProductDAO extends HibernateDaoSupport implements ProductDAO {

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

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

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


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

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


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

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





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



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

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


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

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


          public abstract class MyLazyTestCase extends TestCase {

          private SessionFactory sessionFactory;
          private Session session;

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

          }

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

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

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

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

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

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

          Hibernate基于外鍵查詢

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

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

          hibernate 多條件查詢

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

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

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

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

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

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

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



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

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

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

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






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

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

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

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

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

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

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

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

          javascript獲取select的值全解

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

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

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

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

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



          2--控制層

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

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

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

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

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

          MySQL 5.1參考手冊(cè)

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

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

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

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

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

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

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

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

          mysql授權(quán)指令

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

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

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

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

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

          Hibernate的generator屬性

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

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

          Tomcat的跨區(qū)域訪問(wèn)

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

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

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

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

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

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

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

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

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

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

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

          SpringMVC框架介紹


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



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






          SpringMVC框架圖




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

          java 技術(shù)博客

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


          2. 字符串

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

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

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


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

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

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

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


          3.2 順序無(wú)關(guān)的遍歷時(shí),用while替代for
          說(shuō)明:該方法可以減少局部變量的使用。比起效率優(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 將條件分支,按可能性順序從高到低排列
          說(shuō)明:可以減少解釋器對(duì)條件的探測(cè)次數(shù)。

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

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

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


          5. 定時(shí)器

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

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

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

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

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

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


          6. 其他

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

          6.2 重復(fù)使用的調(diào)用結(jié)果,事先保存到局部變量
          說(shuō)明:避免多次取值的調(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 使用直接量
          說(shuō)明:
          var a = new Array(param,param,...) -> var a = []
          var foo = new Object() -> var foo = {}
          var reg = new RegExp() -> var reg = /.../

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

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


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


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

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


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


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


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


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


          二.內(nèi)存管理

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

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


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

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


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

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

          1)    置空dom對(duì)象

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


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


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

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


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

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


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

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

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

          示例代碼:

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

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


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

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

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

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

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

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


           


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

          HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSDTC。

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



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

          HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer

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

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

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

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

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

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

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

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

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

          widow orcal 卸載

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



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

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

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


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

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

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


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


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


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


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


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


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

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



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

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

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

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

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

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

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

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

          (1)Oracle安裝文件

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

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


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

          MySQL刪除注冊(cè)表

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

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

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

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

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


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

          --

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

          主站蜘蛛池模板: 西乌| 沛县| 罗甸县| 古蔺县| 泸定县| 丹棱县| 兰溪市| 洪洞县| 红河县| 金门县| 邹城市| 洛南县| 林周县| 古交市| 枣强县| 秦皇岛市| 连江县| 兴安盟| 吉木乃县| 应用必备| 礼泉县| 上饶县| 白山市| 独山县| 兰溪市| 满城县| 临湘市| 永和县| 达州市| 洮南市| 乃东县| 台南市| 湖南省| 惠水县| 乐东| 张家口市| 龙岩市| 长乐市| 平阴县| 阳新县| 黑水县|