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

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

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

    隨筆-16  評論-84  文章-1  trackbacks-0
      2010年11月27日
    通過存儲過程向數(shù)據(jù)庫一下子插入了一千萬(10000000)條記錄,結(jié)果等了很長時間,PL/SQL都沒有響應(yīng),我又瞎折騰了下,結(jié)果執(zhí)行了好幾次,導(dǎo)致數(shù)據(jù)庫假死了,我只有刪除當(dāng)前的會話,從網(wǎng)上找到相關(guān)的腳本代碼。


    1> 通過此語句查詢正在鎖定的SESSION_ID:

    1SELECT  SESSION_ID   FROM   V$LOCKED_OBJECT,USER_OBJECTS  WHERE   V$LOCKED_OBJECT.OBJECT_ID   =   USER_OBJECTS.OBJECT_ID


    2> 通過第一步查詢到的SESSION_ID查詢SERIAL#

    1SELECT SERIAL# FROM V$SESSION  WHERE SID='12'(此處'12'為上面查詢到的'SESSION_ID')


     3> 根據(jù)1,2步查詢到的SESSION_ID和SERIAL#執(zhí)行

    1ALTER   SYSTEM   KILL   SESSION  '12,154'(12為SESSION_ID的值, 154為SERIAL#的值)

    4> 如果利用上面的命令殺死一個進程后,進程狀態(tài)被置為"killed",但是鎖定的資源很長時間沒有被釋放,那么還可以在os一級再殺死相應(yīng)的進程(線程),首先執(zhí)行下面的語句獲得當(dāng)前進程(線程)的標(biāo)示PID:

    1select spid, osuser, s.program 
    2from v$session s,v$process p
    3where s.paddr=p.addr and s.sid=12 (12是上面的SESSION_ID)

    然后在OS通過任務(wù)管理器找到對應(yīng)的進程,在殺死這個進程(線程)

    posted @ 2010-11-27 14:55 absolute 閱讀(859) | 評論 (0)編輯 收藏
    最近在學(xué)習(xí)存儲過程,以前在項目中沒有怎么接觸過!

    我通過存儲過程像數(shù)據(jù)庫中批量添加一千萬(100000000)條記錄,結(jié)果PL/SQL很長時間沒有反映,結(jié)果不得已通過腳本殺掉當(dāng)前進程,我重新通過存儲過程插入10000條數(shù)據(jù)。

    建表腳本:
     1--刪除用戶表
     2DROP TABLE T_PORTAL_USER;
     3
     4--創(chuàng)建用戶表
     5CREATE TABLE T_PORTAL_USER
     6(
     7    id NUMBER PRIMARY KEY-- 用戶表示
     8    username VARCHAR2(24NOT NULL,-- 用戶名
     9    password VARCHAR2(24NOT NULL,-- 密碼
    10    realname VARCHAR2(24NOT NULL,-- 真實姓名
    11    sex VARCHAR2(2DEFAULT '0',-- 性別 "0":Male "1":Female
    12    registerDate TIMESTAMP NOT NULL,-- 注冊日期
    13    state VARCHAR2(2NOT NULL -- 賬號狀態(tài) "0":啟用  "1":注銷
    14)
    15
    16--刪除用戶表序列
    17DROP SEQUENCE SEQ_T_PORTAL_USER;
    18
    19--創(chuàng)建用戶表序列
    20CREATE SEQUENCE SEQ_T_PORTAL_USER
    21START WITH 1
    22INCREMENT BY 1
    23NOMAXVALUE
    24CACHE 20


    -- 批量新增一萬條用戶

     1-- 批量新增一萬條用戶
     2CREATE OR REPLACE PROCEDURE PROC_USER_CREATE_BAT
     3AS
     4    startTime VARCHAR2(32);--開始時間
     5    endTime VARCHAR2(32);--結(jié)束時間
     6BEGIN
     7  SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss:ff'INTO startTime FROM DUAL;
     8  DBMS_OUTPUT.PUT_LINE('Start Time: '||startTime);
     9  FOR i in 1..10000 LOOP
    10     INSERT INTO T_PORTAL_USER VALUES(SEQ_T_PORTAL_USER.NEXTVAL,'owen'||i,'123456','gekunjin'||i,'0',sysdate,'0');
    11  END LOOP;
    12  SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss:ff'INTO endTime FROM DUAL;
    13  DBMS_OUTPUT.PUT_LINE('End Time: '||endTime);
    14END PROC_USER_CREATE_BAT;
    posted @ 2010-11-27 14:41 absolute 閱讀(3698) | 評論 (1)編輯 收藏
         摘要: 在項目中使用Apache開源的Services Framework CXF來發(fā)布WebService,CXF能夠很簡潔與Spring Framework 集成在一起,在發(fā)布WebService的過程中,發(fā)布的接口的入?yún)⒂行╊愋椭С植皇呛芎茫热鏣imestamp和Map。這個時候我們就需要編寫一些適配來實行類型轉(zhuǎn)換。 Timestamp:  1/** *//** &n...  閱讀全文
    posted @ 2010-11-27 14:28 absolute 閱讀(3423) | 評論 (1)編輯 收藏
      2010年9月13日

    Web應(yīng)用初始化Spring容器策略

    以下軟件測試環(huán)境為Spring,Struts1

    1、通過struts1提供的插件機制,采用Spring提供的ContextLoaderPlugIn

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

    <struts-config>
     <global-exceptions />
     <global-forwards />
     <message-resources parameter="com.portal.ApplicationResources" />
     <!--  通過S1提供的插件機制來初始化Spring容器,加載Spring配置文件
     <plug-in
      className="org.springframework.web.struts.ContextLoaderPlugIn">
      <!--
       1、ContextLoaderPlugIn默認(rèn)加載配置文件命名規(guī)則是actionServlet-servlet.xml,其中actionServlet
       是配置org.apache.struts.action.ActionServlet時指定的servlet名稱
       
       2、通過配置contextConfigLocation屬性來指點Spring配置文件的位置,多個配置文件可以使用 逗號","、分號";"、空格" "
      -->
      <set-property property="contextConfigLocation"
       value="/WEB-INF/conf/spring-application.xml,/WEB-INF/conf/**/spring*.xml" />
     </plug-in> 
      -->
    </struts-config>


    2、采用Spring提供的ContextLoaderListener來初始化(應(yīng)用服務(wù)器需要支持Listener,Servlet2.3版本及以上)
     <context-param>
       <description>通過配置contextConfigLocation屬性來指點Spring配置文件的位置,多個配置文件可以使用 逗號","、分號";"、空格" "</description>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/conf/spring-application.xml /WEB-INF/conf/**/spring*.xml</param-value>
      </context-param>
     
      <listener>
       <description>通過ContextLocaderListener來初始化Spring容器,加載Spring配置文件</description>
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>

    3、采用load-on-startup Servlet 來初始化Spring容器
      <servlet>
       <description>
        通過load-on-startup Servlet來初始化Spring容器
        該如何Servlet 用于提供"后臺"服務(wù),作為容器管理應(yīng)用中的其他bean,不需要響應(yīng)客戶請求,因此無須配置servlet-mapping
       </description>
       <servlet-name>applicationContext</servlet-name>
       <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
       <load-on-startup>0</load-on-startup>
      </servlet>

    posted @ 2010-09-13 18:10 absolute 閱讀(2268) | 評論 (0)編輯 收藏
      2010年3月2日

    集群概念
    1. 兩大關(guān)鍵特性
    集群是一組協(xié)同工作的服務(wù)實體,用以提供比單一服務(wù)實體更具擴展性與可用性的服務(wù)平臺。在客戶端看來,一個集群就象是一個服務(wù)實體,但事實上集群由一組服務(wù)實體組成。與單一服務(wù)實體相比較,集群提供了以下兩個關(guān)鍵特性:

    ·  可擴展性--集群的性能不限于單一的服務(wù)實體,新的服務(wù)實體可以動態(tài)地加入到集群,從而增強集群的性能。

    ·  高可用性--集群通過服務(wù)實體冗余使客戶端免于輕易遇到out of service的警告。在集群中,同樣的服務(wù)可以由多個服務(wù)實體提供。如果一個服務(wù)實體失敗了,另一個服務(wù)實體會接管失敗的服務(wù)實體。集群提供的從一個出錯的服務(wù)實體恢復(fù)到另一個服務(wù)實體的功能增強了應(yīng)用的可用性。

    2. 兩大能力
    為了具有可擴展性和高可用性特點,集群的必須具備以下兩大能力:

    ·  負(fù)載均衡--負(fù)載均衡能把任務(wù)比較均衡地分布到集群環(huán)境下的計算和網(wǎng)絡(luò)資源。

    ·  錯誤恢復(fù)--由于某種原因,執(zhí)行某個任務(wù)的資源出現(xiàn)故障,另一服務(wù)實體中執(zhí)行同一任務(wù)的資源接著完成任務(wù)。這種由于一個實體中的資源不能工作,另一個實體中的資源透明的繼續(xù)完成任務(wù)的過程叫錯誤恢復(fù)。

    負(fù)載均衡和錯誤恢復(fù)都要求各服務(wù)實體中有執(zhí)行同一任務(wù)的資源存在,而且對于同一任務(wù)的各個資源來說,執(zhí)行任務(wù)所需的信息視圖(信息上下文)必須是一樣的。

    3. 兩大技術(shù)
    實現(xiàn)集群務(wù)必要有以下兩大技術(shù):

    ·  集群地址--集群由多個服務(wù)實體組成,集群客戶端通過訪問集群的集群地址獲取集群內(nèi)部各服務(wù)實體的功能。具有單一集群地址(也叫單一影像)是集群的一個基本特征。維護集群地址的設(shè)置被稱為負(fù)載均衡器。負(fù)載均衡器內(nèi)部負(fù)責(zé)管理各個服務(wù)實體的加入和退出,外部負(fù)責(zé)集群地址向內(nèi)部服務(wù)實體地址的轉(zhuǎn)換。有的負(fù)載均衡器實現(xiàn)真正的負(fù)載均衡算法,有的只支持任務(wù)的轉(zhuǎn)換。只實現(xiàn)任務(wù)轉(zhuǎn)換的負(fù)載均衡器適用于支持ACTIVE-STANDBY的集群環(huán)境,在那里,集群中只有一個服務(wù)實體工作,當(dāng)正在工作的服務(wù)實體發(fā)生故障時,負(fù)載均衡器把后來的任務(wù)轉(zhuǎn)向另外一個服務(wù)實體。

    ·  內(nèi)部通信--為了能協(xié)同工作、實現(xiàn)負(fù)載均衡和錯誤恢復(fù),集群各實體間必須時常通信,比如負(fù)載均衡器對服務(wù)實體心跳測試信息、服務(wù)實體間任務(wù)執(zhí)行上下文信息的通信。

    具有同一個集群地址使得客戶端能訪問集群提供的計算服務(wù),一個集群地址下隱藏了各個服務(wù)實體的內(nèi)部地址,使得客戶要求的計算服務(wù)能在各個服務(wù)實體之間分布。內(nèi)部通信是集群能正常運轉(zhuǎn)的基礎(chǔ),它使得集群具有均衡負(fù)載和錯誤恢復(fù)的能力。

    集群分類
    Linux集群主要分成三大類( 高可用集群, 負(fù)載均衡集群,科學(xué)計算集群)

    高可用集群( High Availability Cluster)
    負(fù)載均衡集群(Load Balance Cluster)
    科學(xué)計算集群(High Performance Computing Cluster)
    ================================================

    具體包括:

    Linux High Availability 高可用集群                                      
    (普通兩節(jié)點雙機熱備,多節(jié)點HA集群,RAC, shared, share-nothing集群等)

    Linux Load Balance 負(fù)載均衡集群                                     
     (LVS等....)

    Linux High Performance Computing 高性能科學(xué)計算集群    
     (Beowulf 類集群....)

    分布式存儲                                                                        
    其他類linux集群             
    (如Openmosix, rendering farm 等..)

    詳細(xì)介紹
    1. 高可用集群(High Availability Cluster)
    常見的就是2個節(jié)點做成的HA集群,有很多通俗的不科學(xué)的名稱,比如"雙機熱備", "雙機互備", "雙機".
    高可用集群解決的是保障用戶的應(yīng)用程序持續(xù)對外提供服務(wù)的能力。 (請注意高可用集群既不是用來保護業(yè)務(wù)數(shù)據(jù)的,保護的是用戶的業(yè)務(wù)程序?qū)ν獠婚g斷提供服務(wù),把因軟件/硬件/人為造成的故障對業(yè)務(wù)的影響降低到最小程度)。

    2. 負(fù)載均衡集群(Load Balance Cluster)

    負(fù)載均衡系統(tǒng):集群中所有的節(jié)點都處于活動狀態(tài),它們分?jǐn)傁到y(tǒng)的工作負(fù)載。一般Web服務(wù)器集群、數(shù)據(jù)庫集群和應(yīng)用服務(wù)器集群都屬于這種類型。

    負(fù)載均衡集群一般用于相應(yīng)網(wǎng)絡(luò)請求的網(wǎng)頁服務(wù)器,數(shù)據(jù)庫服務(wù)器。這種集群可以在接到請求時,檢查接受請求較少,不繁忙的服務(wù)器,并把請求轉(zhuǎn)到這些服務(wù)器上。從檢查其他服務(wù)器狀態(tài)這一點上看,負(fù)載均衡和容錯集群很接近,不同之處是數(shù)量上更多。

    3. 科學(xué)計算集群(High Performance Computing Cluster)

    高性能計算(High Perfermance Computing)集群,簡稱HPC集群。這類集群致力于提供單個計算機所不能提供的強大的計算能力。

    高性能計算分類  
     高吞吐計算(High-throughput Computing)
      有一類高性能計算,可以把它分成若干可以并行的子任務(wù),而且各個子任務(wù)彼此間沒有什么關(guān)聯(lián)。象在家搜尋外星人( SETI@HOME -- Search for Extraterrestrial Intelligence at Home )就是這一類型應(yīng)用。這一項目是利用Internet上的閑置的計算資源來搜尋外星人。SETI項目的服務(wù)器將一組數(shù)據(jù)和數(shù)據(jù)模式發(fā)給Internet上參加SETI的計算節(jié)點,計算節(jié)點在給定的數(shù)據(jù)上用給定的模式進行搜索,然后將搜索的結(jié)果發(fā)給服務(wù)器。服務(wù)器負(fù)責(zé)將從各個計算節(jié)點返回的數(shù)據(jù)匯集成完整的數(shù)據(jù)。因為這種類型應(yīng)用的一個共同特征是在海量數(shù)據(jù)上搜索某些模式,所以把這類計算稱為高吞吐計算。所謂的Internet計算都屬于這一類。按照 Flynn的分類,高吞吐計算屬于SIMD(Single Instruction/Multiple Data)的范疇。

     分布計算(Distributed Computing)
      另一類計算剛好和高吞吐計算相反,它們雖然可以給分成若干并行的子任務(wù),但是子任務(wù)間聯(lián)系很緊密,需要大量的數(shù)據(jù)交換。按照Flynn的分類,分布式的高性能計算屬于MIMD(Multiple Instruction/Multiple Data)的范疇。

    4. 分布式(集群)與集群的聯(lián)系與區(qū)別
    分布式是指將不同的業(yè)務(wù)分布在不同的地方。
    而集群指的是將幾臺服務(wù)器集中在一起,實現(xiàn)同一業(yè)務(wù)。
    分布式中的每一個節(jié)點,都可以做集群。
    而集群并不一定就是分布式的。
    舉例:就比如新浪網(wǎng),訪問的人多了,他可以做一個群集,前面放一個響應(yīng)服務(wù)器,后面幾臺服務(wù)器完成同一業(yè)務(wù),如果有業(yè)務(wù)訪問的時候,響應(yīng)服務(wù)器看哪臺服務(wù)器的負(fù)載不是很重,就將給哪一臺去完成。
    而分布式,從窄意上理解,也跟集群差不多, 但是它的組織比較松散,不像集群,有一個組織性,一臺服務(wù)器垮了,其它的服務(wù)器可以頂上來。
    分布式的每一個節(jié)點,都完成不同的業(yè)務(wù),一個節(jié)點垮了,哪這個業(yè)務(wù)就不可訪問了。

     

    本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/tanghongru1983/archive/2009/04/28/4130356.aspx

    posted @ 2010-03-02 14:16 absolute 閱讀(642) | 評論 (0)編輯 收藏
      2010年2月16日
    代碼如下:
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;

    public class MyEclipseGen {
    private static final String LL = "Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.";

    public String getSerial(String userId, String licenseNum) {
       java.util.Calendar cal 
    = java.util.Calendar.getInstance();
       cal.add(
    13);
       cal.add(
    6-1);
       java.text.NumberFormat nf 
    = new java.text.DecimalFormat("000");
       licenseNum 
    = nf.format(Integer.valueOf(licenseNum));
       String verTime 
    = new StringBuilder("-").append(
         
    new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime()))
         .append(
    "0").toString();
       String type 
    = "YE3MP-";
       String need 
    = new StringBuilder(userId.substring(01)).append(type)
         .append(
    "300").append(licenseNum).append(verTime).toString();
       String dx 
    = new StringBuilder(need).append(LL).append(userId)
         .toString();
       
    int suf = this.decode(dx);
       String code 
    = new StringBuilder(need).append(String.valueOf(suf))
         .toString();
       
    return this.change(code);
    }


    private int decode(String s) {
       
    int i;
       
    char[] ac;
       
    int j;
       
    int k;
       i 
    = 0;
       ac 
    = s.toCharArray();
       j 
    = 0;
       k 
    = ac.length;
       
    while (j < k) {
        i 
    = (31 * i) + ac[j];
        j
    ++;
       }

       
    return Math.abs(i);
    }


    private String change(String s) {
       
    byte[] abyte0;
       
    char[] ac;
       
    int i;
       
    int k;
       
    int j;
       abyte0 
    = s.getBytes();
       ac 
    = new char[s.length()];
       i 
    = 0;
       k 
    = abyte0.length;
       
    while (i < k) {
        j 
    = abyte0[i];
        
    if ((j >= 48&& (j <= 57)) {
         j 
    = (((j - 48+ 5% 10+ 48;
        }
     else if ((j >= 65&& (j <= 90)) {
         j 
    = (((j - 65+ 13% 26+ 65;
        }
     else if ((j >= 97&& (j <= 122)) {
         j 
    = (((j - 97+ 13% 26+ 97;
        }

        ac[i] 
    = (char) j;
        i
    ++;
       }

       
    return String.valueOf(ac);
    }


    public MyEclipseGen() {
       
    super();
    }


    public static void main(String[] args) {
       
    try {
        System.out.println(
    "please input register name:");
        BufferedReader reader 
    = new BufferedReader(new InputStreamReader(
          System.in));
        String userId 
    = null;
        userId 
    = reader.readLine();
        MyEclipseGen myeclipsegen 
    = new MyEclipseGen();
        String res 
    = myeclipsegen.getSerial(userId, "5");
        System.out.println(
    "Serial:" + res);
        reader.readLine();
       }
     catch (IOException ex) {
       }

    }

    }


    注冊方法:
    window -> preferences -> myeclipse -> subscription

     

    posted @ 2010-02-16 09:20 absolute| 編輯 收藏
      2010年1月9日

     

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

    1、Hibernate核心類與接口    

    1-1.Configuration

          Configuration類是Hibernate的入口,它負(fù)責(zé)配置和啟動Hibernate,Hibernate框架通過Configuration實例加載配置文件信息(hibernate.cfg.xml),然后讀取指定對象關(guān)系映射文件(bean.hbm.xml)的內(nèi)容并創(chuàng)建SessionFactory.

    1-2.SessionFactory接口

           SessionFactory接口負(fù)責(zé)初始化Hibernate,一個SessionFactory實例對應(yīng)一個數(shù)據(jù)存儲源(一般就是指一個數(shù)據(jù)庫)。應(yīng)用程序從SessionFactory中獲得Session實例。SessionFactory具有以下特點:

           1)    線程安全,即同一個 SessionFactory實例可以被應(yīng)用 的多個線程共享。

           2)    它是重量級的 ,因為它需要一個很大的緩存,用來存放預(yù)定義的SQL語句以及映射元數(shù)據(jù)等。

    所以說 ,如果一個應(yīng)用程序中只訪問一個數(shù)據(jù)庫 ,則只需要創(chuàng)建一個全局的 SessionFactory實例。

    1-3.Session 接口

        SessionHibernate中應(yīng)用最頻繁的接口。Session也被稱為持久化管理器 ,它負(fù)責(zé)管理所有與持久化相關(guān)的操作:如存儲、更新、刪除和加載對象等。Session接口具有以下特點:

        1)    單線程,非共享的對象。線程不安全,在設(shè)計軟件架構(gòu)時候,應(yīng)該避免多個線程共享同一個session實例。

        2)    Session 實例是輕量級的,它的創(chuàng)建和銷毀不需要消耗太多的資源。可以為每個請分配一個Session實例,在每次請求過程匯總及時創(chuàng)建和銷毀 Session實例。

        3)    Session有一個緩存,它存放當(dāng)前工作單元加載的對象。Session的緩存被稱為Hibernate的一級緩存。

    1-4.Transaction接口

        Transaction接口是 Hibernate框架的事務(wù)接口。它對底層的事務(wù)接口做了封裝,包括:JDBC APIJTA.這樣使得Hibernate應(yīng)用可以通過一致的Transaction接口來申明事務(wù)邊界,這有助于應(yīng)用程序再不同的環(huán)境和容器中移植。

    1-5.QueryCriteria接口

        它們是 Hibernate的查詢接口,用于從數(shù)據(jù)存儲源查詢對象及控制執(zhí)行查詢的過程。Query包裝了一個 HQL(Hibernate Query Language);而Criteria接口完全封裝了基本字符串形式的查詢語句,比Query更加面向?qū)ο螅?/span>Criteria接口擅長于執(zhí)行動態(tài)查詢。

    2、Hibernate中常用的事務(wù)隔離級別

    常量

    說明

    TRANSACTION_NONE 

    0

    不支持事務(wù)

    TRANSACTION_READ_UNCOMMITTED

    1

    指示可以發(fā)生臟讀(dirty read)、不可重復(fù)讀和虛讀(phantom read)的常量。此級別允許被某一事務(wù)更改的行在已提交該行所有更改之前被另一個事務(wù)讀取(“臟讀”)。如果所有更改都被回滾,則第二個事務(wù)將獲取無效的行。

    TRANSACTION_READ_COMMITTED

    2

    指示不可以發(fā)生臟讀的常量;不可重復(fù)讀和虛讀可以發(fā)生。此級別只禁止事務(wù)讀取其中帶有未提交更改的行。

    TRANSACTION_REPEATABLE_READ

    4

    指示不可以發(fā)生臟讀和不可重復(fù)讀的常量;虛讀可以發(fā)生。此級別禁止事務(wù)讀取帶有未提交更改的行,它還禁止這種情況:一個事務(wù)讀取某一行,而另一個事務(wù)更改該行,第一個事務(wù)重新讀取該行,并在第二次讀取時獲得不同的值(“不可重復(fù)讀”)。

    TRANSACTION_SERIALIZABLE

    8

    指示不可以發(fā)生臟讀、不可重復(fù)讀和虛讀的常量。此級別包括TRANSACTION_REPEATABLE_READ 中禁止的事項,同時還禁止出現(xiàn)這種情況:某一事務(wù)讀取所有滿足 WHERE 條件的行,另一個事務(wù)插入一個滿足 WHERE 條件的行,第一個事務(wù)重新讀取滿足相同條件的行,并在第二次讀取時獲得額外的“虛”行。

    3、Hibernate中實例的狀態(tài)

    3-1:臨時狀態(tài)

           該實例從未與任何持久化上下文關(guān)聯(lián)過。它沒有持久化標(biāo)識(相當(dāng)于主鍵值),臨時狀態(tài)下的對象有如下特征。

    1)    不處于Session緩存中,也可以說不被任何一個Session關(guān)聯(lián)

    2)    在數(shù)據(jù)庫中沒有對應(yīng)的記錄

    在以下情況下,Java對象進入臨時狀態(tài)

    1) 當(dāng)通過new語句剛創(chuàng)建一個Java對象,它處于臨時狀態(tài),此時不和數(shù)據(jù)庫中的任何記錄對應(yīng)。

    2) Sessiondelete()方法能使一個持久化或臨時脫管對象轉(zhuǎn)換為臨時對象。對于脫管對象,delete()方法從數(shù)據(jù)庫中刪除與它對應(yīng)的記錄,并且把它從Session緩存中刪除。

    3-2:持久化狀態(tài)

          該實例目前與某個持久化上下文有關(guān)聯(lián),它擁有持久化標(biāo)識(相當(dāng)于主鍵值),并且可能在數(shù)據(jù)庫匯總有一個對應(yīng)的行。對于某一個特定的持久化上下文,Hibernate保證標(biāo)識與Java標(biāo)識(其值代表對應(yīng)在內(nèi)存中的位置)等價。持久化對象有以下特征。

    1) 位于一個Session實例的緩存中,也可以說,持久化對象總是被一個Session實例關(guān)聯(lián)。

    2) 持久化對象和數(shù)據(jù)庫中的相關(guān)記錄對應(yīng)。

    3) Session在清理緩存時,會根據(jù)持久化對象的屬性變化,來同步更新數(shù)據(jù)庫。

    Session的許多方法都能夠觸發(fā)Java對象進入持久化狀態(tài)。

    4) Sessionsave()的方法能夠把臨時對象轉(zhuǎn)變成持久化對象。

    5) Sessionload()get()方法返回的對象總是處于持久化狀態(tài)。

    6) Query類的list()方法返回的list集合中存放的都是持久化對象。

    7) Sessionupdate()saveOrUpdate()lock()方法使脫管對象轉(zhuǎn)變?yōu)槌志没瘜ο蟆?/span>

    當(dāng)一個持久化對象關(guān)聯(lián)一個臨時對象時,在允許級聯(lián)保存的情況下,Session在清理緩存時會把這個臨時對象也轉(zhuǎn)變成持久化對象。Hibernate保證在同一個Session實例的緩存中,數(shù)據(jù)庫表中的每條記錄只對應(yīng)唯一的持久化對象,也就是說在一個Sessionload/get同一個OID得到 的是相同的對象。

    3-3:脫管狀態(tài)

                實例曾經(jīng)與某個持久化上下文發(fā)生過關(guān)聯(lián),不過那個上下文被關(guān)閉了,或者這個實例是被序列化(serialize)到另外的進程。它擁有持久化標(biāo)識,并且在數(shù)據(jù)庫中可能存在一個對應(yīng)的行。對于脫管狀態(tài)的實例,Hibernate不保證任何持久化標(biāo)識和Java標(biāo)識的關(guān)系。

    脫管對象具有以下特征。

    1)    不再位于Session的緩存中,也可以說,脫管對象不被Session關(guān)聯(lián)。

    2)    脫管對象是有持久化對象轉(zhuǎn)變過來的,因此在數(shù)據(jù)庫中可能還存在與它對應(yīng)的記錄(前提條件是沒有其他程序刪除了這條記錄)

    3)    脫管對象與臨時對象的相同指出在于兩者都不被Session關(guān)聯(lián),因此Hibernate不會保證他們屬性變化與數(shù)據(jù)庫保持同步。脫管對象與臨時對象的區(qū)別在于前者是由持久化對象轉(zhuǎn)變過來的,因此可能在書庫中還存在對應(yīng)的記錄,而后者在數(shù)據(jù)庫中是沒有對應(yīng)的記錄的。

    Session的以下方法使持久化對象轉(zhuǎn)變成脫管對象.

    1)      當(dāng)調(diào)用Sessionclose()方法時,Session 的緩存被清空,緩存中的所有持久化對象都變?yōu)槊摴軐ο螅绻趹?yīng)用程序中沒有引用變量引用這些脫管對象,他們就會結(jié)束生命周期。

    2)      Sessionevict()方法能夠從緩存中刪除一個持久化對象,使它變?yōu)槊摴軤顟B(tài),當(dāng)Session的緩存中保存了大量的持久化對象時,會消耗許多內(nèi)存空間,為了提高性能,可以考慮調(diào)用evict()方法,從緩存中刪除一些持久化對象。但是多數(shù)情況下不推薦使用該方法,而應(yīng)該通過查詢語言,或者顯示的導(dǎo)航來控制對象圖的深度。

     

    posted @ 2010-01-09 19:08 absolute 閱讀(674) | 評論 (0)編輯 收藏
      2009年10月25日
    最近在構(gòu)思寫一些設(shè)計模式方面的文章,用到UML圖,以前用Visio和WithClass..但功能不多,所以就安裝了Rose 2003..以下是安裝過程:

         1.安裝Rose后,默認(rèn)是需要許可證書的..去下載個破解的..我上傳了破解文件..點擊這里下載Rose 2003破解

         2.先用破解壓縮包里的 rational.exe,lmgrd.exe 覆蓋到你的 \安裝目錄的Rartional\commen\下

         3.然后記事本打開 license.dat, 修改里面的 SERVER yourPC ANY  DAEMON rational "C:\Program Files\Rational\Common\rational.exe"
         改成 SERVER 你的機器名 ANY  DAEMON rational "你的安裝目錄\rational.exe" ,拷貝到Common目錄下..

        4. 將Flexlm.cpl拷貝到C:\winnt\system32\下, 在控制面板里運行 FlexLm License Manager,   

        運行后, 在 Setup 面板配置文件路徑,lmgrd.exe -> 你的安裝目錄 \Common\lmgrd.exe, 而 License File 為你改過的 license.dat ...



         5.在Control面板點擊Start,如果成功的話點擊Status按鈕將顯示 你的機器名:license server UP (MASTER) 說明成功了
         失敗的話重啟一下FlexLm License Manager就沒問題了。 



         6.如果彈出對話框License Key Administrator Wizard后, 選定Point to a Rational License Server to get my licenses,單擊下一步,
    Server Name文本框中填寫你的機器號(可能已經(jīng)填好),單擊完成。 (成功的話會出現(xiàn)兩屏的licenses) 

    注意:本文轉(zhuǎn)至:http://www.cnblogs.com/lixianhuei/archive/2006/01/09/313644.html
    posted @ 2009-10-25 08:29 absolute 閱讀(878) | 評論 (1)編輯 收藏
      2009年8月17日
    有這樣兩個表:
    table_a:

    id        name        val
    1          aaa          30
    2          aaa          40
    3          aaa          50
    1          bbb         35
    2          bbb         45
    3          bbb         55

    table_b:
    name        val1        val2        val3
    aaa            30          40          50
    bbb           35          45          55

    請用一個SQL語句實現(xiàn)table_a到table_b的轉(zhuǎn)化。


     1create table tb(id int, name varchar(10), val int)
     2insert into tb values(1 , 'aaa' , 30 )
     3insert into tb values(2 , 'aaa' , 40 )
     4insert into tb values(3 , 'aaa' , 50 )
     5insert into tb values(1 , 'bbb' , 35 )
     6insert into tb values(2 , 'bbb' , 45 )
     7insert into tb values(3 , 'bbb' , 55 )
     8go
     9
    10--sql 2000靜態(tài),指ID只有1,2,3
    11select name , 
    12       sum(case id when 1 then val else 0 end[val1],
    13       sum(case id when 2 then val else 0 end[val2],
    14       sum(case id when 3 then val else 0 end[val3]
    15from tb
    16group by name
    17/*
    18name       val1        val2        val3        
    19---------- ----------- ----------- ----------- 
    20aaa        30          40          50
    21bbb        35          45          55
    22
    23(所影響的行數(shù)為 2 行)
    24*/

    25
    26--sql 2000動態(tài),指ID不確定
    27declare @sql varchar(8000)
    28set @sql = 'select name '
    29select @sql = @sql + ' , sum(case id when ''' + cast(id as varchar+ ''' then val else 0 end) [val' + cast(id as varchar+ ']'
    30from (select distinct id from tb) as a
    31set @sql = @sql + ' from tb group by name'
    32exec(@sql
    33/*
    34name       val1        val2        val3        
    35---------- ----------- ----------- ----------- 
    36aaa        30          40          50
    37bbb        35          45          55
    38*/

    39
    40
    41drop table tb
    42


    posted @ 2009-08-17 10:14 absolute 閱讀(441) | 評論 (0)編輯 收藏
    SQL code
    with rollup 、with cube、grouping CUBE 和 ROLLUP 之間的區(qū)別在于: CUBE 生成的結(jié)果集顯示了所選列中值的所有組合的聚合。 ROLLUP 生成的結(jié)果集顯示了所選列中值的某一層次結(jié)構(gòu)的聚合。 grouping: 當(dāng)用 CUBE 或 ROLLUP 運算符添加行時,附加的列輸出值為1,當(dāng)所添加的行不是由 CUBE 或 ROLLUP 產(chǎn)生時,附加列值為0。 --例如 DECLARE @T TABLE(名稱 VARCHAR(1) , 出版商 VARCHAR(10), 價格1 INT, 價格2 INT) INSERT @T SELECT 'a', '北京', 11, 22 UNION ALL SELECT 'a', '四川', 22, 33 UNION ALL SELECT 'b', '四川', 12, 23 UNION ALL SELECT 'b', '北京', 10, 20 UNION ALL SELECT 'b', '昆明', 20, 30 SELECT 名稱, 出版商, SUM(價格1) AS 價格1, SUM(價格2) AS 價格2, GROUPING(名稱) AS CHECK名稱, GROUPING(出版商) AS CHECK出版商 FROM @T GROUP BY 名稱,出版商 WITH CUBE /* 名稱 出版商 價格1 價格2 CHECK名稱 CHECK出版商 ---- ---------- ----------- ----------- ------- -------- a 北京 11 22 0 0 a 四川 22 33 0 0 a NULL 33 55 0 1 b 北京 10 20 0 0 b 昆明 20 30 0 0 b 四川 12 23 0 0 b NULL 42 73 0 1 NULL NULL 75 128 1 1 NULL 北京 21 42 1 0 NULL 昆明 20 30 1 0 NULL 四川 34 56 1 0 (所影響的行數(shù)為 11 行) */ --分析 /*group by 兩列:名稱有兩個類別A,B;所有由CUBE運算而生成行的是 名稱 出版商 價格1 價格2 CHECK名稱 CHECK出版商 ---- ---------- ----------- ----------- ------- -------- a NULL 33 55 0 1 b NULL 42 73 0 1 出版商有三個類別,所有由CUBE運算而生成行的是 名稱 出版商 價格1 價格2 CHECK名稱 CHECK出版商 ---- ---------- ----------- ----------- ------- -------- NULL 北京 21 42 1 0 NULL 昆明 20 30 1 0 NULL 四川 34 56 1 0 以及 NULL NULL 75 128 1 1 */ SELECT 名稱, 出版商, SUM(價格1) AS 價格1, SUM(價格2) AS 價格2 FROM @T GROUP BY 名稱,出版商 WITH ROLLUP /* 名稱 出版商 價格1 價格2 ---- ---------- ----------- ----------- a 北京 11 22 a 四川 22 33 a NULL 33 55 b 北京 10 20 b 昆明 20 30 b 四川 12 23 b NULL 42 73 NULL NULL 75 128 */
    posted @ 2009-08-17 09:51 absolute 閱讀(17357) | 評論 (0)編輯 收藏
    僅列出標(biāo)題  下一頁
    主站蜘蛛池模板: 免费a级毛片无码a∨性按摩| 国产老女人精品免费视频| 91视频国产免费| 男女啪啪永久免费观看网站| 伊在人亚洲香蕉精品区麻豆| 亚洲日韩精品无码专区网址| 亚洲AV无码乱码在线观看裸奔 | 日韩免费高清视频| 亚洲精品成人区在线观看| 国产∨亚洲V天堂无码久久久| 久久国产亚洲高清观看| 亚洲暴爽av人人爽日日碰| 一级毛片免费不卡直观看| 久久久久久AV无码免费网站下载 | 97超高清在线观看免费视频| 亚洲一区二区三区免费视频| 日本高清免费aaaaa大片视频| 中文字幕亚洲一区| 亚洲国产精品xo在线观看| 国产青草亚洲香蕉精品久久| 中文字幕久精品免费视频| 成人午夜免费福利| 夜夜春亚洲嫩草影院| 亚洲人成日本在线观看| 免费看美女午夜大片| h在线观看视频免费网站| 又粗又硬免费毛片| 亚洲日本在线观看| 亚洲av无码成人精品区一本二本| 日本高清不卡aⅴ免费网站| 中文字幕av无码无卡免费| 国产亚洲人成A在线V网站| 亚洲va在线va天堂va手机| a级毛片免费观看在线| 国产精彩免费视频| 亚洲一级特黄无码片| 亚洲国产日韩综合久久精品| 国内精品99亚洲免费高清| 日韩高清免费观看| 亚洲午夜精品久久久久久人妖| 美女黄频a美女大全免费皮|