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

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

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

    七郎's JavaBlog

    草木竹石皆可為劒。至人之用人若鏡,不將不迎,應而不藏,故能勝物而不傷。
    posts - 60, comments - 14, trackbacks - 0, articles - 0

    <base href="<?xml version="1.0" encoding="gb2312"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
    <html xmlns="<head>
    <title>DWMX Tutor --- A Simple Menu</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <script>// Example: obj = findObj("image1");
    function findObj(theObj, theDoc)
    {
      var p, i, foundObj;
     
      if(!theDoc) theDoc = document;
      if( (p = theObj.indexOf("?")) > 0 && parent.frames.length)
      {
        theDoc = parent.frames[theObj.substring(p+1)].document;
        theObj = theObj.substring(0,p);
      }
      if(!(foundObj = theDoc[theObj]) && theDoc.all) foundObj = theDoc.all[theObj];
      for (i=0; !foundObj && i < theDoc.forms.length; i++)
        foundObj = theDoc.forms[i][theObj];
      for(i=0; !foundObj && theDoc.layers && i < theDoc.layers.length; i++)
        foundObj = findObj(theObj,theDoc.layers[i].document);
      if(!foundObj && document.getElementById) foundObj = document.getElementById(theObj);
     
      return foundObj;
    }
    </script>
    <style type="text/css">
    <!--
    .folder {
        font-family: "Verdana", "Arial", "Helvetica", "sans-serif";
        font-size: 10px;
        background-image: url(e.gif);
        background-repeat: no-repeat;
        background-position: left;
        padding-left: 40px;
        cursor: hand;
    }
    .collapsedFolder {
        font-family: "Verdana", "Arial", "Helvetica", "sans-serif";
        font-size: 10px;
        background-image: url(c.gif);
        background-repeat: no-repeat;
        background-position: left;
        padding-left: 40px;
        cursor: hand;
    }
    .submenu {
        padding-left: 18px;
    }
    .iefile {
        background-image: url(ie.gif);
        background-repeat: no-repeat;
        background-position: left;
        padding-left: 20px;
        font-family: "Verdana", "Arial", "Helvetica", "sans-serif";
        font-size: 9px;
    }
    a {
        color: #003399;
        text-decoration: none;
        border: 1px solid #FFFFFF;
    }
    a:hover {
        color: #FF0000;
        background-color: #eeeeee;
        border: 1px solid #006699;
    }
    body {
        margin: 0px;
        background-color: buttonface;
        overflow: hidden;
        border: 0px;
    }
    .ctrlbar {
        border: 1px inset;
    }
    .explorer {
        background-color: #FFFFFF;
        border: 1px inset;
    }
    -->
    </style>
    <style type="text/css">
    <!--
    .ctbutton {
        font-family: Arial, Helvetica, sans-serif;
        font-size: 8px;
        background-color: #eeeeee;
        border-width: 1px;
        width: 9px;
        height: 100px;
        margin-bottom: 100px;
    }
    -->
    </style>
    <base target="browserframe"/>
    </head>

    <body>
    <table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td width="150" align="center" valign="top" class="explorer" id="menubar">
       
       </td>
        <td width="1" class="ctrlbar"><button class="ctbutton" onFocus="blur();" onMouseUp="with(findObj('menubar').style){display=display=='none'?'':'none';this.innerText=display=='none'?'>':'<'}" onMouseOver="this.style.backgroundColor='#ffffff'" onMouseOut="this.style.backgroundColor='#eeeeee'"><</button></td>
        <td class="explorer">
    <iframe name="browserframe" id="browserframe" width="100%" height="100%" scrolling="auto" frameborder="0">

    </iframe></td>
      </tr>
    </table>
    </body>
    </html>

    posted @ 2007-07-27 17:24 七郎歸來 閱讀(418) | 評論 (0)編輯 收藏

    create table t1(cid int,cname varchar2(100));
    insert into t1 values (1,'1');
    create table t2(cid int,cname varchar2(100));
    insert into t2 values(1,'3');       
    insert into t2 values(2,'4'); 


    MERGE INTO t1 a
          USING t2 b
        on (a.cid=b.cid)
        WHEN MATCHED  THEN
            UPDATE SET a.cname=b.cname
        WHEN NOT MATCHED THEN
            INSERT (a.cid,a.cname ) VALUES ( b.cid,b.cname );

    posted @ 2007-06-14 11:57 七郎歸來 閱讀(221) | 評論 (0)編輯 收藏

    public static void main(String[] args) throws Exception {
      // TODO Auto-generated method stub
      String perCode="sgyyfj123";
      Connection con;
      Statement stmt;
      ResultSet rs;
      Class.forName("oracle.jdbc.driver.OracleDriver");
      con = DriverManager.getConnection("jdbc:oracle:thin:@10.194.129.49:1521:test", "gdcrm", "gdcrm");
      stmt = con.createStatement();
      rs = stmt.executeQuery("select * from bbscs_userinfo where username='"+perCode+"'");
      if(rs.next()){
       System.out.print("有有有有有");
      }else{
       System.out.print("沒沒沒沒沒");
       stmt.execute("insert into bbscs_userinfo(ID,USERNAME,NICKNAME,PASSWD,REPASSWD,EMAIL,QUESTION,ANSWER,LOGINTIME,LOGOUTTIME,LOGINTIMES,POST,EXP,EXPRESSION,ARTICLENUM,STAYTIME,POWER,HPOWER) " +
         "values(BBSCS_USERINFO_SEQ.NEXTVAL,'"+perCode+"','"+perCode+"',000,000,'admin@crm.gdcrm.com.cn','admin','gdcrm',10,10,10,10,10,10,10,10,10,10)");
      }
       

    }

    posted @ 2007-05-18 17:04 七郎歸來 閱讀(253) | 評論 (0)編輯 收藏

    select count(distinct v_yjhm)
      from (select v_yjhm
              from zjjk_t_yssj_o_his a
             where n_yjzl > 0
               and d_sjrq between to_date('20070301', 'yyyymmdd') and
                   to_date('20070401', 'yyyymmdd')
               and v_yjzldm like '40%'
               and not exists(select 'a' from INST_TRIG_ZJJK_T_YSSJ_O b where a.v_yjtm=b.yjbh)
               --and v_yjtm not in (select yjbh from INST_TRIG_ZJJK_T_YSSJ_O)
            union
            select v_yjhm
              from zjjk_t_yssj_u_his a
             where n_yjzl > 0
               and d_sjrq between to_date('20070301', 'yyyymmdd') and
                   to_date('20070401', 'yyyymmdd')
               and v_yjzldm like '40%'
               and not exists(select 'a' from INST_TRIG_ZJJK_T_YSSJ_U b where a.v_yjtm=b.yjbh))
               --and v_yjtm not in (select yjbh from INST_TRIG_ZJJK_T_YSSJ_U))
     
    說明:1、zjjk_t_yssj_o_his 、zjjk_t_yssj_u_his  的d_sjrq 上都有一個索引了
             2、zjjk_t_yssj_o_his 、zjjk_t_yssj_u_his   的v_yjtm 都為 not null 字段
            3、INST_TRIG_ZJJK_T_YSSJ_O、INST_TRIG_ZJJK_T_YSSJ_U 的 yjbh 為PK
         
    優化建議:
    1、什么是DISTINCT ?   就是分組排序后取唯一值   ,底層行為  分組排序
    2、什么是 UNION 、 UNION ALL  ?  UNION : 對多個結果集取DISTINCT ,生成一個不含重復記錄的結果集,返回給前端,UNION ALL :不對結果集進行去重復操作     底層行為:分組排序
    3、什么是 COUNT(*)   ?   累加
    4、需要有什么樣的索引?   S_sjrq + v_yjzldm  : 理由: 假如全省的數據量在表中全部數為1000萬,查詢月數據量為200萬,1000萬中特快占50%, 則 通過 beween 時間(d_sjrq)+ 種類( v_yjzldm ),可過濾出約100萬,這是最好的檢索方式了。
    5、兩表都要進行一次 NOT EXISTS 運算,如何做最優?   NOT EXISTS 是不好做的運算,但是我們可以合并兩次的NOT EXISTS 運算。讓這費資源的活只干一次。
     
    綜合以上,我們可以如下優化這個SQL:
      1、內部的UNION 也是去重復,外部的DISTINCT 也是去重復,可左右去掉一個,建議內部的改為 UNION ALL , 這里稍請注意一下,如果V_YJHM 有NULL的情況,可能會引起COUNT值不對實際數的情況。
      2、建一個 D_SJRQ+V_YJZLDM 的復合索引
      3、將兩個子查詢先 UNION ALL 聯結 , 另兩個用來做 NOT EXISTS 的表也 UNION ALL  聯結
      4、在3的基礎上再做 NOT EXISTS
      5、將NOT EXISTS 替換為NOT IN ,同時加提示 HASH_AJ 做半連接HASH運算
      6、最后為外層的COUNT(DISTINCT … 獲得結果數
     
     
    SQL書寫如下:
    select count(distinct v_yjhm)
      from (select v_yjtm, v_yjhm
              from zjjk_t_yssj_o_his a
             where n_yjzl > 0
               and d_sjrq between to_date('20070301', 'yyyymmdd') and
                   to_date('20070401', 'yyyymmdd')
               and v_yjzldm like '40%'
            union all
            select v_yjtm, v_yjhm
              from zjjk_t_yssj_u_his a
             where n_yjzl > 0
               and d_sjrq between to_date('20070301', 'yyyymmdd') and
                   to_date('20070401', 'yyyymmdd')
               and v_yjzldm like '40%'
            ) a
     where a.v_yjtm not IN
           (select /*+ HASH_AJ */
             yjbh
              from (select yjbh
                      from INST_TRIG_ZJJK_T_YSSJ_O
                    union all
                    select yjbh from INST_TRIG_ZJJK_T_YSSJ_U))

    經過上述改造,原來這個SQL的執行時間如果為2分鐘的話,現在應該20秒足夠!

    posted @ 2007-04-28 10:47 七郎歸來 閱讀(584) | 評論 (0)編輯 收藏

    SELECT AVG(ticket_key) , ticket_title
    FROM srweb_ticket_ticket
    GROUP BY ticket_title

    以上這句是按照投票的標題排序,體現在GROUP BY ticket_title,執行完上序之后得出如下的結果
    328       蘋果
    328       葡萄
    327       西瓜

    如果加上having條件的話會出現如下的結果,having是出現在group by之后的條件的
    SELECT AVG(ticket_key) , ticket_title
    FROM srweb_ticket_ticket
    GROUP BY ticket_title having AVG(ticket_key)>327

    328       蘋果
    328       葡萄

    如果再加上where條件的話會出現下面的結果
    SELECT AVG(ticket_key) , ticket_title
    FROM srweb_ticket_ticket
    where ticket_title not in('葡萄') GROUP BY ticket_title having AVG(ticket_key)>327

    328       蘋果

    通過分析,式子。。首先是執行where條件去掉一些不滿足的,之后通過group by按照類型進行分組運算,之后在分組求了數的基礎上再用having去掉一些數據

    posted @ 2007-04-27 16:48 七郎歸來 閱讀(9404) | 評論 (1)編輯 收藏


    表操作

     

    例 1 對于表的教學管理數據庫中的表 STUDENTS ,可以定義如下:

       CREATE TABLE STUDENTS

       (SNO      NUMERIC (6, 0) NOT NULL

       SNAME    CHAR (8) NOT NULL

       AGE      NUMERIC(3,0)

       SEX      CHAR(2)

       BPLACE CHAR(20)

       PRIMARY KEY(SNO))

    例 2 對于表的教學管理數據庫中的表 ENROLLS ,可以定義如下:

            CREATE TABLE ENROLLS

            (SNO      NUMERIC(6,0) NOT NULL

            CNO     CHAR(4) NOT NULL

            GRADE   INT

            PRIMARY KEY(SNO,CNO)

            FOREIGN KEY(SNO) REFERENCES STUDENTS(SNO)

            FOREIGN KEY(CNO) REFERENCES COURSES(CNO)

            CHECK ((GRADE IS NULL) OR (GRADE BETWEEN 0 AND 100)))

    例 3 根據表的 STUDENTS 表,建立一個只包含學號、姓名、年齡的女學生表。

            CREATE TABLE GIRL

            AS SELECT SNO, SNAME, AGE

            FROM STUDENTS

            WHERE SEX=' 女 ';


     

    例 4 刪除教師表 TEACHER 。

            DROP TABLE TEACHER

    例 5 在教師表中增加住址列。

           ALTER TABLE TEACHERS

           ADD (ADDR CHAR(50))

    例 6 把 STUDENTS 表中的 BPLACE 列刪除,并且把引用 BPLACE 列的所有視圖和約束也一起刪除。

            ALTER TABLE STUDENTS

            DROP BPLACE CASCADE

    例 7 補充定義 ENROLLS 表的主關鍵字。

           ALTER TABLE ENROLLS

           ADD PRIMARY KEY (SNO,CNO) ;

     

    視圖操作(虛表)

     

    例 9 建立一個只包括教師號、姓名和年齡的視圖 FACULTY 。 ( 在視圖定義中不能包含 ORDER BY 子句 )

            CREATE VIEW FACULTY

            AS SELECT TNO, TNAME, AGE

            FROM TEACHERS

    例 10 從學生表、課程表和選課表中產生一個視圖 GRADE_TABLE , 它包括學生姓名、課程名和成績。

            CREATE VIEW GRADE_TABLE

            AS SELECT SNAME,CNAME,GRADE

            FROM STUDENTS,COURSES,ENROLLS

            WHERE STUDENTS.SNO = ENROLLS.SNO AND

            COURSES.CNO=ENROLLS.CNO

    例 11 刪除視圖 GRADE_TABLE

            DROP VIEW GRADE_TABLE RESTRICT

     

    索引操作

     

    例 12 在學生表中按學號建立索引。

            CREATE  UNIQUE  INDEX  ST

            ON STUDENTS (SNO,ASC)

    例 13 刪除按學號所建立的索引。

            DROP INDEX ST

     

    數據庫模式操作

     

    例 14 創建一個簡易教學數據庫的數據庫模式  TEACHING_DB ,屬主為 ZHANG 。

            CREATE SCHEMA TEACHING_DB  AUTHRIZATION  ZHANG

    例 15 刪除簡易教學數據庫模式 TEACHING_DB 。(( 1 )選用 CASCADE ,即當刪除數據庫模式時,則本數據庫模式和其下屬的基本表、視圖、索引等全部被刪除。( 2 )選用 RESTRICT ,即本數據庫模式下屬的基本表、視圖、索引等事先已清除,才能刪除本數據庫模式,否則拒絕刪除。)

            DROP SCHEMA TEACHING_DB CASCADE

    單表操作

     

    例 16 找出 3 個學分的課程號和課程名。

             SELECT CNO, CNAME

             FROM   COURSES

             WHERE   CREDIT = 3

    例 17 查詢年齡大于 22 歲的學生情況。

             SELECT *

             FROM   STUDENTS

             WHERE AGE > 22

    例 18   找出籍貫為河北的男生的姓名和年齡。

             SELECT SNAME, AGE

             FROM   STUDENTS

             WHERE   BPLACE = ' 河北 '  AND SEX = ' 男 '

    例 19 找出年齡在 20 ~ 23 歲之間的學生的學號、姓名和年齡,并按年齡升序排序。 (ASC (升序)或 DESC (降序)聲明排序的方式,缺省為升序。 )

             SELECT SNO, SNAME, AGE

             FROM   STUDENTS

             WHERE AGE BETWEEN 20 AND 23

             ORDER BY  AGE

    例 20 找出年齡小于 23 歲、籍貫是湖南或湖北的學生的姓名和性別。(條件比較運算符=、< 和邏輯運算符 AND (與),此外還可以使用的運算符有:>(大于)、>=(大于等于)、<=(小于等于)、<>(不等于)、 NOT (非)、 OR (或)等。

    謂詞 LIKE 只能與字符串聯用,常常是 “ <列名>  LIKE pattern” 的格式。特殊字符 “_” 和 “%” 作為通配符。

    謂詞 IN 表示指定的屬性應與后面的集合(括號中的值集或某個查詢子句的結果)中的某個值相匹配,實際上是一系列的 OR (或)的縮寫。謂詞 NOT IN 表示指定的屬性不與后面的集合中的某個值相匹配。

    謂詞 BETWEEN 是 “ 包含于 … 之中 ” 的意思。)

            SELECT SNAME, SEX

            FROM   STUDENTS

            WHERE AGE < 23 AND BPLACE LIKE' 湖% '

            或

            SELECT SNAME, SEX

            FROM   STUDENTS

            WHERE AGE < 23 AND BPLACE IN ( ' 湖南 ' , ' 湖北 ' )

    例 22 找出學生表中籍貫是空值的學生的姓名和性別。(在 SQL 中不能使用條件:<列名>= NULL 。在 SQL 中只有一個特殊的查詢條件允許查詢 NULL 值:)

           SELECT SNAME, SEX

           FROM   STUDENTS

           WHERE BPLACE IS NULL


     

    多表操作

     

    例 23 找出成績為 95 分的學生的姓名。(子查詢)

            SELECT SNAME

            FROM   STUDENTS

            WHERE   SNO =

                  (SELECT SNO

                   FROM   ENROLLS

                   WHERE GRADE = 95)

    例 24 找出成績在 90 分以上的學生的姓名。

           SELECT SNAME

            FROM   STUDENTS

            WHERE SNO IN

                    (SELECT SNO

                    FROM ENROLLS

                    WHERE GRADE > 90)

            或

            SELECT SNAME

            FROM   STUDENTS

            WHERE SNO = ANY

                    (SELECT SNO

                    FROM ENROLLS

                    WHERE GRADE > 90)

    例 25 查詢全部學生的學生名和所學課程號及成績。(連接查詢)

            SELECT SNAME, CNO, GRADE

            FROM   STUDENTS, ENROLLS

            WHERE STUDENTS.SNO = ENROLLS.SNO

    例 26 找出籍貫為山西或河北,成績為 90 分以上的學生的姓名、籍貫和成績。(當構造多表連接查詢命令時,必須遵循兩條規則。第一,連接條件數正好比表數少 1 (若有三個表,就有兩個連接條件 ) ;第二,若一個表中的主關鍵字是由多個列組成,則對此主關鍵字中的每一個列都要有一個連接條件(也有少數例外情況))

            SELECT SNAME, BPLACE, GRADE

            FROM   STUDENTS, ENROLLS

            WHERE BPLACE IN (‘ 山西 ’ , ‘ 河北 ’) AND GRADE >= 90 AND   STUDENTS.SNO=ENROLLS.SNO

    例 28 查出課程成績在 80 分以上的女學生的姓名、課程名和成績。( FROM 子句中的子查詢)

            SELECT SNAME,CNAME, GRADE

            FROM   (SELECT SNAME, CNAME , GRADE

                            FROM STUDENTS, ENROLLS,COURSES

                            WHERE SEX = ' 女 ')

            AS TEMP (SNAME, CNAME,GRADE)

            WHERE GRADE > 80

     

     

     

     

    表達式與函數的使用

     

    例 29 查詢各課程的學時數。(算術表達式由算術運算符+、-、 * 、/與列名或數值常量所組成。)

            SELECT CNAME,COURSE_TIME = CREDIT*16

            FROM   COURSES

    例 30 找出教師的最小年齡。(內部函數: SQL 標準中只使用 COUNT 、 SUM 、 AVG 、 MAX 、 MIN 函數,稱之為聚集函數( Set Function )。 COUNT 函數的結果是該列統計值的總數目, SUM 函數求該列統計值之和, AVG 函數求該列統計值之平均值, MAX 函數求該列最大值, MIN 函數求該列最小值。)

            SELECT MIN(AGE)

            FROM   TEACHERS

    例 31 統計年齡小于等于 22 歲的學生人數。(統計)

            SELECT COUNT(*)

            FROM   STUDENTS

            WHERE AGE < = 22

    例 32 找出學生的平均成績和所學課程門數。

            SELECT SNO, AVG(GRADE), COURSES = COUNT(*)

            FROM   ENROLLS

            GROUP BY SNO

     

    例 34 找出年齡超過平均年齡的學生姓名。

    SELECT SNAME

    FROM STUDENTS

    WHERE AGE >

          (SELECT AVG(AGE)

            FROM   STUDENTS)


     

    例 35 找出各課程的平均成績,按課程號分組,且只選擇學生超過 3 人的課程的成績。( GROUP BY 與 HAVING

            GROUP BY 子句把一個表按某一指定列(或一些列)上的值相等的原則分組,然后再對每組數據進行規定的操作。

            GROUP BY 子句總是跟在 WHERE 子句后面,當 WHERE 子句缺省時,它跟在 FROM 子句后面。

            HAVING 子句常用于在計算出聚集之后對行的查詢進行控制。)

             SELECT CNO, AVG(GRADE), STUDENTS = COUNT(*)

             FROM ENROLLS

             GROUP BY CNO

             HAVING COUNT(*) >= 3

     

    相關子查詢

     

    例 37 查詢沒有選任何課程的學生的學號和姓名。(當一個子查詢涉及到一個來自外部查詢的列時,稱為相關子查詢( Correlated Subquery) 。相關子查詢要用到存在測試謂詞 EXISTS 和 NOT EXISTS ,以及 ALL 、 ANY ( SOME )等。)

            SELECT SNO, SNAME

            FROM   STUDENTS

            WHERE NOT EXISTS

                  (SELECT *

                  FROM ENROLLS

                  WHERE ENROLLS.SNO=STUDENTS.SNO)

    例 38   查詢哪些課程只有男生選讀。

            SELECT DISTINCT CNAME

            FROM   COURSES C

            WHERE ' 男 ' = ALL

                   (SELECT SEX

                    FROM ENROLLS , STUDENTS

                    WHERE ENROLLS.SNO=STUDENTS.SNO AND

                          ENROLLS.CNO=C.CNO)

    例 39 要求給出一張學生、籍貫列表,該表中的學生的籍貫省份,也是其他一些學生的籍貫省份。

            SELECT SNAME, BPLACE

            FROM   STUDENTS A

            WHERE EXISTS

                   (SELECT *

                     FROM STUDENTS B

                     WHERE A.BPLACE=B.BPLACE AND

                           A.SNO < > B.SNO)


     

     

    例 40 找出選修了全部課程的學生的姓名。

            本查詢可以改為:查詢這樣一些學生,沒有一門課程是他不選修的。

            SELECT SNAME

            FROM   STUDENTS

            WHERE NOT EXISTS

                   (SELECT *

                    FROM COURSES

                    WHERE NOT EXISTS

                            (SELECT *

                             FROM ENROLLS

                             WHERE ENROLLS.SNO = STUDENTS.SNO

                                 AND ENROLLS.CNO = COURSES.CNO))

    關系代數運算

     

    例 41 設有某商場工作人員的兩張表:營業員表 SP_SUBORD 和營銷經理表 SP_MGR ,其關系數據模式如下:

            SP_SUBORD (SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICE)

            SP_MGR (SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICE)

            其中,屬性 SALPERS_ID 為工作人員的編號 , SALPERS_NAME 為工作人員的姓名 , MANAGER_ID 為所在部門經理的編號 , OFFICE 為工作地點。

    若查詢全部商場工作人員,可以用下面的 SQL 語句:

            (SELECT * FROM SP_SUBORD)

            UNION

            (SELECT * FROM SP_MGR)

            或等價地用下面的 SQL 語句:

            SELECT *

            FROM (TABLE SP_SUBORD UNION TABLE SP_MGR)

    ( 2 ) INTERSECT

             (SELECT * FROM SP_SUBORD)

             INTERSECT

             (SELECT * FROM SP_MGR)

            或等價地用下面的 SQL 語句:

            SELECT *

            FROM (TABLE SP_SUBORD INTERSECT TABLE SP_MGR)

            或用帶 ALL 的 SQL 語句:

            (SELECT * FROM SP_SUBORD)

           INTERSECT ALL

            (SELECT * FROM SP_MGR)

            或

            SELECT *

            FROM (TABLE SP_SUBORD INTERSECT ALL TABLE SP_MGR)

    ( 3 ) EXCEPT

            (SELECT * FROM SP_MGR)

            EXCEPT

            (SELECT * FROM SP_SUBORD)

            或等價地用下面的 SQL 語句:

            SELECT *

            FROM (TABLE SP_MGR EXCEPT TABLE SP_ SUBORD)

            或用帶 ALL 的 SQL 語句:

            (SELECT * FROM SP_MGR)

            EXCEPT ALL

            (SELECT * FROM SP_SUBORD)

    例 42 查詢籍貫為四川、課程成績在 80 分以上的學生信息及其成績。(自然連接)

            (SELECT * FROM STUDENTS

             WHERE BPLACE=‘ 四川 ’)

            NATURAL JOIN

            (SELECT * FROM ENROLLS

             WHERE GRADE >=80)

    例3.43          列出全部教師的姓名及其任課的課程號、班級。

    (外連接與外部并外連接允許在結果表中保留非匹配元組,空缺部分填以 NULL 。外連接的作用是在做連接操作時避免丟失信息。

            外連接有 3 類:

    ( 1 )左外連接( Left Outer Join )。連接運算謂詞為 LEFT [OUTER] JOIN ,其結果表中保留左關系的所有元組。

    ( 2 )右外連接( Right Outer Join )。連接運算謂詞為 RIGHT [OUTER] JOIN ,其結果表中保留右關系的所有元組。

    ( 3 )全外連接( Full Outer Join )。連接運算謂詞為 FULL [OUTER] JOIN ,其結果表中保留左右兩關系的所有元組。)

              SELECT TNAME, CNO, CLASS

              FROM TEACHERS LEFT OUTER JOIN TEACHING USING (TNO)

     

    SQL 的數據操縱

     

    例 44 把教師李映雪的記錄加入到教師表 TEACHERS 中。(插入)

            INSERT INTO TEACHERS

            VALUES(1476 , ' 李映雪 ' , 44 , ' 副教授 ')

    例 45 成績優秀的學生將留下當教師。

            INSERT INTO TEACHERS (TNO , TNAME)

            SELECT DISTINCT SNO , SNAME

            FROM   STUDENTS , ENROLLS

            WHERE STUDENTS.SNO = ENROLLS.SNO AND GRADE >= 90

    例 47 把所有學生的年齡增加一歲。(修改)

            UPDATE STUDENTS

            SET AGE = AGE+1

    例 48 學生張春明在數據庫課考試中作弊,該課成績應作零分計。

            UPDATE ENROLLS

            SET GRADE = 0

            WHERE CNO = 'C1' AND

                 ' 張春明 ' =

                 (SELECT SNAME

                 FROM STUDENTS

                 WHERE STUDENTS.SNO=ENROLLS.SNO)

    例 49 從教師表中刪除年齡已到 60 歲的退休教師的數據。(刪除)

            DELETE FROM TEACHERS

            WHERE AGE >= 60

     

    SQL 的數據控制

     

    例 50 授予 LILI 有對表 STUDENTS 的查詢權。(表/視圖特權的授予

            一個 SQL 特權允許一個被授權者在給定的數據庫對象上進行特定的操作。授權操作的數據庫對象包括:表 / 視圖、列、域等。授權的操作包括: INSERT 、 UPDATE 、 DELETE 、 SELECT 、 REFERENCES 、 TRIGGER 、 UNDER 、 USAGE 、 EXECUTE 等。其中 INSERT 、 UPDATE 、 DELETE 、 SELECT 、 REFERENCES 、 TRIGGER 有對表做相應操作的權限,故稱為表特權。)

            GRANT SELECT ON STUDENTS

            TO LILI

            WITH GRANT OPTION

    例 51 取消 LILI 的存取 STUDENTS 表的特權。

            REVOKE ALL

            ON STUDENTS

            FROM LILI CASCADE

     


    不斷補充中:
    1.  模糊查找:
    它判斷列值是否與指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等類型查詢。
      可使用以下通配字符:
      百分號%:可匹配任意類型和長度的字符,如果是中文,請使用兩個百分號即%%。
      下劃線_:匹配單個任意字符,它常用來限制表達式的字符長度。
      方括號[]:指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個。[^]:其取值也[] 相同,但它要求所匹配對象為指定字符以外的任一個字符。
       例如:
      限制以Publishing結尾,使用LIKE '%Publishing'
      限制以A開頭:LIKE '[A]%'
      限制以A開頭外:LIKE '[^A]%'

    2.更改表格 
             ALTER TABLE table_name 
            ADD COLUMN column_name DATATYPE 
            說明:增加一個欄位(沒有刪除某個欄位的語法。)
            ALTER TABLE table_name
            ADD PRIMARY KEY (column_name)
            說明:更改表得的定義把某個欄位設為主鍵。
            ALTER TABLE table_name
            DROP PRIMARY KEY (column_name)
            說明:把主鍵的定義刪除。

    3.group by

    在select 語句中可以使用group by 子句將行劃分成較小的組,然后,使用聚組函數返回每一個組的匯總信息,另外,可以使用having子句限制返回的結果集。group by 子句可以將查詢結果分組,并返回行的匯總信息Oracle 按照group by 子句中指定的表達式的值分組查詢結果。

    在帶有group by 子句的查詢語句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚組函數

    select max(sal),job emp group by job;
    (注意max(sal),job的job并非一定要出現,但有意義)

    查詢語句的select 和group by ,having 子句是聚組函數唯一出現的地方,在where 子句中不能使用聚組函數。

    select deptno,sum(sal) from emp where sal>1200 group by deptno having sum(sal)>8500 order by deptno;

    當在gropu by 子句中使用having 子句時,查詢結果中只返回滿足having條件的組。在一個sql語句中可以有where子句和having子句。having 與where 子句類似,均用于設置限定條件

    where 子句的作用是在對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾數據,條件中不能包含聚組函數,使用where條件顯示特定的行。
    having 子句的作用是篩選滿足條件的組,即在分組之后過濾數據,條件中經常包含聚組函數,使用having 條件顯示特定的組,也可以使用多個分組標準進行分組。

    查詢每個部門的每種職位的雇員數
    select deptno,job,count(*) from emp group by deptno,job;

    4.外連接與內連接

    有時候,即使在連接的表中沒有相應的行,用戶可能想從一張表中看數據,Oracle提供了外連接實現該功能。
    內連接是指連接查詢只顯示完全滿足連接條件的記錄,即等值連接,外連接的查詢結果是內連接查詢結果的擴展。外連接不僅返回滿足連接條件的所有記錄而且也返回了一個表中那些在另一個表中沒有匹配行的記錄。外連接的操作符是“+”。“+”號放在連接條件中信息不完全的那一邊(即沒有相應行的那一邊)。運算符“+”影響NULL行的建立。建一行或多行NULL來匹配連接的表中信息完全的行。

    外連接運算符“+”只能出現在where子句中表達式的一邊。

    假如在多張表之間有多個連接條件,外連接運算符不能使用or,in邏輯運算符與其它條件組合。


    假如emp表中deptno=10的ename為空值,dept表中deptno=20的loc為空值:

    1.

    select
    ename,dept.deptno,loc
    from
    emp,dept
    where
    emp.depno(+)=dept.deptno;

    如果在dept.deptno中有的數值在emp.deptno中沒有值,則在做外連接時,
    結果中ename會產生一個空值。(emp.deptno=10)

    2.

    select
    ename,dept.deptno,loc
    from
    emp,dept
    where
    emp.depno=dept.deptno(+);

    如果在emp.deptno中有的數值在dept.deptno中沒有值,則在做外連接時,
    結果中loc會產生一個空值。。(dept.deptno=20)


    5.自連接

    自連接是指同一張表的不同行間的連接。該連接不受其他表的影響。用自連接可以比較同一張表中不同行的某一列的值。因為自連接查詢僅涉及到某一張表與其自身的連接。所以在from子句中該表名出現兩次,分別用兩個不同的別名表示,兩個別名當作兩張不同的表進行處理,與其它的表連接一樣,別名之間也使用一個或多個相關的列連接。為了區分同一張表的不同行的列,在名前永別名加以限制。

    select
    worker.ename,
    manager.ename manager
    from
    emp worker,
    emp manager
    where
    work.mgr=manager.empno;

    6.集合運算

    基合運算符可以用于從多張表中選擇數據。

    ①UNION運算
    用于求兩個結果集合的并集(兩個結果集合的所有記錄),并自動去掉重復行。

    select ename,sal from account where sal>2000
    union
    select ename,sal from research where sal>2000
    union
    select ename,sal from sales where sal>2000;

    注:ename,sal 是必須一致的。

    ②UNION ALL運算
    用于求兩個結果集合的并集(兩個結果集中的所有記錄),并且不去掉重復行。

    select ename,sal from account where sal>2000
    union
    select ename,sal from research where sal>2000
    union
    select ename,sal from sales where sal>2000;

    ③INTERSECT運算
    intersect運算返回查詢結果中相同的部分。

    各部門中有哪些相同的職位?

    select Job from account
    intersect
    select Job from research
    intersect
    select Job from sales;


    ④MINUS運算
    minus返回兩個結果集的差集。(在第一個結果集中存在的,而在第二個結果集中不存在的行。)

    有那些職位是財務部中有,而在銷售部門中沒有?

    select Job from account
    minus
    select Job from sales;

    posted @ 2007-04-26 10:33 七郎歸來 閱讀(667) | 評論 (0)編輯 收藏

    為了大家更容易理解我舉出的SQL語句,本文假定已經建立了一個學生成績管理數據庫,全文均以學生成績的管理為例來描述。

      1.在查詢結果中顯示列名:

      a.用as關鍵字:select name as '姓名' from students order by age

      b.直接表示:select name '姓名' from students order by age

      2.精確查找:

      a.用in限定范圍:select * from students where native in ('湖南', '四川')

      b.between...and:select * from students where age between 20 and 30

      c.“=”:select * from students where name = '李山'

      d.like:select * from students where name like '李%' (注意查詢條件中有“%”,則說明是部分匹配,而且還有先后信息在里面,即查找以“李”開頭的匹配項。所以若查詢有“李”的所有對象,應該命令:'%李%';若是第二個字為李,則應為'_李%'或'_李'或'_李_'。)

      e.[]匹配檢查符:select * from courses where cno like '[AC]%' (表示或的關系,與"in(...)"類似,而且"[]"可以表示范圍,如:select * from courses where cno like '[A-C]%')

      3.對于時間類型變量的處理

      a.smalldatetime:直接按照字符串處理的方式進行處理,例如:
    select * from students where birth > = '1980-1-1' and birth <= '1980-12-31'

      4.集函數

      a.count()求和,如:select count(*) from students (求學生總人數)

      b.avg(列)求平均,如:select avg(mark) from grades where cno=’B2’

      c.max(列)和min(列),求最大與最小

      5.分組group

      常用于統計時,如分組查總數:

      select gender,count(sno)

      from students

      group by gender

      (查看男女學生各有多少)

      注意:從哪種角度分組就從哪列"group by"

      對于多重分組,只需將分組規則羅列。比如查詢各屆各專業的男女同學人數 ,那么分組規則有:屆別(grade)、專業(mno)和性別(gender),所以有"group by grade, mno, gender"

      select grade, mno, gender, count(*)

      from students

      group by grade, mno, gender

      通常group還和having聯用,比如查詢1門課以上不及格的學生,則按學號(sno)分類有:

      select sno,count(*) from grades

      where mark<60

      group by sno

      having count(*)>1

      6.UNION聯合

      合并查詢結果,如:

      SELECT * FROM students

      WHERE name like ‘張%’

      UNION [ALL]

      SELECT * FROM students

      WHERE name like ‘李%’

      7.多表查詢

      a.內連接

      select g.sno,s.name,c.coursename

      from grades g JOIN students s ON g.sno=s.sno

      JOIN courses c ON g.cno=c.cno

      (注意可以引用別名)

      b.外連接

      b1.左連接

      select courses.cno,max(coursename),count(sno)

      from courses LEFT JOIN grades ON courses.cno=grades.cno

      group by courses.cno

      左連接特點:顯示全部左邊表中的所有項目,即使其中有些項中的數據未填寫完全。

      左外連接返回那些存在于左表而右表中卻沒有的行,再加上內連接的行。

      b2.右連接

      與左連接類似

      b3.全連接

      select sno,name,major

      from students FULL JOIN majors ON students.mno=majors.mno

      兩邊表中的內容全部顯示

      c.自身連接

      select c1.cno,c1.coursename,c1.pno,c2.coursename

      from courses c1,courses c2 where c1.pno=c2.cno

      采用別名解決問題。

      d.交叉連接

      select lastname+firstname from lastname CROSS JOIN firstanme

      相當于做笛卡兒積

    posted @ 2007-04-26 10:26 七郎歸來 閱讀(185) | 評論 (0)編輯 收藏

    在前人的基礎上,我對比較優秀的sql語句進行了重新的編輯和整理,力求精短易學。希望大家可以舉一反三,更好學習sql語句,如果有問題,還請翻閱相關書籍。下列語句部分是Mssql語句,不可以在access中使用。
    注:搜集來自網絡,為了方便查詢,我將此文發在我的網站里http://www.ekuaiji.com/articleDetail.asp?id=529,隨時更新。
    歡迎大家發帖,接龍!

    SQL分類:
    DDL—數據定義語言(CREATE,ALTER,DROP,DECLARE)
    DML—數據操縱語言(SELECT,DELETE,UPDATE,INSERT)
    DCL—數據控制語言(GRANT,REVOKE,COMMIT,ROLLBACK)

    首先,簡要介紹基礎語句:
    1、說明:創建數據庫
    CREATE DATABASE database-name
    2、說明:刪除數據庫
    drop database dbname
    3、說明:備份sql server
    --- 創建 備份數據的 device
    USE master
    EXEC sp_addumpdevice 'disk', 'testBack',  'c:\mssql7backup\MyNwind_1.dat'
    --- 開始 備份
    BACKUP DATABASE pubs TO testBack  
    4、說明:創建新表
    create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
    根據已有的表創建新表:
       A:create table tab_new like tab_old (使用舊表創建新表)
       B:create table tab_new as select col1,col2… from tab_old definition only
    5、說明:刪除新表drop table tabname
    6、說明:增加一個列
    Alter table tabname add column col type
    注:列增加后將不能刪除。DB2中列加上后數據類型也不能改變,唯一能改變的是增加varchar類型的長度。
    7、說明:添加主鍵: Alter table tabname add primary key(col)
    說明:刪除主鍵: Alter table tabname drop primary key(col)
    8、說明:創建索引:create [unique] index idxname on tabname(col….) 
    刪除索引:drop index idxname
    注:索引是不可更改的,想更改必須刪除重新建。
    9、說明:創建視圖:create view viewname as select statement
    刪除視圖:drop view viewname
    10、說明:幾個簡單的基本的sql語句
    選擇:select * from table1 where 范圍
    插入:insert into table1(field1,field2) values(value1,value2)
    刪除:delete from table1 where 范圍
    更新:update table1 set field1=value1 where 范圍
    查找:select * from table1 where field1 like ’%value1%’ ---like的語法很精妙,查資料!
    排序:select * from table1 order by field1,field2 [desc]
    總數:select count(*) as totalcount from table1
    求和:select sum(field1) as sumvalue from table1
    平均:select avg(field1) as avgvalue from table1
    最大:select max(field1) as maxvalue from table1
    最小:select min(field1) as minvalue from table1
    11、說明:幾個高級查詢運算詞
    A: UNION 運算符
    UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)并消去表中任何重復行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
    B: EXCEPT 運算符
    EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。 
    C: INTERSECT 運算符
    INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。
    注:使用運算詞的幾個查詢結果行必須是一致的。
    12、說明:使用外連接
    A、left outer join:
    左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。
    B:right outer join:
    右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。
    C:full outer join:
    全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。


    其次,大家來看一些不錯的sql語句
    1、說明:復制表(只復制結構,源表名:a 新表名:b) (Access可用)
    法一:select * into b from a where 1<>1
    法二:select top 0 * into b from a

    2、說明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)
    insert into b(a, b, c) select d,e,f from b;

    3、說明:跨數據庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)
    insert into b(a, b, c) select d,e,f from b in ‘具體數據庫’  where 條件
    例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..

    4、說明:子查詢(表名1:a 表名2:b)
    select a,b,c from a where a IN (select d from b )  或者:  select a,b,c from a where a IN (1,2,3)

    5、說明:顯示文章、提交人和最后回復時間
    select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

    6、說明:外連接查詢(表名1:a 表名2:b)
    select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

    7、說明:在線視圖查詢(表名1:a )
    select * from (SELECT a,b,c FROM a) T where t.a > 1;

    8、說明:between的用法,between限制查詢數據范圍時包括了邊界值,not between不包括
    select * from table1 where time between time1 and time2
    select a,b,c, from table1 where a not between 數值1 and 數值2

    9、說明:in 的使用方法
    select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

    10、說明:兩張關聯表,刪除主表中已經在副表中沒有的信息
    delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

    11、說明:四表聯查問題:
    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

    12、說明:日程安排提前五分鐘提醒
    SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5

    13、說明:一條sql 語句搞定數據庫分頁
    select top 10 b.* from (select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主鍵字段 = a.主鍵字段 order by a.排序字段

    14、說明:前10條記錄
    select top 10 * form table1 where 范圍

    15、說明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用于論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.)
    select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

    16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重復行而派生出一個結果表
    (select a from tableA ) except (select a from tableB) except (select a from tableC)

    17、說明:隨機取出10條數據
    select top 10 * from tablename order by newid()

    18、說明:隨機選擇記錄
    select newid()

    19、說明:刪除重復記錄
    Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

    20、說明:列出數據庫里所有的表名
    select name from sysobjects where type='U'

    21、說明:列出表里的所有的
    select name from syscolumns where id=object_id('TableName')

    22、說明:列示type、vender、pcs字段,以type字段排列,case可以方便地實現多重選擇,類似select 中的case。
    select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
    顯示結果:
    type  vender   pcs
    電腦   A        1
    電腦   A        1
    光盤   B        2
    光盤   A        2
    手機   B        3
    手機   C        3

    23、說明:初始化表table1
    TRUNCATE TABLE table1

    24、說明:選擇從10到15的記錄
    select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc

    posted @ 2007-04-26 10:25 七郎歸來 閱讀(162) | 評論 (0)編輯 收藏

    Oracle高級查詢

    使用Oracle特有的查詢語法, 可以達到事半功倍的效果

    1. 樹查詢
    create table tree (
        id 
    number(10not null primary key,
        name 
    varchar2(100not null,
        super 
    number(10not null                // 0 is root
    );
    -- 從子到父
    select * from tree start with id = ? connect by id = prior super 
    -- 從父到子
    select * from tree start with id = ? connect by prior id = suepr
    -- 整棵樹
    select * from tree start with super = 0 connect by prior id = suepr

    2. 分頁查詢
    select * from ( 
        
    select my_table.*, rownum  my_rownum from ( 
            
    select name, birthday from employee order by birthday
        ) my_table 
    where rownum < 120 
    where my_rownum >= 100;

    3. 累加查詢, 以scott.emp為例
    select empno, ename, sal, sum(sal) over(order by empno) result from emp;
     
         EMPNO ENAME             SAL     RESULT
    ---------- ---------- ---------- ----------
          7369 SMITH             800        800
          
    7499 ALLEN            1600       2400
          
    7521 WARD             1250       3650
          
    7566 JONES            2975       6625
          
    7654 MARTIN           1250       7875
          
    7698 BLAKE            2850      10725
          
    7782 CLARK            2450      13175
          
    7788 SCOTT            3000      16175
          
    7839 KING             5000      21175
          
    7844 TURNER           1500      22675
          
    7876 ADAMS            1100      23775
          
    7900 JAMES             950      24725
          
    7902 FORD             3000      27725
          
    7934 MILLER           1300      29025

    4. 高級group by
    select decode(grouping(deptno),1,'all deptno',deptno) deptno,
           decode(
    grouping(job),1,'all job',job) job,
           
    sum(sal) sal
    from emp 
    group by ROLLUP(deptno,job);
    DEPTNO                                   JOB              SAL
    ---------------------------------------- --------- ----------
    10                                       CLERK           1300
    10                                       MANAGER         2450
    10                                       PRESIDENT       5000
    10                                       all job         8750
    20                                       CLERK           1900
    20                                       ANALYST         6000
    20                                       MANAGER         2975
    20                                       all job        10875
    30                                       CLERK            950
    30                                       MANAGER         2850
    30                                       SALESMAN        5600
    30                                       all job         9400
    all deptno                               all job        29025

    5. use hint
    當多表連接很慢時,用ORDERED提示試試,也許會快很多
    SELECT /*+ ORDERED */* 
      
    FROM a, b, c, d 
     
    WHERE  

    posted @ 2007-04-26 10:16 七郎歸來 閱讀(351) | 評論 (0)編輯 收藏

    用hibernate封裝oracle的clob類型操作起來很不方便,但是新的oracle10g的jdbc驅動,對此有很多改進。

    環境 :wodows2000、oracle9.2、oracle10gJDBC驅動(必須)、hibernate3.1.2

    oracle官方網站的clob操作方法:http://www.oracle.com/technology/sample_code/tech/java/codesnippet/jdbc/clob10g/ClobManipulationIn10g.java.html

    建表腳本:

    /*==============================================================*/
    /* Table: StoreFile                                             */
    /*==============================================================*/
    create table StoreFile  (
       uuid                 VARCHAR2(128)                   not null,
       name                 VARCHAR2(200),
       text                 CLOB,
       constraint PK_STOREFILE primary key (uuid)
    );

    hibernate.cfg.xml:(注意多了個SetBigStringTryClob設置,其它沒有什么特殊的了

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "
    http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <property name="hibernate.cglib.use_reflection_optimizer">true</property>
            <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
            <property name="hibernate.connection.password">java</property>
            <property name="hibernate.connection.url">jdbc:oracle:thin:@10.128.4.69:1521:kf</property>
            <property name="hibernate.connection.username">java</property>
            <property name="hibernate.connection.SetBigStringTryClob">true</property>
            <property name="hibernate.cache.provider_class">org.hibernate.cache.OSCacheProvider</property>
            <property name="hibernate.show_sql">true</property>
            <property name="hibernate.format_sql">true</property>
            <property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property>
            <mapping resource="com/study/database/hb/map/File.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>

    File.hbm.xml文件

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "
    http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 2006-3-13 17:57:00 by Hibernate Tools 3.1.0.beta4 -->
    <hibernate-mapping>
        <class name="com.study.database.hb.map.File" table="StoreFile" batch-size="0">
            <id name="uuid" type="string">
                <column name="UUID" length="128" />
                <generator class="uuid.hex"></generator>
            </id>
            <property name="name" type="string" lazy="false">
                <column name="NAME" length="200"/>
            </property>
            <property name="file" type="string" lazy="false">
                <column name="text" />
            </property>
        </class>
    </hibernate-mapping>

    File.java文件

    package com.study.database.hb.map;
    // Generated 2006-3-13 17:57:00 by Hibernate Tools 3.1.0.beta4

    import java.sql.Clob;
    /**
     * File generated by hbm2java
     */

    public class File
        implements java.io.Serializable
    {
      // Fields

      private String uuid;
      private String name;
      private String file;
      // Constructors

      /** default constructor */
      public File()
      {
      }
      /** full constructor */
      public File(String name,String file)
      {
        this.name=name;
        this.file=file;
      }
      // Property accessors

      public String getUuid()
      {
        return this.uuid;
      }
      public void setUuid(String uuid)
      {
        this.uuid=uuid;
      }
      public String getName()
      {
        return this.name;
      }
      public void setName(String name)
      {
        this.name=name;
      }
      public String getFile()
      {
        return this.file;
      }
      public void setFile(String file)
      {
        this.file=file;
      }
    }
    //比以前特殊的地方是hibernate.cfg.xml多了個SetBigStringTryClob設置。

    //把clob映射成string類型,這樣在多過4000個字符時也不會出錯了。操作方法和普通的string類型一樣。 

    posted @ 2007-04-16 15:37 七郎歸來 閱讀(1930) | 評論 (0)編輯 收藏

    僅列出標題
    共6頁: 上一頁 1 2 3 4 5 6 下一頁 
    主站蜘蛛池模板: 国产情侣久久久久aⅴ免费| 999国内精品永久免费观看 | 久久亚洲精品AB无码播放| 巨波霸乳在线永久免费视频| 亚洲色成人WWW永久在线观看| 免费一级毛片在线观看| 久久国产精品免费观看| 亚洲中文字幕无码一去台湾| 色噜噜噜噜亚洲第一| 亚洲精品乱码久久久久66| 毛片免费全部播放一级| 久久国产精品免费| 亚洲一区二区三区四区视频 | 一级特黄a免费大片| 久久久无码精品亚洲日韩京东传媒| 成人免费视频试看120秒| 99久久婷婷免费国产综合精品| 亚洲大尺码专区影院| 亚洲精品成人在线| 亚色九九九全国免费视频| 一级做a爰性色毛片免费| 亚洲入口无毒网址你懂的| 国产亚洲午夜高清国产拍精品| 美女视频黄a视频全免费| 中国精品一级毛片免费播放| 亚洲乱理伦片在线观看中字| 亚洲av无码成人黄网站在线观看| 国产麻豆免费观看91| 中国xxxxx高清免费看视频| www在线观看免费视频| 亚洲午夜理论片在线观看| 久久亚洲国产视频| 亚洲天堂中文字幕在线| 国产免费人成视频在线观看| 免费观看激色视频网站bd| a级毛片免费播放| 免费无码专区毛片高潮喷水| 亚洲精品无码久久久久久| 亚洲综合小说久久另类区| 亚洲精品无码成人AAA片| 亚洲精品高清在线|