??xml version="1.0" encoding="utf-8" standalone="yes"?>九九精品国产亚洲AV日韩,亚洲国产系列一区二区三区,亚洲色欲色欲www在线播放http://www.tkk7.com/yes1983/archive/2010/12/15/Eclipse.html牛虾牛虾Wed, 15 Dec 2010 04:15:00 GMThttp://www.tkk7.com/yes1983/archive/2010/12/15/Eclipse.htmlhttp://www.tkk7.com/yes1983/comments/340768.htmlhttp://www.tkk7.com/yes1983/archive/2010/12/15/Eclipse.html#Feedback8http://www.tkk7.com/yes1983/comments/commentRss/340768.htmlhttp://www.tkk7.com/yes1983/services/trackbacks/340768.html 1.先找到相关的插g
      打开Plug-ins View扑ֈ插gorg.eclipse.jface.text,右键点击,选择import as Source Project,导入完成?在你的workspace可以看到这个project?br /> 2.修改代码
     ?font style="background-color: #cce8cf">src/org/eclipse/jface/text/contentassist/CompletionProposalPopup.java文g?扑ֈq样一行代?br />          char triggers = t.getTriggerCharacter();
         if(contains(triggers,key))
    在那行if判断里面,eclipse?x)判断key(是你按下的?是否在triggers?如果?那就触发下面的第一行提CZ屏的代码.所以我们要做的是把空格和=h除就可以?
        if(key!='='&&key!=0x20&&contains(triggers,key))

3.把修改好的org.eclipse.jface.text导出
    右键点击你的workspace里的org.eclipse.jface.text,选择export-->Deployable plugins and fragments, next,destination 选择archive file,然后finish.你就可以在zip文g里看到生成好的jar ,用它替换掉eclipse/plugins里面的同名jar?可以了(jin)

牛虾 2010-12-15 12:15 发表评论
]]>
Visio的WebE序模板http://www.tkk7.com/yes1983/archive/2010/07/28/327355.html牛虾牛虾Wed, 28 Jul 2010 10:27:00 GMThttp://www.tkk7.com/yes1983/archive/2010/07/28/327355.htmlhttp://www.tkk7.com/yes1983/comments/327355.htmlhttp://www.tkk7.com/yes1983/archive/2010/07/28/327355.html#Feedback0http://www.tkk7.com/yes1983/comments/commentRss/327355.htmlhttp://www.tkk7.com/yes1983/services/trackbacks/327355.html
/Files/yes1983/GUUUI_Web_Prototyping_Tool_3.zip

牛虾 2010-07-28 18:27 发表评论
]]>
Eclipse RCP中多U程Job使用[转帖]http://www.tkk7.com/yes1983/archive/2010/07/01/325014.html牛虾牛虾Thu, 01 Jul 2010 13:28:00 GMThttp://www.tkk7.com/yes1983/archive/2010/07/01/325014.htmlhttp://www.tkk7.com/yes1983/comments/325014.htmlhttp://www.tkk7.com/yes1983/archive/2010/07/01/325014.html#Feedback0http://www.tkk7.com/yes1983/comments/commentRss/325014.htmlhttp://www.tkk7.com/yes1983/services/trackbacks/325014.html  阅读全文

牛虾 2010-07-01 21:28 发表评论
]]>
Common table expression,Nested Table expression, Temporary table(转蝲)http://www.tkk7.com/yes1983/archive/2010/04/14/318271.html牛虾牛虾Wed, 14 Apr 2010 08:53:00 GMThttp://www.tkk7.com/yes1983/archive/2010/04/14/318271.htmlhttp://www.tkk7.com/yes1983/comments/318271.htmlhttp://www.tkk7.com/yes1983/archive/2010/04/14/318271.html#Feedback0http://www.tkk7.com/yes1983/comments/commentRss/318271.htmlhttp://www.tkk7.com/yes1983/services/trackbacks/318271.html转蝲?font style="background-color: #cce8cf">http://blog.csdn.net/shangboerds/archive/2010/01/27/5260783.aspx
CTE:
说vWITH 语句Q除?jin)那些第一ơ听说WITH语句的hQ大部分人都觉得它是用来做递归查询的。其实那只是它的一个用途而已Q它的本名正如我们标题写的那P叫做Q公p表达式(Common Table ExpressionQ,从字面理解,大家觉得它是用来q嘛的呢Q其实,它是用来定义临时集合的。啊QVALUES语句不是用来定义临时集合的吗Q怎么WITH语句也用来定义(f)旉合呢Q它们有什么区别呢Q?/font>

VALUES语句是用明确的值来定义临时集合的,如下Q?/font>

VALUES (1,2), (1,3),(2,1)  
 

WITH语句是用查询(也就是select语句)来定义(f)旉合的Q从q个角度Ԍ有点像视图,不过不是视图Q大家千万别误解。如下:(x)

CREATE TABLE USER (
 
NAME VARCHAR(20) NOT NULL,---姓名
 
SEX INTEGER,---性别Q?、男   2、女Q?br />  
BIRTHDAY DATE---生日
 
);  
 

WITH TEST(NAME_TEST, BDAY_TEST) AS  
(  
SELECT NAME,BIRTHDAY FROM USER--语句1  
)  
SELECT NAME_TEST FROM TEST WHERE BDAY_TEST='1949-10-1';--语句2  
 

下面我们来解释一下,首先语句1执行Q它?x)生一个有两列QNAME,BIRTHDAYQ的l果集;接着Q我们将q个l果集命名ؓ(f)testQƈ且将列名重命名ؓ(f)NAME_TEST, BDAY_TESTQ最后我们执行语?Q从q个临时集合中找到生日是1949-10-1Q也是共和国的同龄人?/font>

怎么P如果你感觉不好理解,请仔l的分析一下上面的语句。下面我们D个VALUES语句和W(xu)ITH语句l合使用的例子,如下Q?/font>

WITH TEST(NAME_TEST, BDAY_TEST) AS
 
(
 
VALUES ('张三','1997-7-1'),('李四','1949-10-1')
 
)
 
SELECT NAME_TEST FROM TEST WHERE BDAY_TEST='1949-10-1'  
 

从上面的介绍和W(xu)ITH语句不ؓ(f)大多Ch所熟?zhn)可以猜测QW(xu)ITH语句是ؓ(f)复杂的查询ؓ(f)设计的,的确是这L(fng)Q下面我们D个复杂的例子Q想提高技术的朋友可千万不能错q。考虑下面的情况:(x)

CREATE TABLE USER  
(  
NAME VARCHAR(20) NOT NULL,--姓名  
DEGREE INTEGER NOT NULL,--学历(1、专U?2、本U?3、硕?4、博?  
STARTWORKDATE date NOT NULL,--入职旉  
SALARY1 FLOAT NOT NULL,--基本工资  
SALARY2 FLOAT NOT NULL--奖金  
);  
 

假设现在让你查询一下那?1、学历是士或博?nbsp; 2、学历相同,入职q䆾也相同,但是工资Q基本工?奖金Q却比相同条件员工的q_工资低的员工。(哈哈Q可能是要涨工资Q,不知道你听明白问题没有?该怎么查询呢?我们是这h的:(x)

1、查询学历是士或博士的那些员工得到l果?Q如下:(x)

SELECT NAME,DEGREE,YEAR(STARTWORKDATE) AS WORDDATE, SALARY1+SALARY2 AS SALARY FROM USER WHERE DEGREE IN (3,4)Q?nbsp; 
 

2、根据学历和入职q䆾分组Q求q_工资 得到l果?Q如下:(x)

SELECT DEGREE,YEAR(STARTWORKDATE) AS WORDDATE, AVG(SALARY1+SALARY2) AS AVG_SALARY   
FROM USER WHERE DEGREE IN (3,4)  
GROUP BY DEGREE,YEAR(STARTWORKDATE)  
 

3、以学历和入职年份ؓ(f)条g 联合两个l果集,查找工资<q_工资 的员工,以下是完整的SQLQ?/font>

WITH TEMP1(NAME,DEGREE,WORDDATE,SALARY) AS   
(  
SELECT NAME,DEGREE,YEAR(STARTWORKDATE) AS WORDDATE, SALARY1+SALARY2 AS SALARY FROM USER WHERE DEGREE IN (3,4)  
),  
TEMP2 (DEGREE,WORDDATE,AVG_SALARY) AS  
(  
SELECT DEGREE,YEAR(STARTWORKDATE) AS WORDDATE, AVG(SALARY1+SALARY2) AS AVG_SALARY   
FROM USER WHERE DEGREE IN (3,4)  
GROUP BY DEGREE,YEAR(STARTWORKDATE)  
)  
SELECT NAME FROM TEMP1, TEMP2 WHERE   
TEMP1.DEGREE=TEMP2.DEGREE   
AND TEMP1.WORDDATE=TEMP2.WORDDATE   
AND SALARY<AVG_SALARY;  
 

查询l果完全正确Q但我们q有改善的空_(d)在查询结果集2的时候,我们是从user表中取得数据的。其实此时结果集1已经查询出来?jin),我们完全可以从结果?中通过分组得到l果?Q而不用从uer表中得到l果?Q比较上面和下面的语句你可以知道我说的是什么意思了(jin)Q?/font>

WITH TEMP1(NAME,DEGREE,WORDDATE,SALARY) AS   
(  
SELECT NAME,DEGREE,YEAR(STARTWORKDATE) AS WORDDATE, SALARY1+SALARY2 AS SALARY FROM USER WHERE DEGREE IN (3,4)  
),  
TEMP2 (DEGREE,WORDDATE,AVG_SALARY) AS  
(  
SELECT DEGREE,WORDDATE, AVG(SALARY) AS AVG_SALARY   
FROM TEMP1  
GROUP BY DEGREE,WORDDATE  
)  
SELECT NAME FROM TEMP1, TEMP2 WHERE   
TEMP1.DEGREE=TEMP2.DEGREE   
AND TEMP1.WORDDATE=TEMP2.WORDDATE   
AND SALARY<AVG_SALARY;  
 

可能有些朋友?x)说Q我不用WITH语句也可以查出来Q的是q样Q如下:(x)

SELECT U.NAME FROM USER AS U,
 
(
 
SELECT DEGREE,YEAR(STARTWORKDATE) AS WORDDATE, AVG(SALARY1+SALARY2) AS AVG_SALARY
 
FROM USER WHERE DEGREE IN (3,4)
 
GROUP BY DEGREE,YEAR(STARTWORKDATE)
 
) AS G
 
WHERE U.DEGREE=G.DEGREE
 
AND YEAR(U.STARTWORKDATE)=G.WORDDATE
 
AND (SALARY1+SALARY2)<G.AVG_SALARY;  
 

那用WITH 和不使用 WITHQ这两种写法有什么区别呢Q一般情况下q两U写法在性能上不?x)有太大差异Q但是,

1、当USER表的记录很多

2、硕士或博士QDEGREE IN (3,4)Q在USER表中的比例很?/font>

当满以上条件时Q这两种写法在性能的差异将?x)显现出来,Z么呢Q因Z使用WITH写法的语句访问了(jin)2ơUSER表,如果DEGREE 字段又没有烦(ch)引,性能差异会(x)非常明显?/font>

    当你看到q时Q如果很好的理解?jin)上面的内容Q我怿你会(x)对WITH语句有了(jin)一定的体会(x)。然而W(xu)ITH语句能做的还?sh)止q些Q下面给大家介绍一下,如何用WITH语句做递归查询。递归查询的一个典型的例子是对?wi)状l构的表q行查询Q考虑如下的情况:(x)

论坛首页  
--数据库开?nbsp; 
----DB2  
------DB2 文章1  
--------DB2 文章1 的评?  
--------DB2 文章1 的评?  
------DB2 文章2  
----Oracle  
--Java技?nbsp; 
 

以上是一个论坛的典型例子Q下面我们新Z个表来存储以上信息?/font>

CREATE TABLE BBS  
(  
PARENTID INTEGER NOT NULL,  
ID INTEGER NOT NULL,  
NAME VARCHAR(200) NOT NULL---板块、文章、评论等?nbsp; 
);  
insert into bbs (PARENTID,ID,NAME) values   
(0,0,'论坛首页'),  
(0,1,'数据库开?),  
(1,11,'DB2'),  
(11,111,'DB2 文章1'),  
(111,1111,'DB2 文章1 的评?'),  
(111,1112,'DB2 文章1 的评?'),  
(11,112,'DB2 文章2'),  
(1,12,'Oracle'),  
(0,2,'Java技?);  
 

现在万事兼备?jin),我们开始查询吧。假讄在让你查询一?#8216;DB2 文章1’的所有评论,有h_(d)q还?sh)简单,如下q样可以了(jin)?/font>

SELECT * FROM BBS WHERE PARENTID=(SELECT ID FROM BBS WHERE NAME='DB2');  
 

{案完全正确。那么,现在让你查询一下DB2的所有文章及(qing)评论Q怎么办?传统的方法就很难查询?jin),q时候递归查询派上用Z(jin)Q如下:(x)

WITH TEMP(PARENTID,ID,NAME) AS  
(  
SELECT PARENTID,ID,NAME FROM BBS WHERE NAME='DB2'---语句1  
UNION ALL---语句2  
SELECT B.PARENTID,B.ID,B.NAME FROM BBS AS B, TEMP AS T WHERE B.PARENTID=T.ID---语句3  
)  
SELECT NAME FROM TEMP;---语句4  
 

q行后,我们发现Q结果完全正,那它到底是怎么q行的呢Q下面我们详l讲解一下?/font>

1、首先,语句1会(x)执行Q它只执行一ơ,作ؓ(f)循环的v炏V得到结果集QDB2

2、接着Q将循环执行语句3Q这里我们有必要详细介绍一下?/font>

首先语句3的意图是什么呢Q说白了(jin)Q它?yu)是查找语?产生l果集(DB2Q的下一U,那么在目录树(wi)中DB2的下一U是什么呢Q是‘DB2 文章1’?#8216;DB2 文章2’Qƈ且把查询到的l果集作Z一ơ@环的L(fng)Q然后查询它们的下一U,直到没有下一Uؓ(f)止?/font>

怎么Pq没明白Q哈哈,不要紧,我们一步一步来Q?/font>


首先Q语?产生l果集:(x)DB2Q作为@环的L(fng)Q把它和BBS表关联来查找它的下一U,查询后的l果为:(x)‘DB2 文章1’?#8216;DB2 文章2’

接着Q把上次的查询结果(也就?#8216;DB2 文章1’?#8216;DB2 文章2’Q和BBS表关联来查找它们的下一U,查询后的l果为:(x)‘DB2 文章1 的评?’ ?‘DB2 文章1 的评?’?/p>

然后Q在把上ơ的查询l果Q也是‘DB2 文章1 的评?’ ?‘DB2 文章1 的评?’Q和BBS表关联来查找它们的下一U,此时Q没有结果返回,循环l束?/p>

3、第三,执行语?Q将所有的l果集放在一P最l得到templ果集?/p>

4、最后,我们通过语句4 从temp临时集合中得到我们期望的查询l果?/p>

怎么Pq回理解?jin)吧Q如果还没有理解Q那么我也无能ؓ(f)力了(jin)。需要特别提醒的?/p>

1、一定要注意语句3的关联条Ӟ否则很容易就写成d@环了(jin)?/p>

2、语?必须是UNION ALL

最后请大家猜想一下,把语?的where子句LQ将?x)生什么样的结果呢Q?/p>

NTE:

SELECT * FROM <TABLE-NAME>;  
 

看到上面的语句了(jin)吗?q是我们在熟(zhn)不q的一条语句,我们中的大多人学?fn)SQL正是从这条语句开始的。所以大多数为FROM语句后只能接一个表或视图(或者压根就没多惻I(j)Q有q种x(chng)的h我非常能理解Q因为我曄也是q其中的一员。其实FROM后面可以接Q何集合(表)(j)。说到这Q关于集合和表,我特别想多少几句。SQL的理论基是数学中的集合理论,所以SQLx(chng)的就是如何对集合q行操作Q基于以上原因,我特别喜Ƣ名?集合Q而不喜欢说表。不q,大家如果不习(fn)惯,也可以把集合和表当一个意思来理解Q因为我们不是搞理论研究工作的,没必要深I他们之间的l微差别。说?jin)这么多Q我们还是赶快来看个例子吧?/font>

---
 
CREATE TABLE USER 
 

 
NAME VARCHAR(20) NOT NULL,---姓名 
 
BIRTHDAY DATE---生日 
 
);
 
 
 
 
 
---例子1
 
SELECT * FROM
 
(
 
SELECT * FROM USER
 
) AS TEMP1;
 
 
 
 
 
---例子2
 
SELECT NAME,BIRTHDAY FROM
 
(
 
SELECT NAME,BIRTHDAY FROM USER
 
) AS TEMP1;
 
 
 
 
 
---例子3
 
SELECT TEMP1.NAME,TEMP1.BIRTHDAY FROM
 
(
 
SELECT NAME,BIRTHDAY FROM USER
 
) AS TEMP1;
 
 
 
 
 
---例子4
 
SELECT N,B FROM
 
(
 
SELECT NAME,BIRTHDAY FROM USER
 
) AS TEMP1(N,B);
 
 
 
 
 
---例子5
 
SELECT AAA.A,AAA.B,XXX.X,XXX.Y FROM
 
(
 
SELECT NAME,BIRTHDAY FROM USER
 
) AS AAA(A,B),--集合1
 
(
 
SELECT NAME,BIRTHDAY FROM USER
 
) AS XXX(X,Y)--集合2
 
WHERE AAA.A=XXX.X AND AAA.B=XXX.Y--兌两个集合  
 

看到上面的例??jin)吗Q我们可以给临时集合命名Q还可以l重命名临时集合的列名,q可以关联两个(f)旉合,MQ操作(f)旉合和操作表没有区别?/font>

Temporary table

临时表(TEMPORARY TABLEQ通常应用在需要定义(f)旉合的场合。但是,在大部分需要(f)旉合的时候,我们Ҏ(gu)׃需要定义(f)时表。当我们在一条SQL语句中只使用一ơ(f)旉合时Q我们可以用嵌套表表达式来定义临时集合Q当我们在一条SQL语句中需要多ơ用同一临时集合Ӟ我们可以使用公共表表辑ּQ只有当我们在一个工作单元中的多条SQL语句中用同一临时集合Ӟ我们才需要定义(f)时表?/font>

   可以通过以下三种方式定义临时表:(x)

Ҏ(gu)1Q?nbsp; 
DECLARE GLOBAL TEMPORARY TABLE SESSION.EMP  
(  
    NAME VARCHAR(10),---姓名  
    DEPT SMALLINT,---部门  
    SALARY DEC(7,2)---工资  
)  
ON COMMIT DELETE ROWS;  
   
Ҏ(gu)2Q?nbsp; 
DECLARE GLOBAL TEMPORARY TABLE session.emp  
LIKE staff INCLUDING COLUMN DEFAULTS  
WITH REPLACE  
ON COMMIT PRESERVE ROWS;  
   
Ҏ(gu)3Q?nbsp; 
DECLARE GLOBAL TEMPORARY TABLE session.emp AS  
(  
    SELECT * FROM staff WHERE <condition>  
)  
DEFINITION ONLY  
WITH REPLACE;  
 

    定义?jin)?f)时表后,我们可以像用普通表一样用(f)时表。(f)时表只对定义它的用户有效Q不同用户可以在同一旉定义同名的(f)时表Q他们之间互不媄(jing)响。(f)时表的生命周期是SESSIONQ当SESSION关闭Ӟ临时表将自动删除Q这也是临时表的模式名只能ؓ(f)SESSION的原因。此外,我们q可以给临时表定义烦(ch)引。更多细节请参考DB2 信息中心(j)?/font>




牛虾 2010-04-14 16:53 发表评论
]]>
在Eclipse中去掉多余的UIlg的几个方?/title><link>http://www.tkk7.com/yes1983/archive/2009/07/26/Eclipse_extension_Activities_remove.html</link><dc:creator>牛虾</dc:creator><author>牛虾</author><pubDate>Sun, 26 Jul 2009 07:59:00 GMT</pubDate><guid>http://www.tkk7.com/yes1983/archive/2009/07/26/Eclipse_extension_Activities_remove.html</guid><wfw:comment>http://www.tkk7.com/yes1983/comments/288445.html</wfw:comment><comments>http://www.tkk7.com/yes1983/archive/2009/07/26/Eclipse_extension_Activities_remove.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/yes1983/comments/commentRss/288445.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/yes1983/services/trackbacks/288445.html</trackback:ping><description><![CDATA[<font style="background-color: #cce8cf">Eclipse的扩展机制是其一个重要特?但随着Eclipse功能做强,插g来多,你会(x)发现GUI上的图标来多,Menu,toolbar,context menu都被占满?其实很多itemq不是我们需要的,但是contributeq些item的插件我们是需要的,那怎么L它们扩展的那些菜单项?<br /> 1.在Plugin.xml中定?br />    q是最单的办法,很多时候我们自己想写代码来L一些菜单项,但效果ƈ不好.所以能在Plugin.xml中定制的,我们?nbsp;量写在plugin.xml里面.下面举一个右键菜单的例子:<br />    扩展右键菜单需要扩展org.eclipse.ui.popupMenus扩展?我们一般都在它下面new一个action,但这个action扩展之后不管?nbsp; M界面都会(x)出现,如果我们惛_某些条g下隐藏掉它该怎么?仔细观察下org.eclipse.ui.popupMenus扩展?其实我们q可以新建objectContribution扩展<br />    <extension<br />          point="org.eclipse.ui.popupMenus"><br />    <objectContribution<br />             id="my.example.objectContribution"<br />             nameFilter="*example*"<br />             objectClass="java.io.File"><br />          <action<br />                class="my.example.MyAction"<br />                id="my.example.MyAction"<br />                label="Exe"<br />                menubarPath="additional"><br />          </action><br />       </objectContribution><br />     </extension><br />     objectContribution里面也包含一个action,但这个action在popupmenu里出现是有条件的:我们l它定义?jin)一个nameFilter, 只有当selection()的path中包含了(jin)"example"才会(x)昄,否则q个action是不?x)出现?nbsp;popupmenu里的.q里的selection假设选中的是一个File,如果选中的是你自己写的类,那namefilter?x)在你的cȝtoStringҎ(gu)里面找keyword.<br /> 2.使用Eclipse的Activities扩展<br />   plugin.xmlq不能解x(chng)有问?当我们实在没有办法在plugin.xml中限制某些extension的出现的时?可以考虑使用Eclipse的Activities.Activities的官方定义大家可以google一下eclipse的help.我个人的理解是它可以和perspective一h制UI的显C?但是Perspective设计的太易于扩展?假如Plugin A在perspective上扩展了(jin)一个UI,那么Plugin B在每ơ进入这个perspective的时候就一定可以看得见?而且在Eclipse的扩展机制下,Plugin B是没有权利去删了(jin)Plugin A的contribution?Eclipse的ExtensionRegistry倒是提供?jin)一个removeExtensionҎ(gu),但运行的时候会(x)报错).在这L(fng)情况?Activities的h(hun)值就体现出来?你只要给它一个Extension的id,它就可以帮你把这个Extension disable?例如:<br /> <extension<br />          point="org.eclipse.ui.activities"><br />       <activity<br />             id="my.example.activity"<br />             name="WizardActivity"><br />       </activity><br />       <activityPatternBinding<br />             activityId="my.example.activity"<br />             pattern="my\.example/mywizard"><br />       </activityPatternBinding><br />  </extension><br />  比较重要的是activityPatternBinding中的pattern属?它是由plugin id + "/" + local-idl成.比如在插件my.example中扩展了(jin) org.eclipse.ui.newWizards,id是mywizard,那么上面q个activityPatternBinding׃(x)disable掉my.example的mywizard扩展,你在 GUI中就看不见这个wizard?pattern是支持正则表辑ּ?所以如果有"."的话需要用转义字符\.注意,q里的disable的意思ƈ不是说我把mywizardq个扩展删掉?而是屏蔽?jin)?mywizard仍然?nbsp;ExtensionRegistry?<br /> 3.用代码来动态控制UI<br />  Ҏ(gu)2只是隐藏掉一些扩?但是有一些需求ƈ不是单的隐藏可以了(jin),我最q碰到的一个需求就?有一个flag,只有当flag==1的时候扩展是可见?否则是不可见?需要disableq个扩展.q时必要加一些代码才能实C(jin),q是以方?中的mywizardZ:<br />  IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport(); <br />   IActivityManager activityManager = workbenchActivitySupport.getActivityManager();<br />   Set enabledActivityIds = new HashSet(activityManager.getEnabledActivityIds()); <br />         if(flag==1)<br />   {<br />           if (enabledActivityIds.add("my.example.activity")) <br />               workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);  <br />   }<br />   else{<br />            if(enabledActivityIds.remove("my.example.activity"))<br />               workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);<br />   }<br />  Activities可以是enable或者disable?当你在plugin.xml中定义好?jin)一个Activity,~省它是disable?是说activityPatternBinding 匚w的扩展是?x)被disable?但你也可以把Activities设成enable?在plugin.xml或者用代码都可以设|?,它匹配的扩展是可以正怋用的.<br />  在上面的code sample?我们通过activityManager.getEnabledActivityIds()得到所有enable的Activities.如果flag==1,那my.example.activity 也应该被加入到enable Activities?q样mywizard可以显C在界面?反之,p在enable Activities中remove掉my.example.activity,它就变成<br />  disable,?x)把mywizard隐藏.</font> <img src ="http://www.tkk7.com/yes1983/aggbug/288445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/yes1983/" target="_blank">牛虾</a> 2009-07-26 15:59 <a href="http://www.tkk7.com/yes1983/archive/2009/07/26/Eclipse_extension_Activities_remove.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DB2学习(fn)W记http://www.tkk7.com/yes1983/archive/2009/06/17/282922.html牛虾牛虾Wed, 17 Jun 2009 14:02:00 GMThttp://www.tkk7.com/yes1983/archive/2009/06/17/282922.htmlhttp://www.tkk7.com/yes1983/comments/282922.htmlhttp://www.tkk7.com/yes1983/archive/2009/06/17/282922.html#Feedback0http://www.tkk7.com/yes1983/comments/commentRss/282922.htmlhttp://www.tkk7.com/yes1983/services/trackbacks/282922.html 1.q不是用index׃定快.有时候一个表只有很少的records,那么你直接scanq个?比你先读index,再访问表要快.
2.不过大多数情况下q是用index快一?要不然这个技术就没有意义?.DB2中index的应用需要两个前提条?
  阅读全文

牛虾 2009-06-17 22:02 发表评论
]]>
TreeViewer的setselectionҎ(gu)不能选中?wi)的子节?http://www.tkk7.com/yes1983/archive/2009/05/11/270018.html牛虾牛虾Mon, 11 May 2009 03:27:00 GMThttp://www.tkk7.com/yes1983/archive/2009/05/11/270018.htmlhttp://www.tkk7.com/yes1983/comments/270018.htmlhttp://www.tkk7.com/yes1983/archive/2009/05/11/270018.html#Feedback0http://www.tkk7.com/yes1983/comments/commentRss/270018.htmlhttp://www.tkk7.com/yes1983/services/trackbacks/270018.html

牛虾 2009-05-11 11:27 发表评论
]]>
使用Java操作文本文g的方法详?转蝲)http://www.tkk7.com/yes1983/archive/2009/02/17/255126.html牛虾牛虾Tue, 17 Feb 2009 08:17:00 GMThttp://www.tkk7.com/yes1983/archive/2009/02/17/255126.htmlhttp://www.tkk7.com/yes1983/comments/255126.htmlhttp://www.tkk7.com/yes1983/archive/2009/02/17/255126.html#Feedback0http://www.tkk7.com/yes1983/comments/commentRss/255126.htmlhttp://www.tkk7.com/yes1983/services/trackbacks/255126.html最初java是不支持Ҏ(gu)本文件的处理的,Z(jin)弥补q个~憾而引入了(jin)Reader和W(xu)riter两个c,q两个类都是抽象c,W(xu)riter?write(char[] ch,int off,int
length)Qflush()和close()Ҏ(gu)为抽象方法,Reader中read(char[] ch,int off,int length)和close()Ҏ(gu)是抽象方法。子cd该分别实C们?br />   当我们读写文本文件的时候,采用Reader是非常方便的Q比如FileReaderQInputStreamReader和BufferedReader。其中最重要的类是InputStreamReaderQ?br /> 它是字节转换为字W的桥梁。你可以在构造器重指定编码的方式Q如果不指定的话采用底层操作系l的默认~码方式Q例如GBK{。当使用FileReaderd文g
的时候?br /> FileReader fr = new FileReader("ming.txt");
int ch = 0;
while((ch = fr.read())!=-1 )
{
System.out.print((char)ch);
}
其中read()Ҏ(gu)q回的是d得下个字W。当然你也可以用read(char[] ch,int off,int length)q和处理二进制文件的时候类|不多说了(jin)。如果?br /> InputStreamReader来读取文件的时?br /> while((ch = isr.read())!=-1)
{
System.out.print((char)ch);
}
q和FileReaderq没有什么区别,事实上在FileReader中的Ҏ(gu)都是从InputStreamReader中承过来的。read()Ҏ(gu)是比较好Ҏ(gu)间的Q如果ؓ(f)?jin)提高效?br /> 我们可以使用BufferedReader对Readerq行包装Q这样可以提高读取得速度Q我们可以一行一行的d文本Q用readLine()Ҏ(gu)?br /> BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt")));
String data = null;
while((data = br.readLine())!=null)
{
System.out.println(data);
}
当你明白?jin)如何用Reader来读取文本文件的时候那么用Writer写文件同样非常简单。有一炚w要注意,当你写文件的时候,Z(jin)提高效率Q写入的数据?x)?br /> 攑օ~冲区,然后写入文g。因此有时候你需要主动调用flush()Ҏ(gu)。与上面对应的写文g的方法ؓ(f)Q?br /> FileWriter fw = new FileWriter("hello.txt");
String s = "hello world";
fw.write(s,0,s.length());
fw.flush();
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("hello2.txt"));
osw.write(s,0,s.length());
osw.flush();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("hello3.txt")),true);
pw.println(s);
不要忘记用完后关闭流Q下面是个小例子Q帮助新手理解。其实有的时候java的IOpȝ是需要我们多记记的,不然哪天q疏了(jin)?/font>

import java.io.*;
public class TestFile2
{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("ming.txt");
char[] buffer = new char[1024];
int ch = 0;
while((ch = fr.read())!=-1 )
{
System.out.print((char)ch);
}
  InputStreamReader isr = new InputStreamReader(new FileInputStream("ming.txt"));
while((ch = isr.read())!=-1)
{
System.out.print((char)ch);
}
  BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt")));
String data = null;
while((data = br.readLine())!=null)
{
System.out.println(data);
}
  FileWriter fw = new FileWriter("hello.txt");
String s = "hello world";
fw.write(s,0,s.length());
fw.flush();
  OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("hello2.txt"));
osw.write(s,0,s.length());
osw.flush();
  PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("hello3.txt")),true);
pw.println(s);

  fr.close();
isr.close();
br.close();
fw.close();
osw.close();
pw.close();
}
}

java中多U方式读文g
一、多U方式读文g内容?br /> 1、按字节d文g内容
2、按字符d文g内容
3、按行读取文件内?br /> 4、随取文件内?/font>

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader;
public class ReadFromFile {
/**
* 以字节ؓ(f)单位d文gQ常用于Mq制文gQ如囄、声韟뀁媄(jing)像等文g?br /> * @param fileName 文g的名
*/
public static void readFileByBytes(String fileName){
File file = new File(fileName);
InputStream in = null;
try {
System.out.println("以字节ؓ(f)单位d文g内容Q一ơ读一个字节:(x)");
// 一ơ读一个字?br /> in = new FileInputStream(file);
int tempbyte;
while((tempbyte=in.read()) != -1){
System.out.write(tempbyte);
}
in.close();
} catch (IOException e) {
e.printStackTrace();
return;
}
try {
System.out.println("以字节ؓ(f)单位d文g内容Q一ơ读多个字节Q?);
//一ơ读多个字节
byte[] tempbytes = new byte[100];
int byteread = 0;
in = new FileInputStream(fileName);
ReadFromFile.showAvailableBytes(in);
//d多个字节到字节数l中QbytereadZơ读入的字节?br /> while ((byteread = in.read(tempbytes)) != -1){
System.out.write(tempbytes, 0, byteread);
}
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (in != null){
try {
in.close();
} catch (IOException e1) {
}
}
}
}
/**
* 以字Wؓ(f)单位d文gQ常用于L本,数字{类型的文g
* @param fileName 文g?br /> */
public static void readFileByChars(String fileName){
File file = new File(fileName);
Reader reader = null;
try {
System.out.println("以字Wؓ(f)单位d文g内容Q一ơ读一个字节:(x)");
// 一ơ读一个字W?br /> reader = new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) != -1){
//对于windows下,rnq两个字W在一hQ表CZ个换行?br /> //但如果这两个字符分开昄Ӟ?x)换两次行?br /> //因此Q屏蔽掉rQ或者屏蔽n。否则,会(x)多出很多I?br /> if (((char)tempchar) != 'r'){
System.out.print((char)tempchar);
}
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
System.out.println("以字Wؓ(f)单位d文g内容Q一ơ读多个字节Q?);
//一ơ读多个字符
char[] tempchars = new char[30];
int charread = 0;
reader = new InputStreamReader(new FileInputStream(fileName));
//d多个字符到字W数l中QcharreadZơ读取字W数
while ((charread = reader.read(tempchars))!=-1){
//同样屏蔽掉r不显C?br /> if ((charread == tempchars.length)&&(tempchars[tempchars.length-1] != 'r')){
System.out.print(tempchars);
}else{
for (int i=0; i<charread; i++){
if(tempchars[i] == 'r'){
continue;
}else{
System.out.print(tempchars[i]);
}
}
}
}

} catch (Exception e1) {
e1.printStackTrace();
}finally {
if (reader != null){
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* 以行为单位读取文Ӟ常用于读面向行的格式化文?br /> * @param fileName 文g?br /> */
public static void readFileByLines(String fileName){
File file = new File(fileName);
BufferedReader reader = null;
try {
System.out.println("以行为单位读取文件内容,一ơ读一整行Q?);
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
//一ơ读入一行,直到dnull为文件结?br /> while ((tempString = reader.readLine()) != null){
//昄行号
System.out.println("line " + line + ": " + tempString);
line++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null){
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
/**
* 随机d文g内容
* @param fileName 文g?br /> */
public static void readFileByRandomAccess(String fileName){
RandomAccessFile randomFile = null;
try {
System.out.println("随机d一D|件内容:(x)");
// 打开一个随问文件流Q按只读方式
randomFile = new RandomAccessFile(fileName, "r");
// 文g长度Q字节数
long fileLength = randomFile.length();
// L件的起始位置
int beginIndex = (fileLength > 4) ? 4 : 0;
//读文g的开始位|移到beginIndex位置?br /> randomFile.seek(beginIndex);
byte[] bytes = new byte[10];
int byteread = 0;
//一ơ读10个字节,如果文g内容不10个字节,则读剩下的字节?br /> //一ơ读取的字节数赋lbyteread
while ((byteread = randomFile.read(bytes)) != -1){
System.out.write(bytes, 0, byteread);
}
} catch (IOException e){
e.printStackTrace();
} finally {
if (randomFile != null){
try {
randomFile.close();
} catch (IOException e1) {
}
}
}
}
/**
* 昄输入中q剩的字节数
* @param in
*/
private static void showAvailableBytes(InputStream in){
try {
System.out.println("当前字节输入中的字节数?" + in.available());
} catch (IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
String fileName = "C:/temp/newTemp.txt";
ReadFromFile.readFileByBytes(fileName);
ReadFromFile.readFileByChars(fileName);
ReadFromFile.readFileByLines(fileName);
ReadFromFile.readFileByRandomAccess(fileName);
}
}

二、将内容q加到文件尾?/font>

import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;

/**
* 内容追加到文gN
*/
public class AppendToFile {

/**
* AҎ(gu)q加文gQ用RandomAccessFile
* @param fileName 文g?br /> * @param content q加的内?br /> */
public static void appendMethodA(String fileName,


String content){
try {
// 打开一个随问文件流Q按d方式
RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
// 文g长度Q字节数
long fileLength = randomFile.length();
//写文g指针Ud文g?br /> randomFile.seek(fileLength);
randomFile.writeBytes(content);
randomFile.close();
} catch (IOException e){
e.printStackTrace();
}
}
/**
* BҎ(gu)q加文gQ用FileWriter
* @param fileName
* @param content
*/
public static void appendMethodB(String fileName, String content){
try {
//打开一个写文g器,构造函C的第二个参数true表示以追加Ş式写文g
FileWriter writer = new FileWriter(fileName, true);
writer.write(content);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
String fileName = "C:/temp/newTemp.txt";
String content = "new append!";
//按方法Aq加文g
AppendToFile.appendMethodA(fileName, content);
AppendToFile.appendMethodA(fileName, "append end. n");
//昄文g内容
ReadFromFile.readFileByLines(fileName);
//按方法Bq加文g
AppendToFile.appendMethodB(fileName, content);
AppendToFile.appendMethodB(fileName, "append end. n");
//昄文g内容
ReadFromFile.readFileByLines(fileName);
}
}



牛虾 2009-02-17 16:17 发表评论
]]>
Eclipse的奇怪问题ȝ(不断更新)http://www.tkk7.com/yes1983/archive/2008/12/02/243982.html牛虾牛虾Tue, 02 Dec 2008 09:52:00 GMThttp://www.tkk7.com/yes1983/archive/2008/12/02/243982.htmlhttp://www.tkk7.com/yes1983/comments/243982.htmlhttp://www.tkk7.com/yes1983/archive/2008/12/02/243982.html#Feedback3http://www.tkk7.com/yes1983/comments/commentRss/243982.htmlhttp://www.tkk7.com/yes1983/services/trackbacks/243982.html 2.Plugin A 依赖 Plugin B.B也把相应的package export出来?但是Aq是找不到B里面定义的类.修改A的MANIFEST.MF文g,在dependence tab里去掉Plugin B,再添加B.此时发现?,6个同L(fng)Plugin B出现在选择plugin的list?cancel 掉该对话?然后重启eclipse,在A的dependence里面重新加上B,问题解决.
3.当我们通过在plugin.xml中用extension的方式定义action的时?你会(x)发现你定义的actionset和action在GUI出现的顺序不是你可以控制?是说同一个actionset下的多个action不是按你定义的先后顺序出现在E序的界面上?q样对actionq行排序?其实仔细观察一?你会(x)发现action在GUI出现的顺序是和你定义action的顺序相反的,比如你先后定义了(jin)3个action A,B,C,那么你就?x)在GUI上看见action的顺序是C,B,A.如果你定义了(jin)多个actionset,你会(x)发现q个规律不适用与actionset,actionset在界面上出现的顺序其实是和它的id的排序相反的.比如你定义了(jin)三个actionset,它们的id分别?seta,setb,setc,你会(x)发现GUI上出现的序是setc,setb,seta
4.双击ȀzTreeViewer的celleditor
  JFace的Viewer都有单元格编辑功?但是celleditor默认的实现是单击Ȁzeditor,双击选中item.如果需要改成单击选中item,双击Ȁzeditor?Eclipse的官|上好像也有人问到这个问?不过目前好像是开?jin)一个bug,期待eclipse的下个版本解册个问?但最q找C(jin)一个用SWT来解册个问题的Ҏ(gu):
       Tree tree=treeViewer.getTree();
    final TreeEditor editor = new TreeEditor(tree);
  editor.horizontalAlignment = SWT.LEFT;
  editor.grabHorizontal = true;
  // Use a mouse listener, not a selection listener, because you're
  // interested
  // in the selected column as well as row
  tree.addMouseListener(new MouseAdapter() {
   public void mouseDoubleClick(MouseEvent event) {
    final TreeItem item = tree.getSelection()[0];
    // Create a text field to do the editing
    final Text text = new Text(tree, SWT.NONE);
    text.setText(item.getText());
    text.selectAll();
    text.setFocus();
    text.addFocusListener(new FocusAdapter() {
     public void focusLost(FocusEvent event) {
      text.dispose();
     }
    });
    // Set the text field into the editor
    editor.setEditor(text, item);
   }
  });


牛虾 2008-12-02 17:52 发表评论
]]>
Eclipse中如何消除快捷键定义冲突(keybinding conflict)http://www.tkk7.com/yes1983/archive/2008/10/14/234273.html牛虾牛虾Tue, 14 Oct 2008 09:42:00 GMThttp://www.tkk7.com/yes1983/archive/2008/10/14/234273.htmlhttp://www.tkk7.com/yes1983/comments/234273.htmlhttp://www.tkk7.com/yes1983/archive/2008/10/14/234273.html#Feedback0http://www.tkk7.com/yes1983/comments/commentRss/234273.htmlhttp://www.tkk7.com/yes1983/services/trackbacks/234273.html    ׃Eclipse的易扩展?理论上可以有无数个Actionq行在一个RCP E序?但是快捷键是有限?其是一些常用的,像Ctrl+C,Ctrl+S之类的普通用戯记得住的那么几?万一你自定义的Action的快捷键和Eclipse默认的发生了(jin)冲突怎么?比如Eclipse默认Ctrl+S是Save的快捷键,但是你又自定义了(jin)一个SaveAction,希望用户按下Ctrl+S之后执行的是自己的SaveAction的runҎ(gu).
     一般给Actionl定快捷键的Ҏ(gu)是自定义binding和command,然后在action中指定definition id为command的id.如下:
<extension
           point="org.eclipse.ui.bindings">
        <key
              commandId="myplugin.actions.save"
              contextId="org.eclipse.ui.contexts.window"
              schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
              sequence="CTRL+S">
        </key>
     </extension>
     <extension
           point="org.eclipse.ui.commands">
        <command
              id="myplugin.actions.save"
              name="Save">
        </command>
     </extension>

q样的方法一般是不会(x)有冲H的,但是像我们上面提到的情况,如果你自定义一个binding,它的key sequence是Ctrl+S,那就?x)有问?׃org.eclipse.ui插g已经提供?jin)一个Ctrl+S的快捷键,所以系l中?x)有两个Ctrl+S,q样Eclipse?x)在右下角pop up一个assist dialog,让你从两个Action中选择一?q样可能?x)造成一些用户用上的不?fn)?
解决办法:
    1.直接改快捷键.
      q个最单了(jin),比如把你自己的save定义成Alt+S.但是q个Ҏ(gu)也是最不好的方?因ؓ(f)很多用户q不知道Alt+S在你的程序里面就是save.
    2.修改自定义action的definition id
      我们刚才说过,action的definition idl定着一个command,而command又对应着一个binding,Eclipse通过q样的方式实现action和快捷键的绑?我们再来看看Eclipse定义的command和key binding(摘自org.eclipse.ui的plugin.xml):
      <command
            name="%command.save.name"
            description="%command.save.description"
            categoryId="org.eclipse.ui.category.file"
            id="org.eclipse.ui.file.save" />
      <key
            commandId="org.eclipse.ui.file.save"
            sequence="M1+S"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" />
      <key

     Eclipse的Save Action把definition id指定为org.eclipse.ui.file.save,然后它就和上面的commandq行?jin)绑?而这个command对应的key是"M1+S"(Ctrl + S),q样实C(jin)快捷键绑?如果我们也把自定义的Save Action的definition id指定为org.eclipse.ui.file.save,是不是就可以辑ֈ目的?{案是肯定的.
     Eclipse中的Action存在着一个类?优先U?的概?具体实现是通过action handler).?具体"的action,优先U越?Eclipse的Save Action明显是一个global的action,(同样的global actionq有copy, cut,undo,redo{等).而我们自定义的action一般是实现?font style="background-color: #cce8cf">IWorkbenchWindowActionDelegate
接口?是?它是contribute to workbench window?它是一个workbench action,它的优先U就高(sh)Mglobal action.同理,如果你定义一个editor action或者view action,׃它比workbenchq?具体"(workbench可以包含多个editor或view,workbench action对这些editor或view都是有效?而editor action只对某个具体的editor有效),所以editor action的优先񔞮高?sh)workbench action.q样,如果自定义的action和eclipse~省的action都绑定到同一个command,那么eclipse runtim最后会(x)选择自定义的action来执?
    3.l极解决大法:自定义schema
     Eclipse 有一个default的快捷键schema文g:org.eclipse.ui.defaultAcceleratorConfiguration.它存储着Eclipse所有的快捷?如果你自定义一个自qschema文g,q把它设成当前用的schema文g,那么Eclipse׃(x)调用自定义的schema文g.(新的schema文g可以在org.eclipse.ui.bindings扩展点中定义,h?在定义新schema的时候由一个parentID属?如果你定义了(jin)?新的schema?x)像cȝ承一hparent schema里面的key binding全承下?如果不定?则是一个全新的schema)
    假定我们已经有了(jin)一个新的schema文g,id是myplugin.schema.然后我们在org.eclipse.ui.bindings下定义一个key:
<key
              commandId="myplugin.actions.save"
              contextId="org.eclipse.ui.contexts.window"
              schemaId="myplugin.schema"
              sequence="CTRL+S">
        </key>
我们已经把schemaId换成?jin)myplugin.schema,表示我们把CTRL+S加到?jin)myplugin.schema?然后把新建的schema文g在product配置文gplugin_customization.ini中设|成当前的key schema文g:
org.eclipse.ui/KEY_CONFIGURATION_ID=myplugin.schema

q种Ҏ(gu)虽然ȝ(ch)?jin)一?但却可以L又治?而且׃可以指定parent schema,我们完全可以把org.eclipse.ui.defaultAcceleratorConfiguration作ؓ(f)parent schema,l承它全部的快捷键配|?只定制几个会(x)产生冲突的快捷键卛_


     



牛虾 2008-10-14 17:42 发表评论
]]>
վ֩ģ壺 ձ˵ɫwwwһ| ֻĻ| Ƶ߹ۿַ| eeussӰԺ| ɫվwwwͬ| þþƷ㽶| ޾ƷձƷ| ѻɫappվ| ձվ| պƷרѲ| ƷƵȫѹۿ | Ļ| ޾Һվ| ޾ƷƵ߲| ޹Ʒһߵ| һƬվ߹ۿ| ůůձ| ëƬaëƬѲ| 57paoƵ| þ߿߿| žƷƵվ | һAvëƬþþƷ| Ƭ߹ۿ| ƵƷѵĹ| ѹۿaëƬվ| ĻѸ| 91Դվ| ߹ۿѹۿ| ѻɫַվ| պŷëƬƵ| ŮƵ| ձһ߹ۿ| ɫžžȫƵ| պһ| һɫݳѾƷվ| ɫ߳Ƶ| ŮƵ| ƬAëƬ鴤 | պվ| ޾Ʒ| ɫ6|