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

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

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

    zx_bing

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

    2012年7月26日

    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)鍵的一步,很多方法只講了一到四步,卻沒有講到第五步)

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

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

    六、測(cè)試連接

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

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

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














































































































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

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

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

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

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

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

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

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

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

    提示:Hibernate采用CGLIB工具來(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/。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


    解決方法:

    由于hibernate采用了lazy=true,這樣當(dāng)你用hibernate查詢時(shí),返回實(shí)際為利用cglib增強(qiáng)的代理類,但其并沒有實(shí)際填充;當(dāng)你在前端,利用它來(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的緩存問題.問題解決:需要在<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è)問題有時(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è)過程對(duì)開發(fā)者來(lái)說是透明的,而且只進(jìn)行了很少的數(shù)據(jù)庫(kù)操作請(qǐng)求,因此會(huì)得到比較明顯的性能提升。這項(xiàng)技術(shù)的一個(gè)缺陷是延遲加載技術(shù)要求一個(gè)Hibernate會(huì)話要在對(duì)象使用的時(shí)候一直開著。這會(huì)成為通過使用DAO模式將持久層抽象出來(lái)時(shí)的一個(gè)主要問題。為了將持久化機(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ì)在這里討論過多的細(xì)節(jié),但是我建議你去了解Hibernate與Spring集成的數(shù)據(jù)訪問。以一個(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公用組件使訪問數(shù)據(jù)庫(kù)變成小菜一碟,而DAO接口只有通過這個(gè)組件才可以訪問到數(shù)據(jù)庫(kù)。下面是一個(gè)示例的DAO:


    public class HibernateProductDAO extends HibernateDaoSupport implements ProductDAO {

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

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

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


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

    即使在視圖外面,Spring框架也通過使用AOP 攔截器 HibernateInterceptor來(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 





    通過在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è)試我們的延遲加載程序。我們可以輕易地通過重寫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)證不能超過12個(gè)數(shù)字或英文或數(shù)字英文組合,還要求不能超過6個(gè)漢字,還要驗(yàn)證漢字和字母,數(shù)字的組合

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

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

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

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



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

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

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

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






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

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

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

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

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

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

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

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

    javascript獲取select的值全解

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

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

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

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

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



    2--控制層

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

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

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

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

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

    MySQL 5.1參考手冊(cè)

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

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

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

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

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

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

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

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

    mysql授權(quán)指令

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

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

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

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

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

    Hibernate的generator屬性

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

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

    Tomcat的跨區(qū)域訪問

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

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

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

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

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

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

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

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

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

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

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

    主站蜘蛛池模板: 免费污视频在线观看| 国产JIZZ中国JIZZ免费看| 国产精品亚洲色婷婷99久久精品| 亚洲精品中文字幕无码A片老| 免费国产va视频永久在线观看| 国产高清视频免费在线观看| 黄网站免费在线观看| 免费人成在线观看69式小视频| 影音先锋在线免费观看| 亚洲熟女乱综合一区二区| 亚洲va久久久噜噜噜久久男同 | 免费无码不卡视频在线观看| 免费人成视频在线观看不卡| 亚洲区小说区图片区QVOD| 亚洲人成网站18禁止久久影院 | a毛片在线免费观看| 久久国产免费福利永久| 国产人成免费视频| 亚洲阿v天堂在线| 亚洲色精品VR一区区三区 | 羞羞视频免费网站含羞草| 免费毛片在线看不用播放器 | 日本不卡视频免费| 亚洲AV无码专区亚洲AV伊甸园| 亚洲综合av一区二区三区不卡| 一级毛片免费视频网站| 国产精品成人免费福利| 亚洲成年人啊啊aa在线观看| 久久久亚洲欧洲日产国码是AV | 亚洲精品国产首次亮相| a在线观看免费网址大全| 精品国产麻豆免费网站| 亚洲AV综合色区无码另类小说 | 亚洲精品无码久久久久久| 青青操在线免费观看| 成年人网站在线免费观看| 亚洲av午夜成人片精品网站| 欧洲亚洲国产精华液| 亚洲免费福利视频| 亚洲日韩中文在线精品第一| 久久精品国产亚洲AV忘忧草18|