七郎's JavaBlog

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

<base href="http://www.blueidea.com/articleimg/2003/09/804/">
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<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 七郎归来 阅读(414) | 评论 (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 七郎归来 阅读(220) | 评论 (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 七郎归来 阅读(249) | 评论 (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 七郎归来 阅读(581) | 评论 (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 七郎归来 阅读(9397) | 评论 (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 七郎归来 阅读(664) | 评论 (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 七郎归来 阅读(181) | 评论 (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 七郎归来 阅读(160) | 评论 (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 七郎归来 阅读(348) | 评论 (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 七郎归来 阅读(1925) | 评论 (0)编辑 收藏

仅列出标题
共6页: 上一页 1 2 3 4 5 6 下一页