??xml version="1.0" encoding="utf-8" standalone="yes"?>
MyEclipse 7.1 的安装目录结构如下:
view plaincopy to clipboardprint?
1. Genuitec
2. ├─Common
3. ?nbsp; ├─configuration
4. ?nbsp; ├─features
5. ?nbsp; └─plugins
6. └─MyEclipse 7.1
7. ├─configuration
8. └─dropins
1. Genuitec
2. ├─Common
3. ?nbsp; ├─configuration
4. ?nbsp; ├─features
5. ?nbsp; └─plugins
6. └─MyEclipse 7.1
7. ├─configuration
8. └─dropins 最新的插g安装方式Q要求将插g安装在上图中的dropins节点。ƈ且要求以如下l构安装
dropins-->插g文g?可由安装者定?-->eclipse-->plugins+features
例如Q我以fat插g作ؓ安装CZQ目录结构图如下Q?
view plaincopy to clipboardprint?
1. Genuitec
2. ├─Common
3. ?nbsp; ├─configuration
4. ?nbsp; ├─features
5. ?nbsp; └─plugins
6. └─MyEclipse 7.1
7. ├─configuration
8. └─dropins
9. └─fat
10. └─eclipse
11. ├─features
12. └─plugins
13. └─net.sf.fjep.fatjar_0.0.31(插g)
1. Genuitec
2. ├─Common
3. ?nbsp; ├─configuration
4. ?nbsp; ├─features
5. ?nbsp; └─plugins
6. └─MyEclipse 7.1
7. ├─configuration
8. └─dropins
9. └─fat
10. └─eclipse
11. ├─features
12. └─plugins
13. └─net.sf.fjep.fatjar_0.0.31(插g) 安装好后重新启动MyEclipse7 .1 ,插g的效果就出来?-当然前提是你的插件支持当前eclipse版本?
本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/guo_rui22/archive/2009/07/07/4327539.aspx
提示Q新下蝲的插件PlugIn一定不要都攑֜原始的Eclipse目录下去Q一大堆Q篏MQ(
比如QE:\OpenSource\Eclipse\PlugInsNew
那么在%ECLIPSE_HOME%\PlugInsNew\目录下徏立XYZ目录Q目录里面是eclipse目录Qeclipse目录包含有features与plugins两个子目录;l构如下图所C:
%ECLIPSE_HOME%\PlugInsNew\XYZ\eclipse\features
%ECLIPSE_HOME%\PlugInsNew\ XYZ\eclipse\plugins
然后?ECLIPSE_HOME%\links目录里徏立一个XYZ.link的文?/p>
内容如是Q?/p>
path=E:/OpenSource/Eclipse/PlugInsNew/XYZ
׃行这L路径指示而已?/p>
q样Q如果你下蝲了多个插件就可以如法炮制建立多个Link文gQ想加蝲哪个插g把哪个插g的Link文g攑ֈ%ECLIPSE_HOME%\links的目录中卛_Q用与理都很方便Q徏议千万不要放在默认的安装目录中,q样对于升Eclipseȝ序也方便一些;当然如果你喜Ƣ用Find and Install…q行安装的话也可以的Q?/p>
如果上面你的%ECLIPSE_HOME%与此不同Q请修改XYZ.link文g里的路径?/p>
删除%ECLIPSE_HOME%\links\XYZ.link文g卛_
删除%ECLIPSE_HOME%\PlugInsNew\XYZ整个目录及文?/p>
dba_extents 数据库中包括所有分?/p>
dba_free_space 所有表I间中自由分?/p>
dba_indexes 数据库中所有烦引的描述
dba_ind_columns 在所有表及聚族上压羃索引的列
dba_objects 数据库中所有的对象
dba_rollback_segs 回滚D늚描述
dba_segments 为所有数据库D分配的存储I间
dba_sequences 数据库中所有顺序书的描q?/p>
dba_synonyms 数据库中所有同义词
dba_tables 数据库中所有表的描q?/p>
dba_tablespaces 数据库中所有表I间的描q?/p>
dba_tab_columns 所有表描述、视图以及聚族的?/p>
dba_tab_grants 数据库中对象所授的权限
dba_tab_privs 数据库中对象所授的权限
dba_ts_quotas 所有用戯I间限额
dba_users 关于数据库的所有用户信?/p>
dba_views 数据库中所有视?/p>
在这简介中Q我们将要地介绍以下?Oracle 主题Q?
-- 外部调整Q我们应该记?Oracle q不是单独运行的。因此我们将查看一下通过调整 Oracle 服务器以得到高的性能?
--Row re-sequencing 以减磁?I/O Q我们应该懂?Oracle 调优最重要的目标是减少 I/O ?
--Oracle SQL 调整?Oracle SQL 调整?Oracle 调整中最重要的领域之一Q只要通过一些简单的 SQL 调优规则可以大q度地提?SQL 语句的性能Q这是一炚w不奇怪的?
-- 调整 Oracle 排序Q排序对?Oracle 性能也是有很大媄响的?
-- 调整 Oracle 的竞争:表和索引的参数设|对?UPDATE ?INSERT 的性能有很大的影响?
我们首先从调?Oracle 外部的环境开始。如果内存和 CPU 的资源不的话,M?Oracle 调整都是没有帮助的?
外部的性能问题
Oracle q不是单独运行的?Oracle 数据库的性能和外部的环境有很大的关系。这些外部的条g包括有:
Q?CPU--CPU 资源的不o查询变慢。当查询过?Oracle 服务器的 CPU 性能Ӟ你的数据库性能受?CPU 的限制?
Q内?-- 可用?Oralce 的内存数量也会媄?SQL 的性能Q特别是在数据缓冲和内存排序斚w?
Q网l?-- 大量?Net8 通信?SQL 的性能变慢?
许多新手都错误的认ؓ应该首先调整 Oracle 数据库,而不是先认外部资源是否_。实际上Q如果外部环境出现瓶颈,再多?Oracle 调整都是没有帮助的?
在检?Oracle 的外部环境时Q有两个斚w是需要注意的Q?
1 、当q行队列的数目超q服务器?CPU 数量Ӟ服务器的性能׃受到 CPU 的限制。补救的Ҏ是ؓ服务器增加额外的 CPU 或者关闭需要很多处理资源的lgQ例?Oracle Parallel Query ?
2 、内存分c当内存分页Ӟ内存定w已经不Q而内存页是与盘上的交换行交互的。补救的Ҏ是增加更多的内存Q减?Oracle SGA 的大,或者关?Oracle 的多U程服务器?
可以使用各种标准的服务器工具来得到服务器的统计数据,例如 vmstat,glance,top ?sar ?DBA 的目标是保数据库服务器拥有_?CPU 和内存资源来处理 Oracle 的请求?
以下让我们来看一?Oracle ?row-resequencing 是如何能够极大地减少盘 I/O 的?
Row-resequencing Q行的重新排序)
p我们上面提到的,有经验的 Oracle DBA 都知?I/O 是响应时间的最大组成部分。其中磁?I/O 特别厉害Q因为当 Oracle q盘上的一个数据文件得C个数据块Ӟȝq程必ȝ待物?I/O 操作完成。磁盘操作要比数据缓冲慢 10,000 倍。因此,如果可以?I/O 最化Q或者减由于磁盘上的文件竞争而带来的瓉Q就可以大大地改?Oracle 数据库的性能?
如果pȝ响应很慢Q通过减少盘 I/O 可以有一个很快的改善。如果在一个事务中通过按一定的范围搜烦 primary-key 索引来访问表Q那么重C CTAS 的方法组l表是你减?I/O 的首要策略。通过在物理上行排序为和 primary-key 索引一L序Q就可以加快获得数据的速度?
p盘的负载^衡一P行的重新排序也是很简单的Q而且也很快。通过与其它的 DBA 理技巧一起用,可以在?I/O 的系l中大大地减响应的旉?
在高定w的在U事务处理环境中Q?online transaction processing Q?OLTP Q,数据是由一?primary 索引得到的,重新排序表格的行可以oq箋块的序和它们的 primary 索引一Pq样可以在索引驱动的表格查询中Q减物?I/O q且改善响应旉。这个技巧仅在应用选择多行的时候有用,或者在使用索引范围搜烦和应用发出多个查询来得到q箋?key 时有效。对于随机的唯一 primary-key Q主键)的访问将不会p重新排序中得到好处?
让我们看一下它是如何工作的。考虑以下的一?SQL 的查询,它用一个烦引来得到 100 行:
select salary from employee where last_name like 'B%';
q个查询会使用 last_name_index Q搜索其中的每一行来得到目标行。这个查询将会至?100 ơ物理磁盘的dQ因?employee 的行存放在不同的数据块中?
不过Q如果表中的行已l重新排序ؓ?last_name_index 的一P同样的查询又会怎样处理呢?我们可以看到q个查询只需要三ơ的盘 I/O p完全?100 个员工的资料Q一ơ用作烦引的dQ两ơ用作数据块的读取)Q减了 97 ơ的块读取?
重新排序带来的性能改善的程度在于在你开始的时候行的ؕ序性如何,以及你需要由序列中访问多行。至于一个表中的行与索引的排序键的匹配程度,可以查看数据字典中的 dba_indexes ?dba_tables 视图得到?
?dba_indexes 的视图中Q查?clustering_factor 列。如?clustering_factor 的值和表中的块数目大致一P那么你的表和索引的顺序是一L。不q,如果 clustering_factor 的值接q表中的行数目,那就表明表格中的行和索引的顺序是不一L?
行重新排序的作用是不可以看的。在需要进行大范围的烦引搜索的大表中,行重新排序可以o查询的性能提高三倍?
一旦你已经军_重新排序表中的行Q你可以使用以下的工具之一来重新组l表根{?
. 使用 Oracle ?Create Table As Select (CTAS) 语法来拷贝表?
. Oracle9i 自带的表格重新组l工?
SQL 调优
Oracle ?SQL 调优是一个复杂的主题Q甚x需要整本书来介l?Oracle SQL 调优的细微差别。不q有一些基本的规则是每?Oracle DBA 都需要跟从的Q这些规则可以改善他们系l的性能?SQL 调优的目标是单的Q?
. 消除不必要的大表全表搜烦Q不必要的全表搜索导致大量不必要?I/O Q从而拖慢整个数据库的性能。调优专安先会Ҏ查询q回的行数目来评?SQL 。在一个有序的表中Q如果查询返回少?40% 的行Q或者在一个无序的表中Q返回少?7% 的行Q那么这个查询都可以调整Z用一个烦引来代替全表搜烦。对于不必要的全表搜索来_最常见的调优方法是增加索引。可以在表中加入标准?B 树烦引,也可以加?bitmap 和基于函数的索引。要军_是否消除一个全表搜索,你可以仔l检查烦引搜索的 I/O 开销和全表搜索的开销Q它们的开销和数据块的读取和可能的ƈ行执行有养Iq将两者作Ҏ。在一些情况下Q一些不必要的全表搜索的消除可以通过强制使用一?index 来达刎ͼ只需要在 SQL 语句中加入一个烦引的提示可以了?
. 在全表搜索是一个最快的讉KҎӞ小表的全表搜烦攑ֈ~存中,调优专家应该保有一个专门的数据~冲用作行缓册Ӏ在 Oracle7 中,你可以?alter table xxx cache 语句Q在 Oracle8 或以上,表可以被强制ؓ攑ֈ KEEP 池中~冲?
. 保最优的索引使用 Q对于改善查询的速度Q这是特别重要的。有?Oracle 可以选择多个索引来进行查询,调优专家必须查每个烦引ƈ且确?Oracle 使用正确的烦引。它q包?bitmap 和基于函数的索引的用?
. 保最优的 JOIN 操作Q有些查询?NESTED LOOP join 快一些,有些则是 HASH join 快一些,另外一些则?sort-merge join 更快?
q些规则看来单,不过它们?SQL 调优d?90% Qƈ且它们也无需完全懂得 Oracle SQL 的内部运作。以下我们来单概览以?Oracle SQL 的优化?
我们首先要查?Oracle 的排序,q且看一看排序操作是如何影响性能的?
调整 Oracle 的排序操?
排序?SQL 语法中一个小的方面,但很重要Q在 Oracle 的调整中Q它常常被忽略。当使用 create index ?ORDER BY 或?GROUP BY 的语句时Q?Oracle 数据库将会自动执行排序的操作。通常Q在以下的情况下 Oracle 会进行排序的操作Q?
使用 Order by / Group by ?SQL 语句
在创建烦引的时?
q行 table join Ӟ׃现有索引的不导?SQL 优化器调?MERGE SORT?
当与 Oracle 建立起一?session Ӟ在内存中׃ session 分配一个私有的排序区域。如果该q接是一个专用的q接 (dedicated connection) Q那么就会根?init.ora ?sort_area_size 参数的大在内存中分配一?Program Global Area (PGA) 。如果连接是通过多线E服务器建立的,那么排序的空间就?large_pool 中分配。不q的是,对于所有的 session Q用做排序的内存量都必须是一LQ我们不能ؓ需要更大排序的操作分配额外的排序区域。因此,设计者必MZ个^衡,在分配够的排序区域以避免发生大的排序Q务时出现盘排序Q?disk sorts Q的同时Q对于那些ƈ不需要进行很大排序的dQ就会出C些浪贏V当Ӟ当排序的I间需求超Z sort_area_size 的大时Q这时将会在 TEMP 表空间中分页q行盘排序。磁盘排序要比内存排序大概慢 14,000 倍?
上面我们已经提到Q私有排序区域的大小是有 init.ora 中的 sort_area_size 参数军_的。每个排序所占用的大由 init.ora 中的 sort_area_retained_size 参数军_。当排序不能在分配的I间中完成时Q就会用磁盘排序的方式Q即?Oracle 实例中的临时表空间中q行?
盘排序的开销是很大的Q有几个斚w的原因。首先,和内存排序相比较Q它们特别慢Q而且盘排序会消耗时表I间中的资源?Oracle q必d配缓冲池块来保持临时表空间中的块。无Z么时候,内存排序都比盘排序好,盘排序会令Q务变慢,q且会媄?Oracle 实例的当前Q务的执行。还有,q多的磁盘排序将会o free buffer waits 的值变高,从而o其它d的数据块q冲中U走?
接着Q让我们看一?Oracle 的竞争,q且看一下表的存储参数的讄是如何媄?SQL UPDATE ?INSERT 语句的性能的?
调整 Oracle 的竞?/strong>
Oracle 的其中一个优Ҏ它可以管理每个表I间中的自由I间?Oracle 负责处理表和索引的空间管理,q样可以让我们无需懂得 Oracle 的表和烦引的内部q作。不q,对于有经验的 Oracle 调优专家来说Q他需要懂?Oracle 是如何管理表?extent 和空闲的数据块。对于调整拥有高?insert 或?update 的系l来_q是非常重要的?
要精通对象的调整Q你需要懂?freelists ?freelist l的行ؓQ它们和 pctfree ?pctused 参数的值有兟뀂这些知识对于企业资源计划( ERP Q的应用是特别重要的Q因为在q些应用中,不正的表设|通常?DML 语句执行慢的原因?
对于初学者来_最常见的错误是认ؓ默认?Oracle 参数对于所有的对象都是最佳的。除非磁盘的消耗不是一个问题,否则在设|表?pctfree ?pctused 参数Ӟ必考虑q_的行长和数据库的块大,q样I的块才会被有效地放?freelists 中。当q些讄不正时Q那些得到的 freelists 也是 “dead”块,因ؓ它们没有_的空间来存储一行,q样会D明显的处理gq?
Freelists 对于有效地重C?Oracle 表空间中的空间是很重要的Q它?pctfree ?pctused q两个存储参数的讄直接相关。通过?pctused 讄Z个高的|q时数据库就会尽快地重新使用块?
当有一个请求需要插入一行到表格中时Q?Oracle ׃?freelist 中寻找一个有_的空间来容纳一行的块。你也许知道Q?freelist 串是攑֜表格或者烦引的W一个块中,q个块也被称为段_ segment header Q?pctfree ?pctused 参数的唯一目的是Z控制块如何在 freelists 中进出。虽?freelist link ?unlink 是简单的 Oracle 功能Q不q设|?freelist link (pctused) ?unlink (pctfree) ?Oracle 的性能实有媄响?
?DBA 的基本知识知道, pctfree 参数是控?freelist un-links 的(卛_块由 freelists 中移除)。设|?pctfree=10 意味着每个块都保留 10% 的空间用作行扩展?pctused 参数是控?freelist re-links 的。设|?pctused=40 意味着只有在块的用低?40% 时才会回到表格的 freelists 中?
许多新手对于一个块重新回到 freelists 后的处理都有些误解。其实,一旦由于一个删除的操作而o块被重新加入?freelist 中,它将会一直保留在 freelist 中即使空间的使用过?60% Q只有在到达 pctfree 时才会将数据块由 freelist 中移走?
表格和烦引存储参数设|的要求ȝ
以下的一些规则是用来讄 freelists, freelist groups, pctfree ?pctused 存储参数的。你也知道, pctused ?pctfree 的值是可以很容易地通过 alter table 命o修改的,一个好?DBA 应该知道如何讄q些参数的最佛_{?
有效C用空间和高性能之间是有矛盾的,而表格的存储参数是控制q个斚w的矛盾:
. 对于需要有效地重新使用I间Q可以设|一个高?pctused |不过副作用是需要额外的 I/O 。一个高?pctused 值意味着相对满的块都会放?freelist 中。因此,q些块在再次满之前只可以接受几行记录Q从而导致更多的 I/O ?
. q求高性能的话Q可以将 pctused 讄Z个低的|q意味着 Oracle 不会数据块攑ֈ freelists 中直到它几乎是空的。那么块可以在满之前接收更多的行,因此可以减少插入操作?I/O 。要C Oracle 扩展新块的性能要比重新使用现有的块高。对?Oracle 来说Q扩展一个表比管?freelists 消耗更的资源?
让我们来回顾一下设|对象存储参数的一些常见规则:
Q经常将 pctused 讄为可以接收一条新行。对于不能接受一行的 free blocks 对于我们来说是没有用的。如果这样做Q将会o Oracle 的性能变慢Q因?Oracle 在扩展表来得到一个空的块之前Q企图读?5 ?“dead”?free block ?
Q表g chained rows 的出现意味着 pctfree 太低或者是 db_block_size 太少。在很多情况下, RAW ?LONG RAW 列都很巨大,以至过?Oracle 的最大块的大,q时 chained rows 是不可以避免的?
Q如果一个表有同时插入的 SQL 语句Q那么它需要有同时删除的语句。运行单一个一个清除的工作会把全部的I闲块放C?freelist 中,而没有其它包含有MI闲块的 freelists 出现?
Q?freelist 参数应该讄格同时更新的最大倹{例如,如果在Q何时候,某个表最多有 20 个用h行插入的操作Q那么该表的参数应该讄?freelists=20 ?
应记住的?freelist groups 参数的值只是对?Oracle Parallel Server ?Real Application Clusters 才是有用的。对于这c?Oracle Q?freelist groups 应该讄问该表格?Oracle Parallel Server 实例的数目?/p>
---- ?如, ??????表(EMPQ?中, ??名(ENAMEQؓKING ?行, ?为KING ?最 ??员(PRESIDENTQ, ????(MGRQ, 所 ?其MGR ?I倹{?????所 ???????l?费(COMMQ, 所 ?列COMM ???I?|?00?00?400? ??????行COMM ??I?倹{?
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---- -------- -------- --------- -------- ------ ---------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 09-DEC-82 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 12-JAN-83 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
---- ?????qEMP ??例, ????一 ?I????????所 ???一 ??性?
---- 一?I????????
---- 1. I?????
---- ??一 ????I(NOT NULLQ?????Ӟ ???~?????I?| ?????一 ????????| ????I?倹{?
---- ?用SQL ?句INSERT ??行, ?????的列Q????I?| ????列, ???????I?| ?????用NULL ??C( ?于字 W???列, ????' ??C)?
---- 例: ??一 行, 其EMPNO ?、ENAME ?JIA'、SAL ?0000、job 和comm ?I?倹{?
SQL >insert into emp(empno,ename,job,sal,comm)
values(1,'JIA',NULL,1000,NULL);
SQL >select * from emp where empno=1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
--------- ---------- --------- --------- --------- ---------
1 JIA 1000
---- ????????一 行, 除job 和comm ?I??外,mgr、hiredate、deptno ?????????及, ??I?倹{?
---- ?用SQL ?句UPDATE ????据, I???用NULL ??C( ???W???列, ????' ??C)??
SQL >update emp set ename=NULL,sal=NULL where empno=1;
---- 2. I?????
---- I???????点:
---- * {???????倹{?
---- * ?0?I??W???I???同?
---- * 在where ??? Oracle ??l??为NULL ???为FALSEQ???q????的select ???q??行, q???q?????息?但NULL 和FALSE ???的?
---- * ?????????大?
---- * I??????引?
---- 二?I?????
---- ??I???C?~???据, 所 ?I?????值没 ???性, ????{?于??{?于????????????较, ?????I??本nQ???在decode ??外, ??I??????{?P???I?????????WIS NULL 和IS NOT NULL?????????????W??????式, q???l???赖于 I?| ???l????是NULL?在where ??中,Oracle ??l??为NULL ??件ؓFALSEQ???q????的select ???q??行, ??q?????息?
---- ???询EMP ?中MGR 为NULL ?行:
SQL >select * from emp where mgr='';
no rows selected
SQL >select * from emp where mgr=null;
no rows selected
SQL >select * from emp where mgr is null;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- --------- --------- --------- ---------
7839 KING PRESIDENT 17-NOV-81 5000 10
---- W?? ????妥,WHERE ??l??为NULLQ??q??行?W????, q?回MGR ?I???行?
---- 三?I?????W?
---- 1. I???????W?
---- ????W?
---- ???
---- l??
AND
NULL AND TRUE
NULL
NULL AND FALSE
FALSE
NULL AND NULL
NULL
OR
NULL OR TRUE
TRUE
NULL OR FALSE
NULL
NULL OR NULL
NULL
NOT
NOT NULL
NULL
---- ???刎ͼ ????中, 除NULL AND FALSE l??为FALSE、NULL OR TRUE l??为TRUE ?外, ??l???为NULL?
---- ??在where ??中,Oracle ??l??为NULL 的WHERE ??为FALSEQ????????中NULL ??于FALSE???在NOT Q?NULL AND FALSE Q?和NOT Q?NULL AND NULL Q??????一 处FALSE 和TRUE ??别, 但NOT Q?NULL AND FALSE Q??l???TRUEQ?而NOT Q?NULL AND NULL Q??l??为NULL?
---- ??????I???????W???法:
SQL > select * from emp where not comm=null and comm!=0;
no rows selected
SQL > select * from emp where not ( not comm=null and comm!=0 );
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- --------- --------- --------- ---------
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
---- W?一 个Select ?句, ??not comm=null and comm!=0" {??于NULL AND COMM!=0?????一 行, ?果COMM ??{?? ??| 条g {??于NULL AND TRUEQ?l??为NULLQ??果COMM {??Q???{??于NULL AND FALSEQ结 ?为FALSE?所 以, 最 l?l???q??行?
---- W??个Select ??????W?一 个Select 语句 ??? ?QNOTQ, ????一 行, ?果COMM ??{?? ??| ??{??于NOT NULLQ?l??为NULLQ??果COMM {??Q???{??于NOT FALSEQ?l??为TRUE?所 以, 最 l结 ?q??行COMM {?? ?行?
---- 2. I???????W?
---- Q?QIS [NOT] NULLQ??????I????一 ??W( ? I?????Q?
Q?Q??=?gt;=?lt;=?gt;?lt;
SQL >select ename,sal,comm from emp where sal >comm;
ENAME SAL COMM
---------- --------- ---------
ALLEN 1600 300
WARD 1250 500
TURNER 1500 0
---- sal 或comm ?I???行,sal>comm ??l??为NULLQ?所 ??是sal 或comm ?I???????q?回?
---- Q?QIN 和NOT IN ??W?
SQL >select ename,mgr from emp where mgr in (7902,NULL);
ENAME MGR
---------- ---------
SMITH 7902
---- ??q???中, ??mgr in (7902,NULL)" {?价于mgr=7902 or mgr=NULL???表EMP ????一 行, ?果mgr 为NULLQ???q???{h 于NULL OR NULLQ??为NULLQ??果mgr ??{??902 ??| ??q???{?价于FALSE OR NULLQ??为NULLQ??果mgr {??902Q???q???{??于TRUE OR NULLQ?即ؓTRUE?所 以, 最 l?l???q?回mgr {??902 ?行?
SQL >select deptno from emp where deptno not in ('10',NULL);
no rows selected
---- ??q???中, ??deptno not in ('10',NULL)" {??于deptno!='10' and deptno!=NULLQ??于EMP ?????一 行,???l????为NULL 或FALSEQ?所 ??q??行?
---- Q?Qany,some
SQL >select ename,sal from emp where sal > any(3000,null);
ENAME SAL
---------- ---------
KING 5000
---- ??sal > any(3000,null)" {??于sal >3000 or sal >null?c???qͼ3Q?W?一 句, 最 l?l??q??所 有sal >3000 ?行?
---- Q?QAll
SQL >select ename,sal from emp where sal > all(3000,null);
no rows selected
---- ??sal> all(3000,null)" {??于sal >3000 and sal >null, l????为NULL 或FALSEQ?所 ??q??行?
---- Q?Q(notQbetween
SQL >select ename,sal from emp where sal between null and 3000;
no rows selected
---- ??sal between null and 3000" {??于sal >=null and sal< =3000, l????为NULL 或FALSEQ?所 ??q??行?
SQL >select ename,sal from emp where sal not between null and 3000;
ENAME SAL
---------- ---------
KING 5000
---- ??sal not between null and 3000" {??于sal
---- ???????W??I????l:
---- ????W?
---- ??式( 例:A、B 是NULL、C=10Q?
---- l??
IS NULL、IS NOT NULL
A IS NULL
TRUE
A IS NOT NULL
FALSE
C IS NULL
FALSE
C IS NOT NULL
TRUE
=?=?gt;=?lt; =?gt;?lt;
A = NULL
NULL
A > NULL
NULL
C = NULL
NULL
C > NULL
NULL
IN (=ANY)
A IN (10,NULL)
NULL
C IN (10,NULL)
TRUE
C IN (20,NULL)
NULL
NOT IN
( {???Q?ALL)
A NOT IN (20,NULL)
NULL
C NOT IN (20,NULL)
FALSE
C NOT IN (10,NULL)
NULL
ANYQSOME
A > ANY(5,NULL)
NULL
C > ANY(5,NULL)
TRUE
C > ANY(15,NULL)
NULL
ALL
A > ALL(5,NULL)
NULL
C > ALL(5,NULL)
NULL
C > ALL(15,NULL)
FALSE
(NOT)BETWEEN
A BETWEEN 5 AND NULL
NULL
C BETWEEN 5 AND NULL
NULL
C BETWEEN 15 AND NULL
FALSE
A NOT BETWEEN 5 AND NULL
NULL
C NOT BETWEEN 5 AND NULL
NULL
C NOT BETWEEN 15 AND NULL
TRUE
---- 3?I????术??W???W?
---- Q?Q?????W: I???{???Q?????I?????????q??l????I?| ??I???0 ?I?倹{?
---- Q?Q??W???W||Q??为ORACLE ????零个 ?W????????I??????同( ???????一 ????此)Q?所 ?对于||Q?I??{??????W?倹{?例:
SQL >select ename,mgr,ename||mgr,sal,comm,sal+comm from emp;
ENAME MGR ENAME||MGR SAL COMM SAL+COMM
---------- --------- ------------- --------- --------- ---------
SMITH 7902 SMITH7902 800
ALLEN 7698 ALLEN7698 1600 300 1900
WARD 7698 WARD7698 1250 500 1750
JONES 7839 JONES7839 2975
MARTIN 7698 MARTIN7698 1250 1400 2650
BLAKE 7839 BLAKE7839 2850
CLARK 7839 CLARK7839 2450
SCOTT 7566 SCOTT7566 3000
KING KING 5000
TURNER 7698 TURNER7698 1500 0 1500
ADAMS 7788 ADAMS7788 1100
JAMES 7698 JAMES7698 950
FORD 7566 FORD7566 3000
MILLER 7782 MILLER7782 1300
---- ?????刎ͼ 凡mgr ?I??的,ename||mgr l??{?于enameQ??是comm ?I???行,sal+comm ??I?倹{?
---- 四?I?????
---- 1 Q?I???????
---- ?????敎ͼ ??l??????I?| ?ӞNVL、TRANSLATE ?外) q????I?倹{?????的ABSQCOMMQ, ?果COMM ?I?|ABS(COMM) ?I?倹{?
SQL > select ename,sal,comm,abs(comm) from emp where sal< 1500;
ENAME SAL COMM ABS(COMM)
---------- --------- --------- ---------
SMITH 800
WARD 1250 500 500
MARTIN 1250 1400 1400
ADAMS 1100
JAMES 950
MILLER 1300
---- 2. I???l???
---- l?????I?倹{??????中, ??需 ???用nvl ??????I?倹{?例:
SQL >select count(comm),sum(comm),avg(comm) from emp;
COUNT(COMM) SUM(COMM) AVG(COMM)
----------- --------- ---------
4 2200 550
SQL >select count(nvl(comm,0)),sum(nvl(comm,0)),avg(nvl(comm,0))
from emp;
COUNT(NVL(COMM,0)) SUM(NVL(COMM,0)) AVG(NVL(COMM,0))
------------------ ---------------- ----------------
14 2200 157.14286
---- W?一 个SELECT ???略COMM ?I???行, W?二个SELECT ???用NVL ??l???所 ?的COMMQ?所 ???l????数?q?????相同???需 ????是, ???l???q??????Ӟ ???????????同含 义, ????????z??握??如:
SQL >select deptno,sum(sal),sum(comm),
sum(sal+comm),sum(sal)+sum(comm),sum(nvl(sal,0)+nvl(comm,0))
from emp
group by deptno;
DEPTNO SUM(SAL) SUM(COMM) SUM(SAL+COMM) SUM(SAL)
+SUM(COMM) SUM(NVL(SAL,0)+NVL(COMM,0))
--------- --------- --------- ------------- -------
10 8750 8750
20 10875 10875
30 9400 2200 7800 11600 11600
---- ???到SUM(SAL+COMM)、SUM(SAL)+SUM(COMM)?SUM(NVL(SAL,0)+NVL(COMM,0)) ??别:SUM(SAL+COMM) ??????????和,?果SAL、COMM ??一 ?为NULLQ???????计;SUM(SAL)+SUM(COMM) ?????行的 ?????加,SAL、COMM ?的NULL ????计, ???SUM(SAL)、SUM(COMM) ?者的 l?????一 ?为NULLQ??????为NULLQ?在SUM(NVL(SAL,0)+NVL(COMM,0)) 里,SAL、COMM ?的NULL ? ?理?
---- 五?I???????
---- 1. I??????????倹{??如:
SQL > select ename,comm from emp where deptno='30' order by commQ?br />
ENAME COMM
---------- ---------
TURNER 0
ALLEN 300
WARD 500
MARTIN 1400
BLAKE
JAMES
---- 2. I??????引???????????引,??????I?????_ ??I??????引, 所 ?????????率??如下 ????????在MGR ??????引?
SQL >select ename from emp where mgr is null;
ENAME
----------
KING
---- ??????I?????引, 所 ?????I????????一 ??引(UNIQUE INDEXQ??如, ??在EMP ?的COMM ?????一 ??引:
SQL > create unique index emp_comm on emp(comm);
Index created.
LookupDispatchAction是DispatchAction的子cR他的作用是多个响应用戯求的ActionҎ攄在同一个Action中?/p>
LookupDispatchAction主要适合用于面中同一个表单具有多个提交按钮,每个提交按钮要递交l不同的Action处理Ҏ的情c?/p>
LookupDispatchAction所执行的方法也是依据页面传递的参数来确定的。而具体执行哪个ActionҎ则是qh交参数的倹{资源文件、定义的映射Ҏ所共同军_的?/p>
具体请参考下面的例题Q?/font>
1、先在JSP面中用如下的提交按钮Q?/strong>
#test.jsp
<html:form action="/test">
<!--property属性的g定与ActionMapping中的parameter属性的值相?->
<html:submit property="method"><bean:message key="button.add"/></html:submit>
<html:submit property="method"><bean:message key="button.delete"/></html:submit>
</html:form>
2、在Struts的配|文件中讄paramerter属性:
#struts-config.xml
<!-- parameter属性指面中按钮的名称,其中的name属性中的ActionForm随便Zp我的是空?-->
<action path="/test" type="action.TestLookUpDispatchAction" scope="request" input="test.jsp" parameter="method" ></action>
3、创Z个承LookupDispatchAction的类Q名叫TestLookUpDispatchAction攑֜action包下Q?/strong>
#TestLookUpDispatchAction.java
package action;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.LookupDispatchAction;
public class TestLookUpDispatchAction extends LookupDispatchAction {
@Override
protected Map getKeyMethodMap() {// 定义资源文g关键字与ActionҎ之间的映关p?br /> Map<String, String> map = new HashMap<String, String>();
map.put("button.add", "add");
map.put("button.delete", "delete");
return map;
}// 自定义的Ҏ
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
System.out.println("执行addҎ成功");
return null;
}
// 自定义的Ҏ
public ActionForward delete(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
System.out.println("执行deleteҎ成功");
return null;
}
}
4、在资源文g中ؓ每个标记定义昄信息Q?/strong>
message.properties
button.add=add
button.delete=delete
q样OK了,你可以试一下是否能调用到自己想要的Ҏ。有什么问题可以联pL?/p>
属性名 | 用? | ||
---|---|---|---|
Dialectcd允许Hibernate针对特定的关pL据库生成优化的SQL. 取?/span> hibernate.show_sql | 输出所有SQL语句到控制台. 有一个另外的选择是把debug?eg. false | ||
true | hibernate.default_schema | 在生成的SQL? 给定的schema/tablespace附加于非全限定名的表名上. 取?/span> hibernate.default_catalog | 在生成的SQL? 给定的catalog附加于非全限定名的表名上. 取?/span> hibernate.session_factory_name | jndi/composite/name |
0意味着关闭默认的外连接抓? 取?/span> ?tt>3之间取? | |||
4, 16 | |||
SessionFactory打开的所有Session指定默认的实体表现模? 取?/span> dom4j, hibernate.order_updates | 强制Hibernate按照被更新数据的主键QؓSQL更新排序。这么做减在高ƈ发系l中事务的死锁?取?/span> false | ||
true | hibernate.use_identifer_rollback | 如果开? 在对象被删除时生成的标识属性将被重设ؓ默认? 取?/span> false | ||
false. 取?/span> false |
?nbsp;3.4. Hibernate JDBC和连?connection)属?
属性名 | 用? | |
---|---|---|
Statement.setFetchSize()). | ||
5?tt>hibernate.jdbc.batch_versioned_data | 如果你想让你的JDBC驱动?tt>true(开启这个选项通常是安全的). 同时QHibernateؓ自动版本化的数据使用扚wDML. 默认gؓtrue | hibernate.jdbc.factory_class | 选择一个自定义?tt>classname.of.Batcher |
true | hibernate.jdbc.use_streams_for_binary | 在JDBCdserializable (可序列化) 的类型时使用?stream)(pȝU属?. 取?/span> false | |
PreparedStatement.getGeneratedKeys() 来获取数据库生成的key(?。需要JDBC3+驱动和JRE1.4+, 如果你的数据库驱动在使用Hibernate的标 识生成器旉到问题,请将此D为false. 默认情况下将使用q接的元数据来判定驱动的能力. 取?/span> hibernate.connection.provider_class | 自定?tt>classname.of.ConnectionProvider | |
java.sql.Connection来了解各个值的具体意义, 但请注意多数数据库都不支持所有的隔离U别. 取?/span> hibernate.connection.autocommit | 允许被缓存的JDBCq接开启自动提?autocommit) (不徏?. 取?/span> false | |
after_statement, q样在每ơJDBC调用后,都会d的释放连? 对于非JTA的连? 使用autoؓJTA和CMT事务{略选择after_transaction. 取?/span> after_transaction | auto | ||
propertyName传递到hibernate.jndi.<propertyName> | 属?tt>InitialContextFactory中去. |
?nbsp;3.5. Hibernate~存属?
属性名 | 用? | ||
---|---|---|---|
CacheProvider的类? 取?/span> hibernate.cache.use_minimal_puts | 以频J的L作ؓ代h, 优化二~存来最化写操? 在Hibernate3中,q个讄对的集群~存非常有用, 寚w缓存的实现而言Q默认是开启的. 取?/span> hibernate.cache.use_query_cache | 允许查询~存, 个别查询仍然需要被讄为可~存? 取?/span> hibernate.cache.use_second_level_cache | 能用来完全禁止用二U缓? 寚w些在cȝ映射定义中指?tt>true|false |
QueryCache接口的类? 默认为内建的classname.of.QueryCache | |||
prefix | |||
true|false |
?nbsp;3.6. Hibernate事务属?
属性名 | 用? | |
---|---|---|
TransactionFactory的类? 用于Hibernate JDBCTransactionFactory). 取?/span> jta.UserTransaction | 一个JNDI名字Q被UserTransaction. 取?/span> hibernate.transaction.manager_lookup_class | 一?tt>classname.of.TransactionManagerLookup |
true | hibernate.transaction.auto_close_session | 如果开? session在事务完成后被自动关闭?现在更好的方法是使用自动session上下文管理?span>取?/span> false |
?nbsp;3.7. 其他属?
属性名 | 用? | ||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
jta | custom.Class | |||||||||||||||||||||||||||||||||||||||||||||||||||
org.hibernate.hql.ast.ASTQueryTranslatorFactory or hibernate.query.substitutions | Hibernate查询中的W号映射到SQL查询中的W号 (W号可能是函数名或常量名?. 取?/span> hibernate.hbm2ddl.auto | ?tt>create-drop?在显式关?tt>validate | create | hibernate.cglib.use_reflection_optimizer | 开启CGLIB来替代运行时反射机制(pȝU属?. 反射机制有时在除错时比较有用. 注意即关闭q个优化, Hibernateq是需要CGLIB. 你不能在true | hibernate.dialect属性设|成正确?hibernate.dialect)
?nbsp;3.9. Hibernate日志cd
?nbsp;3.10. JTA TransactionManagers
]]> Hibernate一共包括了23个jar包,令hD~ؕ。本文将详细讲解Hibernate每个jar包的作用Q便于你在应用中Ҏ自己的需要进行取舍? 下蝲HibernateQ例?.0.3E_版本Q解压羃Q可以看C个hibernate2.jar和lib目录下有22个jar包: hibernate2.jar: Hibernate的库Q没有什么可说的Q必M用的jar? cglib-asm.jar: CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库Q必M用的jar? dom4j.jar: dom4j是一个Java的XML APIQ类gjdomQ用来读写XML文g的。dom4j是一个非帔R怼U的Java XML APIQ具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的YӞ可以在SourceForge上找到它。在IBM developerWorks上面可以扑ֈ一文章,对主的Java XML APIq行的性能、功能和易用性的评测Qdom4j无论在那个方面都是非常出色的。我早在近两年之前开始用dom4jQ直到现在。如今你可以看到来多的Java软g都在使用dom4j来读写XMLQ特别值得一提的是连Sun的JAXM也在用dom4j。这是必M用的jar包,Hibernate用它来读写配|文件? odmg.jar: ODMG是一个ORM的规范,Hibernate实现了ODMG规范Q这是一个核心的库,必须使用的jar包? commons-collections.jarQ? Apache Commons包中的一个,包含了一些Apache开发的集合c,功能比java.util.*强大。必M用的jar包? commons-beanutils.jarQ? Apache Commons包中的一个,包含了一些Bean工具cȝ。必M用的jar包? commons-lang.jar: Apache Commons包中的一个,包含了一些数据类型工LQ是java.lang.*的扩展。必M用的jar包? commons-logging.jar: Apache Commons包中的一个,包含了日志功能,必须使用的jar包。这个包本n包含了一个Simple LoggerQ但是功能很弱。在q行的时候它会先在CLASSPATH找log4jQ如果有Q就使用log4jQ如果没有,找JDK1.4带的java.util.loggingQ如果也找不到就用Simple Logger。commons-logging.jar的出现是一个历史的的遗留的遗憾Q当初Apache极力游说Sun把log4j加入JDK1.4Q然而JDK1.4目组已经接近发布JDK1.4产品的时间了Q因此拒l了Apache的要求,使用自己的java.util.loggingQ这个包的功能比log4j差的很远Q性能也一般?/p> 后来Apache开发出来了commons-logging.jar用来兼容两个logger。因此用commons-logging.jar写的logE序Q底层的Logger是可以切换的Q你可以选择log4jQjava.util.logging或者它自带的Simple Logger。不q我仍然强烈使用log4jQ因为log4j性能很高Qlog输出信息旉几乎{于System.outQ而处理一条logq_只需?us。你可以在Hibernate的src目录下找到Hibernate已经Z准备好了的log4j的配|文Ӟ你只需要到Apache |站M载log4j可以了。commons-logging.jar也是必须的jar包? 使用Hibernate必须的jar包就是以上的q几个,剩下的都是可选的? ant.jar: Ant~译工具的jar包,用来~译Hibernate源代码的。如果你不准备修改和~译Hibernate源代码,那么没有什么用Q可选的jar? optional.jarQ? Ant的一个辅助包? c3p0.jarQ? C3PO是一个数据库q接池,Hibernate可以配置Z用C3POq接池。如果你准备用这个连接池Q就需要这个jar包? proxool.jarQ? 也是一个连接池Q同上? commons-pool.jar, commons-dbcp.jar: DBCP数据库连接池QApache的Jakartal织开发的QTomcat4的连接池也是DBCP? 实际上Hibernate自己也实C一个非帔R常简单的数据库连接池Q加上上?个,你实际上可以在Hibernate上选择4U不同的数据库连接池Q选择哪一个看个h的偏好,不过DBCP可能更通用一些。另外强调一点,如果在EJB中用HibernateQ一定要用App Server的连接池Q不要用以上4U连接池Q否则容器管理事务不起作用? connector.jar: JCA 规范Q如果你在App Server上把Hibernate配置为Connector的话Q就需要这个jar。不q实际上一般App Server肯定会带上这个包Q所以实际上是多余的包? jaas.jar: JAAS是用来进行权限验证的Q已l包含在JDK1.4里面了。所以实际上是多余的包? jcs.jarQ? 如果你准备在Hibernate中用JCS的话Q那么必d括它Q否则就不用? jdbc2_0-stdext.jar: JDBC2.0的扩展包Q一般来说数据库q接池会用上它。不qApp Server都会带上Q所以也是多余的? jta.jarQ? JTA规范Q当Hibernate使用JTA的时候需要,不过App Server都会带上Q所以也是多余的? junit.jar: Junit包,当你q行Hibernate自带的测试代码的时候需要,否则׃用? xalan.jar, xerces.jar, xml-apis.jar: Xerces是XML解析器,Xalan是格式化器,xml-apis实际上是JAXP。一般App Server都会带上QJDK1.4也包含了解析器,不过不是XercesQ是CrimsonQ效率比较差Q不qHibernate用XML只不q是d配置文gQ性能没什么紧要的Q所以也是多余的?/p>
|