<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
      2009年2月9日
    通過存儲過程向數據庫一下子插入了一千萬(10000000)條記錄,結果等了很長時間,PL/SQL都沒有響應,我又瞎折騰了下,結果執行了好幾次,導致數據庫假死了,我只有刪除當前的會話,從網上找到相關的腳本代碼。


    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> 根據1,2步查詢到的SESSION_ID和SERIAL#執行

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

    4> 如果利用上面的命令殺死一個進程后,進程狀態被置為"killed",但是鎖定的資源很長時間沒有被釋放,那么還可以在os一級再殺死相應的進程(線程),首先執行下面的語句獲得當前進程(線程)的標示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通過任務管理器找到對應的進程,在殺死這個進程(線程)

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

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

    建表腳本:
     1--刪除用戶表
     2DROP TABLE T_PORTAL_USER;
     3
     4--創建用戶表
     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 -- 賬號狀態 "0":啟用  "1":注銷
    14)
    15
    16--刪除用戶表序列
    17DROP SEQUENCE SEQ_T_PORTAL_USER;
    18
    19--創建用戶表序列
    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);--結束時間
     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 閱讀(3699) | 評論 (1)編輯 收藏
         摘要: 在項目中使用Apache開源的Services Framework CXF來發布WebService,CXF能夠很簡潔與Spring Framework 集成在一起,在發布WebService的過程中,發布的接口的入參有些類型支持不是很好,比如Timestamp和Map。這個時候我們就需要編寫一些適配來實行類型轉換。 Timestamp:  1/** *//** &n...  閱讀全文
    posted @ 2010-11-27 14:28 absolute 閱讀(3425) | 評論 (1)編輯 收藏

    Web應用初始化Spring容器策略

    以下軟件測試環境為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默認加載配置文件命名規則是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來初始化(應用服務器需要支持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 用于提供"后臺"服務,作為容器管理應用中的其他bean,不需要響應客戶請求,因此無須配置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 閱讀(2269) | 評論 (0)編輯 收藏

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

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

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

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

    ·  負載均衡--負載均衡能把任務比較均衡地分布到集群環境下的計算和網絡資源。

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

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

    3. 兩大技術
    實現集群務必要有以下兩大技術:

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

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

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

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

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

    具體包括:

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

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

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

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

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

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

    負載均衡系統:集群中所有的節點都處于活動狀態,它們分攤系統的工作負載。一般Web服務器集群、數據庫集群和應用服務器集群都屬于這種類型。

    負載均衡集群一般用于相應網絡請求的網頁服務器,數據庫服務器。這種集群可以在接到請求時,檢查接受請求較少,不繁忙的服務器,并把請求轉到這些服務器上。從檢查其他服務器狀態這一點上看,負載均衡和容錯集群很接近,不同之處是數量上更多。

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

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

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

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

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

     

    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/tanghongru1983/archive/2009/04/28/4130356.aspx

    posted @ 2010-03-02 14:16 absolute 閱讀(644) | 評論 (0)編輯 收藏
    代碼如下:
    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| 編輯 收藏

     

    Hibernate學習筆記

    1、Hibernate核心類與接口    

    1-1.Configuration

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

    1-2.SessionFactory接口

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

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

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

    所以說 ,如果一個應用程序中只訪問一個數據庫 ,則只需要創建一個全局的 SessionFactory實例。

    1-3.Session 接口

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

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

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

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

    1-4.Transaction接口

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

    1-5.QueryCriteria接口

        它們是 Hibernate的查詢接口,用于從數據存儲源查詢對象及控制執行查詢的過程。Query包裝了一個 HQL(Hibernate Query Language);而Criteria接口完全封裝了基本字符串形式的查詢語句,比Query更加面向對象,Criteria接口擅長于執行動態查詢。

    2、Hibernate中常用的事務隔離級別

    常量

    說明

    TRANSACTION_NONE 

    0

    不支持事務

    TRANSACTION_READ_UNCOMMITTED

    1

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

    TRANSACTION_READ_COMMITTED

    2

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

    TRANSACTION_REPEATABLE_READ

    4

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

    TRANSACTION_SERIALIZABLE

    8

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

    3、Hibernate中實例的狀態

    3-1:臨時狀態

           該實例從未與任何持久化上下文關聯過。它沒有持久化標識(相當于主鍵值),臨時狀態下的對象有如下特征。

    1)    不處于Session緩存中,也可以說不被任何一個Session關聯

    2)    在數據庫中沒有對應的記錄

    在以下情況下,Java對象進入臨時狀態

    1) 當通過new語句剛創建一個Java對象,它處于臨時狀態,此時不和數據庫中的任何記錄對應。

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

    3-2:持久化狀態

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

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

    2) 持久化對象和數據庫中的相關記錄對應。

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

    Session的許多方法都能夠觸發Java對象進入持久化狀態。

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

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

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

    7) Sessionupdate()、saveOrUpdate()lock()方法使脫管對象轉變為持久化對象。

    當一個持久化對象關聯一個臨時對象時,在允許級聯保存的情況下,Session在清理緩存時會把這個臨時對象也轉變成持久化對象。Hibernate保證在同一個Session實例的緩存中,數據庫表中的每條記錄只對應唯一的持久化對象,也就是說在一個Sessionload/get同一個OID得到 的是相同的對象。

    3-3:脫管狀態

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

    脫管對象具有以下特征。

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

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

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

    Session的以下方法使持久化對象轉變成脫管對象.

    1)      當調用Sessionclose()方法時,Session 的緩存被清空,緩存中的所有持久化對象都變為脫管對象,如果在應用程序中沒有引用變量引用這些脫管對象,他們就會結束生命周期。

    2)      Sessionevict()方法能夠從緩存中刪除一個持久化對象,使它變為脫管狀態,當Session的緩存中保存了大量的持久化對象時,會消耗許多內存空間,為了提高性能,可以考慮調用evict()方法,從緩存中刪除一些持久化對象。但是多數情況下不推薦使用該方法,而應該通過查詢語言,或者顯示的導航來控制對象圖的深度。

     

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

         1.安裝Rose后,默認是需要許可證書的..去下載個破解的..我上傳了破解文件..點擊這里下載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文本框中填寫你的機器號(可能已經填好),單擊完成。 (成功的話會出現兩屏的licenses) 

    注意:本文轉至:http://www.cnblogs.com/lixianhuei/archive/2006/01/09/313644.html
    posted @ 2009-10-25 08:29 absolute 閱讀(880) | 評論 (1)編輯 收藏
    有這樣兩個表:
    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語句實現table_a到table_b的轉化。


     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靜態,指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(所影響的行數為 2 行)
    24*/

    25
    26--sql 2000動態,指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 閱讀(442) | 評論 (0)編輯 收藏
    SQL code
    with rollup 、with cube、grouping CUBE 和 ROLLUP 之間的區別在于: CUBE 生成的結果集顯示了所選列中值的所有組合的聚合。 ROLLUP 生成的結果集顯示了所選列中值的某一層次結構的聚合。 grouping: 當用 CUBE 或 ROLLUP 運算符添加行時,附加的列輸出值為1,當所添加的行不是由 CUBE 或 ROLLUP 產生時,附加列值為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 (所影響的行數為 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 閱讀(17359) | 評論 (0)編輯 收藏

    HTML頭部信息(head)里包含關于所在網頁的信息。頭部信息(head)里的內容,主要是被瀏覽器所用,不會顯示在網頁的正文內容里。

    幾個常用的head信息里的html元素

    標題(title)

    標題(title)是最常用的head信息。它不顯示在HTML網頁正文里,顯示在瀏覽器窗口的標題欄里。

     鏈接(link)

    用鏈接(link)可以建立和外部文件的鏈接。常用的是對CSS外部樣式表(external style sheet)的鏈接。

    如:<link href="css/index.css" rel="stylesheet" type="text/css" />

    網頁信息(meta)

    在HTML里,meta標記(meta tags)表示用來描述網頁的有關信息。

    <meta http-equiv="Content-Type" content="text/html;charset=gbk" />

    <meta name="description" content="" />

    <meta name="keywords" content=""/>

    <meta http-equiv="Refresh" contetn="5;url">

        一、meta標簽的組成

         meta標簽共有兩個屬性,它們分別是http-equiv屬性和name屬性,不同的屬性又有不同的參數值,這些不同的參數值就實現了不同的網頁功能。

         1、name屬性

         name屬性主要用于描述網頁,與之對應的屬性值為content,content中的內容主要是便于搜索引擎機器人查找信息和分類信息用的。

         meta標簽的name屬性語法格式是:<meta name="參數" content="具體的參數值"> 。

         其中name屬性主要有以下幾種參數:

         A、Keywords(關鍵字)

         說明:keywords用來告訴搜索引擎你網頁的關鍵字是什么。

         舉例:<meta name ="keywords" content="science, education,culture,politics,ecnomics,relationships, entertaiment, human">

          B、description(網站內容描述)

         說明:description用來告訴搜索引擎你的網站主要內容。

         舉例:<meta name="description" content="This page is about the meaning of science, education,culture.">

         C、robots(機器人向導)

         說明:robots用來告訴搜索機器人哪些頁面需要索引,哪些頁面不需要索引。

         content的參數有all,none,index,noindex,follow,nofollow。默認是all。

         舉例:<meta name="robots" content="none">

         D、author(作者)

         說明:標注網頁的作者

         舉例:<meta name="author" content"root,root@21cn.com">

        2、http-equiv屬性

         http-equiv顧名思義,相當于http的文件頭作用,它可以向瀏覽器傳回一些有用的信息,以幫助正確和精確地顯示網頁內容,與之對應的屬性值為content,content中的內容其實就是各個參數的變量值。

         meat標簽的http-equiv屬性語法格式是:<meta http-equiv="參數" content="參數變量值"> ;其中http-equiv屬性主要有以下幾種參數:

         A、Expires(期限)

         說明:可以用于設定網頁的到期時間。一旦網頁過期,必須到服務器上重新傳輸。

         用法:<meta http-equiv="expires" content="Fri, 12 Jan 2001 18:18:18 GMT">

         注意:必須使用GMT的時間格式。

         B、Pragma(cache模式)

         說明:禁止瀏覽器從本地計算機的緩存中訪問頁面內容。

         用法:<meta http-equiv="Pragma" content="no-cache">

         注意:這樣設定,訪問者將無法脫機瀏覽。

         C、Refresh(刷新)

         說明:自動刷新并指向新頁面。

         用法:<meta http-equiv="Refresh" content="2;URL=http://www.root.net">

        注意:其中的2是指停留2秒鐘后自動刷新到URL網址。

         D、Set-Cookie(cookie設定)

        說明:如果網頁過期,那么存盤的cookie將被刪除。

         用法:<meta http-equiv="Set-Cookie" content="cookievalue=xxx; expires=Friday, 12-Jan-2001 18:18:18 GMT; path=/">

         注意:必須使用GMT的時間格式。

         E、Window-target(顯示窗口的設定)

         說明:強制頁面在當前窗口以獨立頁面顯示。

         用法:<meta http-equiv="Window-target" content="_top">

         注意:用來防止別人在框架里調用自己的頁面。

         F、content-Type(顯示字符集的設定)

         說明:設定頁面使用的字符集。

         用法:<meta http-equiv="content-Type" content="text/html; charset=gb2312">

        二、meta標簽的功能

         上面我們介紹了meta標簽的一些基本組成,接著我們再來一起看看meta標簽的常見功能:

        1、幫助主頁被各大搜索引擎登錄

         meta標簽的一個很重要的功能就是設置關鍵字,來幫助你的主頁被各大搜索引擎登錄,提高網站的訪問量。在這個功能中,最重要的就是對Keywords和description的設置。因為按照搜索引擎的工作原理,搜索引擎首先派出機器人自動檢索頁面中的keywords和decription,并將其加入到自己的數據庫,然后再根據關鍵詞的密度將網站排序。因此,我們必須設置好關鍵字,來提高頁面的搜索點擊率。下面我們來舉一個例子供大家參考:

    <meta name="keywords" content="政治,經濟, 科技,文化, 衛生, 情感,心靈,娛樂,生活,社會,企業,交通">
    <meta name="description" content="政治,經濟, 科技,文化, 衛生, 情感,心靈,娛樂,生活,社會,企業,交通">

        設置好這些關鍵字后,搜索引擎將會自動把這些關鍵字添加到數據庫中,并根據這些關鍵字的密度來進行合適的排序。

     ?。?、定義頁面的使用語言

      這是meta標簽最常見的功能,在制作網頁時,我們在純HTML代碼下都會看到它,它起的作用是定義你網頁的語言,當瀏覽者訪問你的網頁時,瀏覽器會自動識別并設置網頁中的語言,如果你網頁設置的是GB碼,而瀏覽者沒有安裝GB碼,這時網頁只會呈現瀏覽者所設置的瀏覽器默認語言。同樣的,如果該網頁是英語,那么charset=en。下面就是一個具有代表性的例子:

     ?。糾eta http-equiv=″content-Type″ content=″text/html; charset=gb2312″〉

    該代碼就表示將網頁的語言設置成國標碼。

     ?。?、自動刷新并指向新的頁面

      如果你想使您的網頁在無人控制的情況下,能自動在指定的時間內去訪問指定的網頁,就可以使用meta標簽的自動刷新網頁的功能。下面我們來看一段代碼:

      〈meta http-equiv=″refresh″ content=″2; URL=http://www.root.net″〉

      這段代碼可以使當前某一個網頁在2秒后自動轉到http://www.root.net頁面中去,這就是meta的刷新作用,在content中,2代表設置的時間(單位為秒),而URL就是在指定的時間后自動連接的網頁地址。

     ?。?、實現網頁轉換時的動畫效果

      使用meta標簽,我們還可以在進入網頁或者離開網頁的一剎那實現動畫效果,我們只要在頁面的html代碼中的<head></head>標簽之間添加如下代碼就可以了:

    <meta http-equiv="Page-Enter" content="revealTrans(duration=5.0, transition=20)">
    <meta http-equiv="Page-Exit" content="revealTrans(duration=5.0, transition=20)">

    一旦上述代碼被加到一個網頁中后,我們再進出頁面時就會看到一些特殊效果,這個功能其實與FrontPage2000中的Format/Page Transition一樣,但我們要注意的是所加網頁不能是一個Frame頁;

     ?。?、網頁定級評價

      IE4.0以上版本的瀏覽器可以防止瀏覽一些受限制的網站,而之所以瀏覽器會自動識別某些網站是否受限制,就是因為在網站meta標簽中已經設置好了該網站的級別,而該級別的評定是由美國RSAC,即娛樂委員會的評級機構評定的,如果你需要評價自己的網站,可以連接到網站http://www.rsac.org/,按要求提交表格,那么RSAC會提供一段meta代碼給你,復制到自己網頁里就可以了。下面就是一段代碼的樣例:

     〈meta http-equiv=″PICS-Label″
     content=′(PICS-1.1 ″http://www.rsac.org/ratingsv01.html″
     l gen true comment ″RSACi North America Server″
     for ″http://www.rsac.org″
     on ″2001.08.16T08:15-0500″
     r (n 0 s 0 v 0 l 0))′〉

     ?。?、控制頁面緩沖

      meta標簽可以設置網頁到期的時間,也就是說,當你在Internet Explorer 瀏覽器中設置瀏覽網頁時首先查看本地緩沖里的頁面,那么當瀏覽某一網頁,而本地緩沖又有時,那么瀏覽器會自動瀏覽緩沖區里的頁面,直到meta中設置的時間到期,這時候,瀏覽器才會去取得新頁面。例如下面這段代碼就表示網頁的到期時間是2001年1月12日18時18分18秒。

      〈meta http-equiv=″expires″ content=″Friday, 12-Jan-2001 18:18:18 GMT″〉

     ?。?、控制網頁顯示的窗口

      我們還可以使用meta標簽來控制網頁顯示的窗口,只要在網頁中加入下面的代碼就可以了:<metahttp-equiv="window-target" content="_top">,這段代碼可以防止網頁被別人作為一個Frame調用。


    本文來自CSDN博客,轉載出處:http://blog.csdn.net/mabgang/archive/2009/02/25/3934597.aspx

    posted @ 2009-08-17 09:39 absolute 閱讀(735) | 評論 (0)編輯 收藏

    開始 -> 執行

    regsvr32 /n /i:u shell32


    然后重啟電腦就可以了!
    posted @ 2009-08-17 09:25 absolute 閱讀(274) | 評論 (0)編輯 收藏
    1:MS SQL Server中,有NEWID函數,返回的數據類型為UniqueIdentifier,長度為36。

    /*
    例子:
    declare @i uniqueidentifier
    select @i=newid()
    begin
     print cast(@i as varchar(50))
    end
    */

    2:Oracle中,有SYS_GUID函數,返回數據類型為char,長度為32。
    /*
    select sys_guid() from dual
    */

    DB2中,沒有產生GUID的函數,有一替代的函數generate_unique,返回的數據類型為CHAR FOR BIT,長度為13。

    SYBASE中,也有NEWID()函數,返回的數據類型為char,長度為36。

    評述,GUID在保證數據記錄Primary Key唯一性,作用很大,DB2不支持這一函數,商用主流數據庫中,DB2最差。MS SQL Server還有直接支持GUID的數據類型,支持最好。SYBASE的文檔作得最差,在其文檔中無法查到NEWID函數,但是可以使用。


    轉至:http://www.cnblogs.com/jobs/archive/2004/07/26/27533.html
    posted @ 2009-06-03 17:40 absolute 閱讀(622) | 評論 (0)編輯 收藏

    一個和睦的家庭,一份勝任的工作。


    讓為兒女辛勞一生的父母能老有所依,讓托付終身于我的伴侶感受幸福。


    讓孩子在我的庇護下快樂成長,讓和我相處的朋友感覺踏實可靠。

    posted @ 2009-04-21 14:22 absolute| 編輯 收藏
    之前寫過一個簡單的利用jQuery實現表格行的動態增加與刪除的例子,有些人評論說"如果表格中是input元素,那么刪除后的東西都將自動替換,這樣應該是有問題的,建議樓主改進!",故特意改進了一下!

    在項目中很多時候遇到這樣的問題,需要動態的增加、刪除表格的行,很多情況下我們都是在頁面來設置一個隱藏域的值,然后在js方法里動態的++或--,在學習jQuery的過程中,我試著用簡單的方法來模擬實現這一個過程

    效果圖如下:

    刪除之前

    刪除2行后:


    改進后具體代碼如下:
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2<html xmlns="http://www.w3.org/1999/xhtml">
     3<head>
     4<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     5<script type="text/javascript" src="jquery-1.3.1.js"></script>
     6<title></title>
     7<script>
     8    $(document).ready(function(){
     9        //<tr/>居中
    10        $("#tab tr").attr("align","center");
    11        
    12        //增加<tr/>
    13        $("#but").click(function(){
    14            var _len = $("#tab tr").length;        
    15            $("#tab").append("<tr id="+_len+" align='center'>"
    16                                +"<td>"+_len+"</td>"
    17                                +"<td>Dynamic TR"+_len+"</td>"
    18                                +"<td><input type='text' name='desc"+_len+"' id='desc"+_len+"' /></td>"
    19                                +"<td><a href=\'#\' onclick=\'deltr("+_len+")\'>刪除</a></td>"
    20                            +"</tr>");            
    21        }
    )    
    22    }
    )
    23    
    24    //刪除<tr/>
    25    var deltr =function(index)
    26    {
    27        var _len = $("#tab tr").length;
    28        $("tr[id='"+index+"']").remove();//刪除當前行
    29        for(var i=index+1,j=_len;i<j;i++)
    30        {
    31            var nextTxtVal = $("#desc"+i).val();
    32            $("tr[id=\'"+i+"\']")
    33                .replaceWith("<tr id="+(i-1)+" align='center'>"
    34                                +"<td>"+(i-1)+"</td>"
    35                                +"<td>Dynamic TR"+(i-1)+"</td>"
    36                                +"<td><input type='text' name='desc"+(i-1)+"' value='"+nextTxtVal+"' id='desc"+(i-1)+"'/></td>"
    37                                +"<td><a href=\'#\' onclick=\'deltr("+(i-1)+")\'>刪除</a></td>"
    38                            +"</tr>");
    39        }
        
    40        
    41    }

    42</script>
    43</head>
    44<body>
    45    
    46    <table id="tab" border="1" width="60%" align="center" style="margin-top:20px">
    47        <tr>
    48            <td width="20%">序號</td>
    49            <td>標題</td>
    50            <td>描述</td>
    51            <td>操作</td>
    52       </tr>
    53    </table>
    54    <div style="border:2px; 
    55                border-color:#00CC00; 
    56                margin-left:20%;
    57                margin-top:20px">
    58        <input type="button" id="but" value="增加"/>
    59    </div>
    60</body>
    61</html>
    62



    源代碼下載:Dynamic Table Column Operate
    posted @ 2009-03-13 10:41 absolute 閱讀(84153) | 評論 (25)編輯 收藏

    1.搜索oracle安裝目錄,找到這倆個文件 tnsnames.ora 和 listener.ora ,還有一個大寫的TNSNAMES.ORA不用管它。他們的路徑如下:如 盤符:\oracle\ora92\network\admin  他們在同一個目錄里,編輯這倆個文件,把里面的Host= 的地方改為你的計算機名就行了。(注意有多個,看仔細了。或者改成IP,下次改了IP注意再修改要統一)

    2.如果這時登陸的話,肯定會提示你沒有監聽器,那是監聽的服務沒有開,到計算機的服務那進入服務的方法:控制面板-〉管理工具-〉服務(倆個齒輪的那個圖標),然后找到OracleOraHome92TNSListener這個服務,把它啟動了,就好了。

    posted @ 2009-02-09 10:16 absolute 閱讀(21051) | 評論 (11)編輯 收藏
    主站蜘蛛池模板: 国产精品成人观看视频免费| 污网站免费在线观看| 久久精品亚洲一区二区三区浴池| 精品亚洲综合久久中文字幕| 综合亚洲伊人午夜网 | 国产成人免费高清激情明星| 日韩精品久久久久久免费| 日韩免费电影网址| 国产精品网站在线观看免费传媒| 你好老叔电影观看免费| 成人免费区一区二区三区| 国产麻豆一精品一AV一免费| 免费91麻豆精品国产自产在线观看 | 亚洲av高清在线观看一区二区 | 久久影视综合亚洲| 亚洲欧洲国产精品香蕉网| 精品亚洲永久免费精品| 香蕉视频在线观看亚洲| 亚洲精品自在线拍| 亚洲人配人种jizz| 国产成人亚洲午夜电影| eeuss影院www天堂免费| 国产精品99精品久久免费| 久热中文字幕在线精品免费| 久久精品女人天堂AV免费观看| 日韩在线免费电影| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 免费在线观看黄色毛片| 国产亚洲一区区二区在线| 亚洲国产精品SSS在线观看AV| 亚洲综合激情九月婷婷| 国产精品亚洲午夜一区二区三区| 亚洲国产区男人本色| 一个人免费观看视频在线中文| 暖暖日本免费中文字幕| 成年网站免费视频A在线双飞| 免费国产美女爽到喷出水来视频| 亚洲中文字幕久久精品无码APP| 久久精品国产精品亚洲毛片| 亚洲另类无码专区首页| fc2免费人成在线|