Grease's Blog----Java技术

记录生活点滴,记录技术历程

导航

<2010年9月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

文章分类

档案

随笔分类

java技术站点

柯柯

登录

2005年2月21日 #

WinCVS与CVSNT使用

 1.  WinCVS与CVSNT简明使用手则(一)
        http://www.dingl.com/view.shtml?xh=211
        WinCVS与CVSNT简明使用手则(二)
        http://www.dingl.com/view.shtml?xh=212
        根据这篇文章,使用cvsnt在WINXP上成功架设了CVS服务器.并用WinCVS完成了CVS的一些基本操作.

    2.  WinCVS操作手册.pdf
        大小:2,991,880字节
        WinCVS不错的入门手册

    3. CVS快速入门.pdf
         大小:1,724,983字节
         虽然介绍的很浅,但提到的几个知识点都介绍的很详细.


1.  CVS服务端安装
    CVSNT 2.0.41a

    CVS客户端安装
    Python 2.3.4
    WinCvs13b17

2.  CVS服务端和CVS客户端需要建立的若干工作目录
    CVS服务端:
    1.  F:\KHRoot   (存放自己源代码的根目录)
    2.  F:\KHTemp   (存放CVS出错信息的目录)

    CVS客户端:
    1.  E:\CVSClient\Admin  (管理员工作目录,还可以有多个工作目录)
    2.  E:\CVSTemp          (WinCVS临时目录)

3.  CVS服务端的设置
    1.  设置两个目录
    2.  复选框"Use local users for pserver ..."要选上

4.  CVS客户端的设置
    1.  设置CVSROOT(关键)
        :pserver:administrator@server:F:/KHRoot

        CVSRoot字符串由如下几项组成:
        Authentication:     验证方式,默认为pserver
        Path:               CVS服务器上仓库的路径.一个CVS服务器上可以有多个仓库.用仓库的路径来标识不同的仓库.
        Host address:       CVS服务器的IP地址或者域名
        User name           用户名,冒号后可以跟密码

    2.  设置WinCVS临时目录"HOME"
        E:\CVSTemp

    3.  设置管理员的工作目录
        E:\CVSClient\Admin

        可以有多个工作目录来存放功能不同的modules,使用工具栏上的"change location"按键,进行设定.
        Checkout的module作为工作目录的下一级子目录.

    4.  设置WinCVS外挂编辑器

5.  CVS中目录的权限:
    1.  系统支持的目录权限列表:
        r   读取权限
        w   写入权限
        c   创建和删除权限
        n   没有任何权限

    2.  默认情况下,任何用户都拥有任何目录的所有权限.
        所以管理员在为某个用户建立了新的工作目录之后,要立刻手工设置这个目录的权限.

6.  管理员的任务和相应操作:
    1.  修改默认模块(CVSRoot管理模块)的权限,只让administrator拥有rcw三种全部权限.
        1.  Checkout默认模块(CVSRoot管理模块)

        2.  对[CVSRoot]模块执行下列CVS命令:
            cvs chacl default:n             取消所有用户的默认权限
            cvs chacl administrator:rcw     设置administrator拥有所有权限
            cvs chown administrator         更改[CVSRoot]的拥有者
            cvs lsacl                       查看[CVSRoot]的权限状态

    2.  为普通用户建立工作目录
        1.  修改[CVSRoot]模块下的modules文件,一个用户一个模块

        2.  modules文件的编写方法
            [模块1的描述][参数][相对目录路径1]
            [模块2的描述][参数][相对目录路径2]
            ...
            [模块n的描述][参数][相对目录路径n]

            如:
            CVSRoot                 CVSRoot
            Jackey工作目录    -a    Jackey
            _DOCenter               _DOCenter

            WinCVS在Checkout时能自动列出这个文件中所列出的modules.
            如果不在这个文件中列出module,就只能手工在WinCVS中输入module的名称.

        3.  commit modules文件

        4.  上传工作目录
            在E:\CVSClient\Admin下建立每个用户的工作目录
            然后将这些工作目录Import
            最后将本地这些工作目录删除

        5.  为每个用户分别设置各自目录的访问权限,只有自己才能访问自己的工作目录
            1.  Checkout每个用户的工作目录到[Admin]目录下.

            2.  选中某个用户的工作目录之后,执行下列CVS命令:
                cvs chacl default:n         取消所有用户的默认权限
                cvs chacl 用户名:rcw        设置指定用户拥有所有权限
                cvs lsacl                   查看指定用户工作目录的权限状态

    3.  添加和删除用户:
        直接执行下列CVS命令:
        cvs passwd -a Killer            添加新用户[Killer]
        cvs passwd -r Jackey Killer     绑定[Killer]到NT用户[Jackey]
        cvs passwd -X Killer            删除用户[Killer]

7.  CVSNT系统中用户管理原则:
    1.  CVSNT的用户和CVSNT所在机器上的NT用户是相关联的.

    2.  只有administrator身份的用户,才有权在CVSNT中创建和删除用户.

    3.  创建新的CVS用户,必须与CVSNT所在机器上的NT用户绑定

    4.  一个NT用户可以和多个CVS用户绑定

8.  一般CVS用户在WinCVS中的操作:
    1.  登录CVS服务器
        菜单Admin->Login...

    2.  登出CVS服务器
        菜单Admin->Logout

    3.  Import module的操作
        1.  Import指定的目录成为一个CVS module:
            需要Import的module其实就是一个包含项目所有文件的目录,比如目录_DOCenter
            将工作目录设定到module的父目录,比如目录Yang2003
            然后在左侧的[Workspace]栏中右击需要Import的module名(目录名_DOCenter),选快捷菜单中的Import module...
            根据向导完成余下的工作.

        2.  Checkout刚才Import的module,设置权限:
            Import之后,可以把本地的目录_DOCenter删除
            然后在左侧的[Workspace]栏中右击工作目录Yang2003,选快捷菜单中的Checkout module...
            输入module名_DOCenter后按"确定"按键,就可以把刚Import的module _DOCenter Checkout到工作目录Yang2003下.
            选中左侧的[Workspace]栏中的_DOCenter,按快捷键[CTRL+L],顺序执行如下CVS命令,以设置权限:
            cvs chacl default:n
            cvs chacl yang:rcw
            cvs chown yang
            cvs lsacl

        3. Checkout一个module中指定目录的方法
            在左侧的[Workspace]栏中右击工作目录Yang2003,选快捷菜单中的Checkout module...
            输入module名J2ME_PRJ/CIAYhb,
            选中复选框Check out into directory,并在右侧的输入框中输入CIAYhb
            (如果选中下方的复选框Don't shorten module path,那么Checkout时创建的CIAYhb目录中仍然会有   J2ME_PRJ/CIAYhb的路径)
             最后后按"确定"按键,就可以在工作目录Yang2003下Checkout module J2ME_PRJ中的CIAYhb目录,而不是整个module J2ME_PRJ.

    4.  WinCVS的Update settings对话框中各复选框的含义
        1.  Checkout file to standard output
            检出文件到标准输出

        2.  Do not recurse into sub-folders
            不递归子目录,只update当前目录下的文件

        3.  Reset any sticky date/tag/'-k' options
            重置所有的粘贴性的日期/标示/-k选项
            删除分支/标签,取得最新的版本,用于从分支切换会主干

        4.  Create missing directories that exist in the repository
            创建在仓库丢失的目录

        5.  Get the clean copy
            获得干净的拷贝,本地文件修改错误时,可以把服务器上的文件取回覆盖本地文件(用于本地文件修改错误的情况).

    5.  在某个module中添加一个目录或文件
        菜单[Modify]中的[Add selection]用来添加目录和文本文件
        [Add binary]用来添加二进制文件

        添加文件之后还要做一次commit操作,整个添加操作才算完成.

        添加目录不需要commit操作

    6.  从CVS服务器取回某个程序的某个版本的操作
        在Update settings对话框的Update options选项卡中
        选中Retrieve rev./tag/brain复选框,并在后面的组合框中输入某个以前的版本号.

    7.  获得CVS服务器上的模块列表的两种方法:
        这两种方法都不依赖CVS服务器上CVSRoot目录下的modules文件,
        modules文件中没有登记的module也能列出.

        1.  菜单[Admin]->[Admin macros]->[Browse Repository Folders...]
            在对话框Browse Repository Folders中输入CVSROOT:
            :pserver:test@server:E:/CVSRoot

            (不需要输密码,不需要使用administrator用户)
            选中一个module目录后,按"Checkout..."按键,就能导出指定的module.

        2.  菜单[Admin]->[Admin macros]->[List Module Contents]
            在对话框Title中输入CVSROOT:
            :pserver:test:test@server:E:/CVSRoot

            (必须输入密码,不需要使用administrator用户)

    8.  固定版本
        commit文件到一个指定的版本
        在对话框Commit settings的Commit options选项卡中,
        选中"Force revision/branch"复选框,并在后面的组合框中输入一个版本号.

        对应的CVS命令:cvs commit -m 测试固定版本到1.5 -r 1.5 新增的文件.doc (in directory F:\Yang2003\_DOCenter\工具软件\)

    9.  跟踪谁在编辑文件
        如果一个module是以read-only的方式Checkout,那么在编辑某个文件之前,就必须告诉CVS服务器要编辑的文件.
        这么做的好处是,其它开发人员能跟踪到谁正在编辑相应的文件.

        开始编辑
        选中要编辑的文件
        点菜单[Trace]->[Edit Selection]
        指定的文件被WinCVS解除只读状态,并设为编辑状态.

        编辑完成
        commit指定的文件
        文件被WinCVS设为只读状态

        放弃编辑
        选中指定的文件
        点菜单[Trace]->[Unlock selection]

        查看正在对指定文件进行编辑的人
        选中指定的文件
        点菜单[Trace]->[Editors]

    10. 对一个或多个文件或目录标记标签(tag)
        标记的标签可作为修订版的参照
        一个特例:对整个模块标记标签是为了将来能够重新构造模块的当前状态.
        标记标签的时机:在工程发行或开始重大修改之前

        具体操作:
        1.  选择需要标记标签的目录或文件.
        2.  点菜单[Modify]->[Create a tag on selection...]
        3.  在New tag name输入框中输入标签名
            标签的命名规则:
            必须以字母开头,后面跟多个字母,数字,减号和下划线.不能跟点号或空格.
            两个保留标签名,"HEAD"指在库中最新可用的版本,"BASE"指最后Checkout到本地的修订版.

    11. 察看文件的tag和revision状态
        选择文件快捷菜单中的[Status selection]

    12. 删除文件或目录
        删除文件
        1.  选中一个文件
        2.  点菜单[Modify]->[Remove]
        3.  Commit这个文件,这个文件在本地被物理删除,在CVS服务器上被标记为"被删除"(而非物理删除)

            Checkout模块早期的修订版,仍可以恢复出删除的文件

        删除空目录
        1.  在左侧的[WorkSpace]框中,选择要删除的空目录的父目录.
        2.  选择右键快捷菜单中的"Update selection"
        3.  在对话框"Update settings"的"Globals"选项卡中选中复选框"Prune empty directories"
        4.  按确定键

    13. Branch(分支)
        1.  创建分支
            1.  选中目录或文件
            2.  菜单[Modify]->[Create a branch...]
            3.  在"New branch"组合框中输入分支名.(分支名的命名规则和标签名一致)
            4.  选中复选框"Check that the files are unmodified before tagging"\
            5.  按"确定"键

        2.  切换至分支(可以是多个分支中的任何一个)
            1.  选择目录或文件
            2.  菜单[Modify]->[Update selection...]
            3.  选中复选框"Create missing directories that exist in the repository"
            4.  切换到选项卡"Update options"
            5.  选中复选框"Retrieve rev./tag/branch",并在复选框右侧的组合框中输入分支名
            6.  点"确定"键

        3.  切换至主干
            1.  选择目录或文件
            2.  菜单[Modify]->[Update selection...]
            3.  选中复选框"Create missing directories that exist in the repository"
            4.  选中复选框"Reset any sticky date/tag/'-k' options"
            5.  点"确定"键

        4.  合并,把对分支文件的修改合并到主干的文件上,或反之.
            1.  切换至主干
            2.  选择目录或文件
            3.  菜单[Modify]->[Update selection...]
            4.  选中复选框"Create missing directories that exist in the repository"
            5.  切换到选项卡"Merge options"
            6.  选中复选框"Only this rev./tag",并在下方复选框中输入"分支名"
            7.  点"确定"键.


9.  CVS术语
    1.  Repository  仓库;CVS服务器的根目录.模块(Module)的集合.
    2.  Module      模块;CVS服务器根目录下的第一级子目录.通常用于存放一个项目的所有文件.
    3.  Checkout    检出;通常指将仓库中的一整个模块首次导出到本地.
    4.  Import      导入;通常指提交整个目录结构并创建一个新的模块.
    5.  Release     发行版本;整个产品的版本.
    6.  Revision    修订版;单个文件的版本.(版本号总是偶数个数字)
    7.  Tag         标签;在一个开发的特定期对一个文件集指定的符号名.用来标定特定信息.
    8.  Update      更新;从模块中下载其他人修改过的文件,更新本地的拷贝.
    9.  Commit      提交;将自己修改过的文件提交到模块中.
    10. Branch      分支;一条分离的开发线,用于隔离修改.(分支的版本号总是奇数个数字)


14:10 | 评论 (2)

2005年2月1日 #

JavaEye中关于exception的论述

http://forum.javaeye.com/viewtopic.php?t=2038&postdays=0&postorder=asc&start=0#9555

10:30 | 评论 (0)

2005年1月19日 #

WindowsXP上网优化

  专业版的Windows XP默认保留了20%的带宽,其实这对于我们个人用户来说是没有什么作用的。尤其让它闲着还不如充分地利用起来。

  在“开始→运行”中输入gpedit.msc,打开组策略编辑器。找到“计算机配置→管理模板→网络→QoS数据包调度程序”,选择右边的“限制可保留带宽”,选择“属性”打开限制可保留带宽属性对话框,选择“禁用”即可。这样就释放了保留的带宽,对于上网的朋友是非常有用的。

16:22 | 评论 (0)

2005年1月18日 #

oracle学习笔记2

18、greatest、least
greatest(p1,p2,p3...)找出其中最大的
least(p1,p2,p3...)找出最小的
coalesce计算多个值的非空值
coalesce(null,null,'a')返回a
coalesce(overtime,faultreorttime)如果同一行中overtime为null,faultreporttime不为null返回faultreporttime
greatest、least函数不将日期格式的直接量串作为日期处理,还是当作串处理
extract代替to_char来选择日期值的成分(如从一个日期中选择月份和天)
extract(Month from sysdate)
BUN_TO_NUM(1)二进制转换成十进制
translate(string,if,then)在一个字符串中进行逐字符的替换
translate(7671234,234567890,'BCDEFGHIJ')  结果 GFG1BCD

19、not in、not exists和外连接
一般情况下用外部连接代替not in,可以极大的提高性能。not exists也可以替代not in,只是性能提升不够。
select vipid,vipName from t_vip where vipid not in (select v.vipid from t_vip v,t_vip_detail d where v.vipid=d.vipid)
select v.vipid,v.vipName from t_vip v where not exists (select 'x' from t_vip_detail d where v.vipid=d.vipid)
select t_vip_detail.vipid,t_vip.vipName from t_vip left join t_vip_detail on t_vip.vipid=t_vip_detail.vipid where t_vip_detail.vipid is null
以上三个效果一样

20、union(并)、intersect(交)和minus(差)
union相同的只显示一次,对这中重复现象可以用union all
intersect包含在两个查询基表都出现的
in子句的优选级比union高


21、建立临时表
create global temporary table tableName()
on commit preserve rows子句指定是否在整个会话期间都存在
on commit delete rows子句指定是否在事务处理完成时删除它的行


22、索引编排表(Index-Organized Table)
根据表的主键列对数据进行排序,索引编排表存储数据时就像把整个表存储在一个索引中那样。
create table命令的organization index子句来建立一个索引编排表

23、分区表
a、改善表的查询性能
b、使表更容易管理
c、备份和恢复操作会执行得更好
对表分区可以使用create table子句的partition by range
eg:partition by range(CategoryName)(
partition part1 values less than ('B')
 tablespace part1_ts,
partition part2 values less than (MAXVALUE)
 tablespace part2_ts
);

by range 是范围分区
by hash 是散列分区
by list 是列表分区

24、索引
构造较少的索引但每个索引中列数较多比构造较多索引但每个所以列数较少更好。
索引类型:一般索引(Not Sorted 传统索引(B树索引)对于包含有大量编号数据的列是非常有用的)、
位图索引(bitmap)、唯一索引(unique)、函数索引(function)
表空间:增加表空间的空间,可以扩展相应的数据文件或者增加新的数据文件
簇(Cluster)是一种存储表的方式,这些表密切相关并精彩一起连接进磁盘的同一区域。
例如:表A表B的数据行可以一起插入到称为簇的单个区域中,而不是将两个表放置在磁盘不同扇区。
簇键可以是多列,将这些表在查询中连接起来。

CREATE CLUSTER TEST
(
  DDD                             VARCHAR2(21 BYTE)
)

CREATE TABLE TTT
(
  TITLE  VARCHAR2(21 BYTE),
  NAME   VARCHAR2(22 BYTE)
)
CLUSTER TEST(TITLE);
在使用表ttt之前必须建立簇索引
CREATE INDEX HR.ssss
 ON CLUSTER HR.TEST
 

25、数据库连接(DataBase Link 或DB Link)
提供一个特别的途径访问远程数据库,数据库链接允许用户把一组分布式数据库视为一个独立的、一体化的数据库。
使用hr用户访问unicom,select * from t_vip@Romote_connect
建立数据库链接:create database link Romote_connect connect to unicom identified by password using 'ora9i';
使用同义词来隐藏远程链接:create synonym t_vip for t_vip@Romote_connect
这样可以直接访问select * from t_vip;

26、实体化视图
实体化视图是基于查询的数据拷贝,基于远程数据的实体化视图也称为快照
间隔刷新、基于事务的刷新
必须有Create materialized view权限

27、使用Oracle Text进行文本搜索
可以利用Oracle Text完成通配符搜索、模糊匹配、关联分级、近似搜索,项加权和单词扩展
使用两种类型的索引context、ctxcat
示例脚本:
REM *****************************
REM The BOOK_REVIEW_CONTEXT Table
REM *****************************

create table BOOK_REVIEW_CONTEXT
(Title       VARCHAR2(100) primary key,
Reviewer     VARCHAR2(25),
Review_Date  DATE,
Review_Text  VARCHAR2(4000));

insert into BOOK_REVIEW_CONTEXT values
('MY LEDGER', 'EMILY TALBOT', sysdate,
'A fascinating look into the transactions and finances of G. B. Talbot and Dora Talbot as they managed a property in New Hampshire around 1900.  The stories come through the purchases - for medicine, doctor visits and gravesites - for workers during harvests - for gifts at the general store at Christmas.  A great read. ');
create index Review_Index_Context on BOOK_REVIEW_CONTEXT(Review_Text)
indextype is ctxsys.context;

REM ****************************
REM The BOOK_REVIEW_CTXCAT Table
REM ****************************

create table BOOK_REVIEW_CTXCAT
(Title       VARCHAR2(100) primary key,
Reviewer     VARCHAR2(25),
Review_Date  DATE,
Review_Text  VARCHAR2(4000));

insert into BOOK_REVIEW_CTXCAT values
('MY LEDGER', 'EMILY TALBOT', sysdate,
'A fascinating look into the transactions and finances of G. B. Talbot and Dora Talbot as they managed a property in New Hampshire around 1900.  The stories come through the purchases - for medicine, doctor visits and gravesites - for workers during harvests - for gifts at the general store at Christmas.  A great read. ');
create index Review_Index_Ctxcat on BOOK_REVIEW_CTXCAT(Review_Text)
indextype is ctxsys.ctxcat;

contains函数--context索引 两个参数,列名和搜索串
select title from BOOT_REVIEW_CONTEXT where CONTAINS(Review_text,'property')>0
catsearch函数应用ctxcat索引 三个参数,列名,搜索串,索引集名
select title from book_review_ctxcat where catsearch(review_text,'property',null)>0
多个单词精确匹配搜索
contains(review_text,'property AND harvests')>0
catsearch(review_text,'property AND harvests',null)>0


28、pl/sql
游标,
游标属性
%found        可在游标中取一个记录  布尔型
%notfound     不能从游标中再取到记录 布尔型
%isopen       游标已经打开 布尔型
%rowcount     迄今为止从游标中取出的行数
declare pi constant number(9,7):=3.1415927;
radius integer;
area number(14,2);
cursor rad_cursor is select * from AREAS;
rad_val rad_cursor%ROWTYPE;          //声明变量rad_val,用于设定它的数据类型为rad_cursor游标的数据类型
     rowtype,type使用%rowtype什么,变量将继承游标结果集中所有列和数据类型信息
     %type,变量只能集成用于定义它的列的定义
begin
open rad_cursor;                 //打开游标,执行声明该游标的查询,并且标出将要返回的记录
fetch rad_cursor into rad_val;   //取出记录
area:=pi*power(rad_val.radius,2);
insert into AREAS values(rad_val.radius,area);
area:=pi*power(rad_val.area,2);
insert into AREAS values(rad_val.area,area);
close rad_cursor;  //关闭游标
end;
/
pl/sql的条件逻辑
if condition
   then condition
   elsif condition
    then
   else
end if;
嵌套if条件
if condition
then
    if condition
    then
    end if;
else condition
end if;
pl/sql循环
三种类型循环:
简单循环         在循环中当执行到exit或exit when时跳出
for循环   指定的循环次数
while循环  在遇到某个条件时停止循环
1、简单循环,以loop关键字开始,exit when确定何时退出,end loop为循环结束标志
loop
    fetch rad_cursor into rad_val;
    exit when rad_cursor%notfound
   
    end loop
2、for循环
for radius in 1..7 loop
end loop
for rad_val in rad_cursor 游标for循环   //该语句隐式的打开了rad_cursor游标,并将值取出放在rad_val中。
loop     //不需要检查游标的%notfound属性,它通过游标for循环自动检测的
end loop    //也不需要显示的定义rad_val变量
3、while循环
while rad_cursor%notfound
loop
end loop

case语句控制分支逻辑
case
when condition
then command
when condition
then command
else command
end case;
case子句中的else关键字与if-then子句中的else关键字相同,如果省略else关键字,pl/sql隐式增加else raise CASE_NOT_FOUND

29、触发器
触发器类型:
1、行级触发器,对DML语句影响的每个行执行一次,常用于与数据相关的活动,对于同步保存分布式数据很有用
2、语句级出发器,对美国DML语句执行一次,不常用于与数据相关的活动
3、before、after出发器
4、instead of触发器(支持对象视图引入这种类型触发器,例如update视图时,instead of触发器运行处理基表的数据)
5、模式触发器,模式级的操作上建立,eg:create table阻止DDL操作以及在DDL操作时提供额外的安全监控
6、数据库级触发器,在数据库事件上触发的触发器,注册、关闭、启动、错误

create or replace trigger test
before insert or update of fName on address   //针对insert和update列fName在表address上触发
for each row                                  //行级触发器
begin
if inserting then                          //有效的事务处理类型inserting、deleting、updating

elsif updating
endif
end;

eg:
CREATE OR REPLACE TRIGGER HR.TEST
BEFORE INSERT
ON HR.TTT
FOR EACH ROW
DECLARE
tempval number;
BEGIN
  :new.title:=UPPER(:new.title);
  select locations_seq.NEXTVAL into tempval from dual;  //取得seq
  :new.id:=tempval;
  :new.ldate:=sysdate;                                  //设置系统时间
               //往表中填充数据
END ;

禁用触发器
alter trigger booktest_up_row enable/disable

30、过程、函数和程序包
系统权限:create procedure、execute any procedure
过程、程序包和函数所需的权限不能来自角色,必须直接授予过程、程序包或者函数的拥有者
函数可以返回一个值,可以在查询中直接使用

建立程序包,包括程序包说明和程序包体
程序包说明
create or replace package ... as
程序包体
create or replace package body ... as
程序包体可以包括没有在程序包说明中列出的对象,这些是私有对象,程序包的用户不能使用
初始化程序包:在程序包体声明的变量,以及直接begin开始的pl/sql块会在用户会话第一次执行包的函数或过程时执行
begin没有自己的end子句,他使用程序包体的end子句

13:27 | 评论 (121)

2004年12月31日 #

oracle学习笔记

1、case表达式
select country_name,region_id, case region_id when 1 then 'europe' when 2 then 'america' when 3
then 'asia' else 'other' end continent from countries where country_name like 'I%';
在9i中提供的case表达式,可以在sql语句中达到if then else逻辑。
2、order by
order by子句中可以使用列名,列别名,或者列的位置。位置必须是select-list表达式的数目
select name,sex from v_table order by 2
3、oracle单行函数
通用函数
nvl(expr1,expr2) 判断第一个字符是否null,是显示expr2
nvl2(expr1,expr2,expr3) 判断第一字符是否null,是显示expr3,不是显示expr2
nullif(expr1,expr2)如果两个字符相等,则返回空,否则返回expr1
coalesce(expr1,expr2,...exprn)判断每个参数是否未空,直到不为空显示出来,如果都是空则报错

日期函数
to_number,to_date,
to_char(date,'format-model')

format-model:
{
yyyy full year in numbers
year year spelled out
mm two-digit value for month
month full name of the month
mon three-letter abbreviation of the month
dy three-letter abbreviation of the day of the week
day full name of the day of the week
dd numeric day of month
}
to_char(number,'format-model')
{
9 prepresents a number
0 forces a zero to be displayed
$ places a floating dollar sign
L 使用本地货币符号
. prints a decimal point
, prints a thousand indicator
}

months_between
add_months
next_day
last_day
round
trunc

字符函数
lower,upper,initcap(大小写转化函数)
initcap('SQL Cource') result is Sql Cource

concat,substr,length,instr,lpad|rpad,trim,replace
concat字符连接,等于||
substr截断字符串substr(column,1,5)
substr(column,-1,5)从右边开始取
length字符长度
instr字符所在的位置
trim压缩空格
lpad左填充
rpad右填充
数字函数
round四舍五入round(45.926,2)---45.93
trunc截取数字trunc(45.926,2)---45.92
mod求余数mod(1500,200)--100
转换函数

4、sql*plus
set wrap off
set linesize 1000

5、case when else end
6、decode简化的if then else

7、oracle中对层次结构数据的递归查询
create table Dept(
   DepartNO  varchar2(10),
   DepartName  varchar2(20),
   TopNo    varchar2(10));

insert into Dept values('001','董事会','0');
insert into Dept values('002','总裁办','001');
insert into Dept values('003','财务部','001');
insert into Dept values('004','市场部','002');
insert into Dept values('005','公关部','002');
insert into Dept values('006','销售部','002');
insert into Dept values('007','分销处','006');
insert into Dept values('008','业务拓展处','004');
insert into Dept values('009','销售科','007');

connect by prior    start with
例子:
select departname,level,sys_connect_by_path(departname,'|') from dept
connect by prior departno = topno
start with departname='董事会'

departname   level
市场部       2
公关部      2
销售部      2

select departname,level,sys_connect_by_path(departname,'|') from dept
where level=2
connect by departno =prior topno
start with departname='总裁办'

Sys_connect_by_path(x,c)x是列,从是单字符,适用层次化查询。


prior位置表示是往父亲节点搜索还是往子节点搜索
level表示搜索深度

8,insert with check option
9、插入的值显示的定义为default值
insert into departments(department_id,name)
values(300,default)
name值由表定义时的default值填充,强制用当前column定义的default值
10、merge语句,要不更新,要不插入
merge into table_name ....
merge into ttt ...
when metched then update set
...
when not matched then
 insert values....
11、隐式事务
没有提交的数据,别人不能修改
通过回滚段实现读一致性
语句级

 

12、rollup、cube等分析函数
select decode(cust_gender,'F','男','M','女') cust_gender,count(cust_gender)
from sh.customers
group by cust_gender
union select '合计'cust_gender,count(cust_gender) from sh.customers
order by cust_gender desc
普通的写法
select cust_gender gender,nvl(cust_marital_status,'unknow') marital_status,count(*),grouping(cust_gender),grouping(nvl(cust_marital_status,'unknow'))
from sh.customers
group by rollup(cust_gender,nvl(cust_marital_status,'unknow'))
rullup写法


13、rank、dense_rank函数
select department_id,rank(10000) within group(order by salary desc nulls last) dense_rank_10k
from hr.employees
group by department_id
判断10000在salary中排在第几,按dept分组
select department_id,salary,rank() over(partition by department_id order by salary desc) dense_rank_10k
from hr.employess列出在部门排第几
dence_rank在并列关系是,相关等级不会跳过。rank则跳过。


14、select length('HELLO WORLD!')-length(replace(translate('HELLO WORLD!','L',chr(13)),chr(13),'')) from dual;
判断字符串中的某个字符的个数
select length('HELLO WORLD!')-length(replace('HELLO WORLD!','L')) from dual;
更简洁
select (length('你好你好LLO WOR你好LD!')-length(replace('你好你好LLO WOR你好LD!','你好')))/length('你好') from dual;
可以同时处理汉字和英文

15 alter table add / modify cName
drop column cName

涉及到数据删除时所需要的时间,可以使用set unused使column无用,在系统空闲的时候可以drop column

delete删除时做很多日志记录,效率低下
truncate是ddl,不能rollback!速度效率都高,同时也清空索引和存储空间还原
comment on table tName is 'comment content';给对象增加注释
查看注释信息:all_col_comments,user_col_comments,all_tab_comments,user_tab_comments

16、约束 including constraints 数据完整性 列完整性,实体完整性
约束类型:(列一级的 not null,check),unique,primary key,foreign key
create table test(
id int not null,
lname varchar(20),
rname varchar(20),
rid int not null,
constraint test_u_1 unique(lname,rname)
)

alter table test add constraint pk_test primary key(id);增加主键
alter table test add constraint fk_test foreign key(rid) references test1(id);
级联删除 on delete cascade,或者on delete set null
check 不能用系统函数、sequence、查询
alter table drop constraint c_name
alter table disable/enable constraint c_name
alter table drop column col_name cascade constraint删除列的时候连constraint一块删除
查看constaint select * from user_constraints/user_cons_columns

17、视图view
view是一个逻辑结构,不含有数据
create force view viewname as ...
force 强制视图编译通过,不管后面的select语句是否成功
with check option constraint ...
with read only constraint ...
透过视图可以发生数据改变,改变基表!带有group by,函数,rownum,distinct等不可改变

16:55 | 评论 (0)

2004年12月7日 #

Oracle经验技巧集

Oracle经验技巧集
1.删除表空间
    DROP TABLESPACE TableSpaceName [INCLUDING CONTENTS [AND DATAFILES]]

2.删除用户
    DROP USER User_Name CASCADE

3.删除表的注意事项
    在删除一个表中的全部数据时,须使用TRUNCATE TABLE 表名;因为用DROP TABLE,DELETE * FROM 表名时,TABLESPACE表空间该表的占用空间并未释放,反复几次DROP,DELETE操作后,该TABLESPACE上百兆的空间就被耗光了。

4.having子句的用法
    having子句对group by子句所确定的行组进行控制,having子句条件中只允许涉及常量,聚组函数或group by 子句中的列。

5.外部联接"+"的用法
    外部联接"+"按其在"="的左边或右边分左联接和右联接.若不带"+"运算符的表中的一个行不直接匹配于带"+"预算符的表中的任何行,则前者的行与后者中的一个空行相匹配并被返回.若二者均不带’+’,则二者中无法匹配的均被返回.利用外部联接"+",可以替代效率十分低下的 not in 运算,大大提高运行速度.例如,下面这条命令执行起来很慢

 

    用外联接提高表连接的查询速度

    在作表连接(常用于视图)时,常使用以下方法来查询数据:

    SELECT PAY_NO, PROJECT_NAME

    FROM A

    WHERE A.PAY_NO NOT IN (SELECT PAY_

    NO FROM B WHERE VALUE >=120000);

    ---- 但是若表A有10000条记录,表B有10000条记录,则要用掉30分钟才能查完,主要因为NOT IN要进  行一条一条的比较,共需要10000*10000次比较后,才能得到结果。该用外联接后,可以缩短到1分左右的时间:

    SELECT PAY_NO,PROJECT_NAME

    FROM A,B

    WHERE A.PAY_NO=B.PAY_NO(+)

    AND B.PAY_NO IS NULL

    AND B.VALUE >=12000;

6.set transaction命令的用法
    在执行大事务时,有时oracle会报出如下的错误:

    ORA-01555:snapshot too old (rollback segment too small)

  这说明oracle给此事务随机分配的回滚段太小了,这时可以为它指定一个足够大的回滚段,以确保这个事务的成功执行.例如

 

    set transaction use rollback segment roll_abc;

    delete from table_name where ...

    commit;

  回滚段roll_abc被指定给这个delete事务,commit命令则在事务结束之后取消了回滚段的指定.
7.数据库重建应注意的问题

 

  在利用import进行数据库重建过程中,有些视图可能会带来问题,因为结构输入的顺序可能造成视图的输入先于它低层次表的输入,这样建立视图就会失败.要解决这一问题,可采取分两步走的方法:首先输入结构,然后输入数据.命令举例如下 (uesrname:jfcl,password:hfjf,host sting:ora1,数据文件:expdata.dmp):

imp jfcl/hfjf@ora1 file=empdata.dmp rows=N

imp jfcl/hfjf@ora1 file=empdata.dmp full=Y buffer=64000

commit=Y ignore=Y

  第一条命令输入所有数据库结构,但无记录.第二次输入结构和数据,64000字节提交一次.ignore=Y选项保证第二次输入既使对象存在的情况下也能成功.

select a.empno from emp a where a.empno not in

 (select empno from emp1 where job=’SALE’);

  倘若利用外部联接,改写命令如下:

select a.empno from emp a ,emp1 b

where a.empno=b.empno(+)

and b.empno is null

and b.job=’SALE’;

  可以发现,运行速度明显提高.

8.从已知表新建另一个表:
CREATE TABLE b

AS SELECT * (可以是表a中的几列)

FROM a

WHERE a.column = ...;

9.查找、删除重复记录:
法一: 用Group by语句 此查找很快的

select count(num), max(name) from student --查找表中num列重复的,列出重复的记录数,并列出他的name属性

group by num

having count(num) >1 --按num分组后找出表中num列重复,即出现次数大于一次

 

delete from student(上面Select的)

这样的话就把所有重复的都删除了。-----慎重

 

法二:当表比较大(例如10万条以上)时,这个方法的效率之差令人无法忍受,需要另想办法:

---- 执行下面SQL语句后就可以显示所有DRAWING和DSNO相同且重复的记录

SELECT * FROM EM5_PIPE_PREFAB

WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB D --D相当于First,Second

WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND

EM5_PIPE_PREFAB.DSNO=D.DSNO);

 

---- 执行下面SQL语句后就可以刪除所有DRAWING和DSNO相同且重复的记录

DELETE FROM EM5_PIPE_PREFAB

WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB D

WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND

EM5_PIPE_PREFAB.DSNO=D.DSNO);

 

10.返回表中[N,M]条记录:
 

取得某列中第N大的行

select column_name from

(select table_name.*,dense_rank() over (order by column desc) rank from table_name)

where rank = &N;

 

 假如要返回前5条记录:

  select * from tablename where rownum<6;(或是rownum <= 5 或是rownum != 6)

假如要返回第5-9条记录:

select * from tablename

where …

and rownum<10

minus

select * from tablename

where …

and rownum<5

order by name

 选出结果后用name排序显示结果。(先选再排序)

 

注意:只能用以上符号(<、<=、!=)。

select * from tablename where rownum != 10;返回的是前9条记录。

不能用:>,>=,=,Between...and。由于rownum是一个总是从1开始的伪列,Oracle 认为这种条件 不成立,查不到记录.

 

另外,这个方法更快:

select * from (

select rownum r,a from yourtable

where rownum <= 20

order by name )

where r > 10

这样取出第11-20条记录!(先选再排序再选)

要先排序再选则须用select嵌套:内层排序外层选。

 

rownum是随着结果集生成的,一旦生成,就不会变化了;同时,生成的结果是依次递加的,没有1就永远不会有2!

rownum 是在 查询集合产生的过程中产生的伪列,并且如果where条件中存在 rownum 条件的话,则:

1: 假如 判定条件是常量,则:

只能 rownum = 1, <= 大于1 的自然数, = 大于1 的数是没有结果的, 大于一个数也是没有结果的

即 当出现一个 rownum 不满足条件的时候则 查询结束   this is stop key!

2: 当判定值不是常量的时候

若条件是 = var , 则只有当 var 为1 的时候才满足条件,这个时候不存在 stop key ,必须进行 full scan ,对每个满足其他where条件的数据进行判定

选出一行后才能去选rownum=2的行……

 

 

11.快速编译所有视图
 

---- 当在把数据库倒入到新的服务器上后(数据库重建),需要将视图重新编译一遍,因为该表空间视图到其它表空间的表的连接会出现问题,可以利用PL/SQL的语言特性,快速编译。

SQL >SPOOL ON.SQL

SQL >SELECT ‘ALTER VIEW ‘||TNAME||’

COMPILE;’ FROM TAB;

SQL >SPOOL OFF

然后执行ON.SQL即可。

SQL >@ON.SQL

当然,授权和创建同义词也可以快速进行,如:

SQL >SELECT ‘GRANT SELECT ON ’

||TNAME||’ TO USERNAME;’ FROM TAB;

SQL >SELECT ‘CREATE SYNONYM

‘||TNAME||’ FOR USERNAME.’||TNAME||’;’ FROM TAB;

 

 

--------------------

让你的天空只有甜和美

 

遗忘———该怎么流泪

 

文章选项:

 

Lunatic

(stranger)

06/13/03 11:33

[精华] Re: Oracle 常用命令 [re: Lunatic]

 

 

 

12.读写文本型操作系统文件
---- 在PL/SQL 3.3以上的版本中,UTL_FILE包允许用户通过PL/SQL读写操作系统文件。如下:

 

DECALRE

FILE_HANDLE UTL_FILE.FILE_TYPE;

BEGIN

FILE_HANDLE:=UTL_FILE.FOPEN(

‘C:\’,’TEST.TXT’,’A’);

UTL_FILE.PUT_LINE(FILE_HANDLE,’

HELLO,IT’S A TEST TXT FILE’);

UTL_FILE.FCLOSE(FILE_HANDLE);

END;

 

 

13.在数据库触发器中使用列的新值与旧值
---- 在数据库触发器中几乎总是要使用触发器基表的列值,如果某条语句需要某列修改前的值,使用:OLD就可以了,使用某列修改后的新值,用:NEW就可以了。如:OLD.DEPT_NO,:NEW.DEPT_NO。

 

 

14.数据库文件的移动方法
当想将数据库文件移动到另外一个目录下时,可以用ALTER DATABASE命令来移动(比ALTER TABLESPACE适用性强):

1. 使用SERVER MANAGER关闭实例.

SVRMGR > connect internal;

SVRMGR > shutdown;

SVRMGR >exit;

2. 使用操作系统命令来移动数据库文件位置(假设这里操作系统为SOLARIS 2.6). 在UNIX中用 mv命令可以把文件移动到新的位置,

#mv /ora13/orarun/document.dbf /ora12/orarun

3. 装载数据库并用alter database命令来改变数据库中的文件名.

SVRMGR > connect internal;

SVRMGR > startup mount RUN73;

SVRMGR > alter database rename file

> ‘/ ora13/orarun/document.dbf’

> ‘/ ora12/orarun/document.dbf’;

4. 启动实例.

SVRMGR > alter database open;

 

 

15.连接查询结果:
表a 列 a1 a2

记录 1 a

1 b

2 x

2 y

2 z

用select能选成以下结果:

1 ab

2 xyz

 

下面有两个例子:

1.使用pl/sql代码实现,但要求你组合后的长度不能超出oracle varchar2长度的限制

create or replace type strings_table is table of varchar2(20);

/

create or replace function merge (pv in strings_table) return varchar2

is

ls varchar2(4000);

begin

for i in 1..pv.count loop

ls := ls || pv(i);

end loop;

return ls;

end;

/

create table t (id number,name varchar2(10));

insert into t values(1,'Joan');

insert into t values(1,'Jack');

insert into t values(1,'Tom');

insert into t values(2,'Rose');

insert into t values(2,'Jenny');

 

column names format a80;

select t0.id,merge(cast(multiset(select name from t where t.id = t0.id) as strings_table)) names

from (select distinct id from t) t0;

 

drop type strings_table;

drop function merge;

drop table t;

 

 

2.纯粹用sql:

表dept, emp

要得到如下结果

deptno, dname, employees

---------------------------------

10, accounting, clark;king;miller

20, research, smith;adams;ford;scott;jones

30, sales, allen;blake;martin;james;turners

每个dept的employee串起来作为一条记录返回

 

This example uses a max of 6, and would need more cut n pasting to do more than that:

 

SQL> select deptno, dname, emps

2 from (

3 select d.deptno, d.dname, rtrim(e.ename ||', '||

4 lead(e.ename,1) over (partition by d.deptno

5 order by e.ename) ||', '||

6 lead(e.ename,2) over (partition by d.deptno

7 order by e.ename) ||', '||

8 lead(e.ename,3) over (partition by d.deptno

9 order by e.ename) ||', '||

10 lead(e.ename,4) over (partition by d.deptno

11 order by e.ename) ||', '||

12 lead(e.ename,5) over (partition by d.deptno

13 order by e.ename),', ') emps,

14 row_number () over (partition by d.deptno

15 order by e.ename) x

16 from emp e, dept d

17 where d.deptno = e.deptno

18 )

19 where x = 1

20 /

 

DEPTNO DNAME EMPS

------- ----------- ------------------------------------------

10 ACCOUNTING CLARK, KING, MILLER

20 RESEARCH ADAMS, FORD, JONES, ROONEY, SCOTT, SMITH

30 SALES ALLEN, BLAKE, JAMES, MARTIN, TURNER, WARD

 

 

 

16.在Oracle中建一个编号会自动增加的字段,以利于查询
 

1、建立序列:

CREATE SEQUENCE checkup_no_seq

NOCYCLE

MAXVALUE 9999999999

START WITH 2;

 

2、建立触发器:

CREATE OR REPLACE TRIGGER set_checkup_no

BEFORE INSERT ON checkup_history

FOR EACH ROW

DECLARE

next_checkup_no NUMBER;

BEGIN

--Get the next checkup number from the sequence

SELECT checkup_no_seq.NEXTVAL

INTO next_checkup_no

FROM dual;

 

--use the sequence number as the primary key

--for the record being inserted

:new.checkup_no := next_checkup_no;

END;

 

 

17.查看对象的依赖关系(比如视图与表的引用)
 

查看视图:dba_dependencies 记录了相关的依赖关系

查东西不知道要查看哪个视图时,可以在DBA_Objects里看,

select object_name from dba_objects where object_name like '%ROLE%'(假如查看ROLE相关)

然后DESC一下就大体上知道了。

 

 

18.要找到某月中所有周五的具体日期
select to_char(t.d,'YY-MM-DD') from (

select trunc(sysdate, 'MM')+rownum-1 as d

from dba_objects

where rownum < 32) t

where to_char(t.d, 'MM') = to_char(sysdate, 'MM') --找出当前月份的周五的日期

and trim(to_char(t.d, 'Day')) = '星期五'

--------

03-05-02

03-05-09

03-05-16

03-05-23

03-05-30

 

如果把where to_char(t.d, 'MM') = to_char(sysdate, 'MM')改成sysdate-90,即为查找当前

月份的前三个月中的每周五的日期。


 

18:17 | 评论 (0)

2004年10月27日 #

在JBuilder中调试AdventNet webnms

以下例子AdventNet WebNMS是安装在d:\AdventNet\WebNMS目录下,如果安装路径不同,则需要将下述所有d:\AdventNet\WebNMS改为相应的目录。

注:可以拷贝AdventNet WebNms.library 到C:\Documents and Settings\[用户名]\.jbuilderX中
可以不用新建Library,而可以直接选用
用户名是指Windows用户名

过程简述:
1、在JBuilderX中创建一个新工程,在工程属性的Paths->Requied Library中,选择Add
2、打开的对话框中选择new
3、输入名字:AdventNet WebNMS Server
4、选择Add
5、加入下述包:
D:/AdventNet/WebNMS
D:/AdventNet/WebNMS/classes
D:/AdventNet/WebNMS/classes/AdventNetSnmp.jar
D:/AdventNet/WebNMS/classes/AdventNetSAS.jar
D:/AdventNet/WebNMS/classes/jaxp.jar
D:/AdventNet/WebNMS/classes/crimson.jar
D:/AdventNet/WebNMS/classes/xalan.jar
D:/AdventNet/WebNMS/classes/Mail.jar
D:/AdventNet/WebNMS/classes/activation.jar
D:/AdventNet/WebNMS/classes/ManagementServer.jar
D:/AdventNet/WebNMS/classes/ManagementClient.jar
D:/AdventNet/WebNMS/classes/AdventNetUI.jar
D:/AdventNet/WebNMS/classes/AdventNetUtils.jar
D:/AdventNet/WebNMS/classes/ApiUtils.jar
D:/AdventNet/WebNMS/classes/AdventNetTftp.jar
D:/AdventNet/WebNMS/classes/AdventNetCLI.jar
D:/AdventNet/WebNMS/classes/AdventNetJta.jar
D:/AdventNet/WebNMS/classes/AdventNetCLIClient.jar
D:/AdventNet/WebNMS/classes/jta.jar
D:/AdventNet/WebNMS/classes/AdventNetSnmpDistributedAPI.jar
D:/AdventNet/WebNMS/classes/JimiProClasses.zip
D:/AdventNet/WebNMS/classes/AdventNetFramework.jar
D:/AdventNet/WebNMS/classes/AdventNetARUtils.jar
D:/AdventNet/WebNMS/classes/xmojo.jar
D:/AdventNet/WebNMS/classes/AdventNetJmxAgent.jar
D:/AdventNet/WebNMS/classes/AdventNetSnmpAgent.jar
D:/AdventNet/WebNMS/classes/AdventNetSnmpV3USM.jar
D:/AdventNet/WebNMS/classes/AdventNetTL1.jar
D:/AdventNet/WebNMS/classes/AdventNetWebNmsAgent.jar
D:/AdventNet/WebNMS/classes/test
D:/AdventNet/WebNMS/classes/ldap_jars/jndi.jar
D:/AdventNet/WebNMS/classes/ldap_jars/ldap.jar
D:/AdventNet/WebNMS/classes/ldap_jars/providerutil.jar
D:/AdventNet/WebNMS/apache/tomcat/bin/bootstrap.jar
D:/AdventNet/WebNMS/apache/tomcat/common/lib/servlet.jar
D:/AdventNet/WebNMS/classes/AdventNetNPrevalent.jar
D:/AdventNet/WebNMS/classes/AdventNetUpdateManagerInstaller.jar
D:/AdventNet/WebNMS/classes/AdventNetSUMServer.jar
D:/AdventNet/WebNMS/classes/bsh-1.2b3.jar
D:/AdventNet/WebNMS/classes/AdventNetProBeans.jar
D:/AdventNet/WebNMS/classes/AdventNetDMPModels.jar
D:/AdventNet/WebNMS/classes/AdventNetCCLLibrary.jar
D:/AdventNet/WebNMS/NetMonitor/build/ConfigPanel.jar
D:/AdventNet/WebNMS/mysql/driver/mysql_connector.jar
D:/AdventNet/WebNMS/apache/tomcat/common/lib/jasper-compiler.jar
D:/AdventNet/WebNMS/apache/tomcat/common/lib/jasper-runtime.jar
D:/AdventNet/WebNMS/apache/tomcat/common/lib/naming-factory.jar
D:/AdventNet/WebNMS/classes/SNMPDebugger.jar
D:/AdventNet/WebNMS/classes/AdventNetAboutDialog.jar
D:/AdventNet/WebNMS/classes/AdventNetAgentUIUtilities.jar
D:/AdventNet/WebNMS/classes/AdventNetBeanBuilder.jar
D:/AdventNet/WebNMS/classes/AdventNetBuilderDeployment.jar
D:/AdventNet/WebNMS/classes/AdventNetBuilderMigration.jar
D:/AdventNet/WebNMS/classes/AdventNetCorbaSimulator.jar
D:/AdventNet/WebNMS/classes/AdventNetIDLtoJObjects.jar
D:/AdventNet/WebNMS/classes/AdventNetIdlToXml.jar
D:/AdventNet/WebNMS/classes/AdventNetOPExtn.jar
D:/AdventNet/WebNMS/classes/AdventNetProBeansBeanInfo.jar
D:/AdventNet/WebNMS/classes/AdventNetSNMPAgentTools.jar
D:/AdventNet/WebNMS/classes/AdventNetSUMClient.jar
D:/AdventNet/WebNMS/classes/AdventNetThemeManager.jar
D:/AdventNet/WebNMS/classes/AdventNetTL1Agent.jar
D:/AdventNet/WebNMS/classes/AdventNetTL1AgentTools.jar
D:/AdventNet/WebNMS/classes/AdventNetTL1Tools.jar
D:/AdventNet/WebNMS/classes/AdventNetUIBeanInfo.jar
D:/AdventNet/WebNMS/classes/AdventNetUpdateManager.jar
D:/AdventNet/WebNMS/classes/AdventNetUtilsBeanInfo.jar
D:/AdventNet/WebNMS/classes/clientAPI.jar
D:/AdventNet/WebNMS/classes/ClientExamples.jar
D:/AdventNet/WebNMS/classes/comm.jar
D:/AdventNet/WebNMS/classes/ftp.jar
D:/AdventNet/WebNMS/classes/jcommon.jar
D:/AdventNet/WebNMS/classes/jcvs.jar
D:/AdventNet/WebNMS/classes/jfreechart.jar
D:/AdventNet/WebNMS/classes/jnlp.jar
D:/AdventNet/WebNMS/classes/jython.jar
D:/AdventNet/WebNMS/classes/migration.jar
D:/AdventNet/WebNMS/classes/MigrationUtil.jar
D:/AdventNet/WebNMS/classes/NarPackager.jar
D:/AdventNet/WebNMS/classes/openorb-1.2.0.jar
D:/AdventNet/WebNMS/classes/openorb_tools-1.2.0.jar
D:/AdventNet/WebNMS/classes/SNMPConfigurationTool.jar
D:/AdventNet/WebNMS/classes/SwingImages.jar

注:最好是按上述列表一个个添加,不要通过一次性多选,将D:/AdventNet/WebNMS/classes/下的所有Jar文件添加进来

6、在工程属性的Run中,添加一个运行项:选择New
7、输入名字:StartNMS by AdventNet
8、选择主Main class为 D:/AdventNet/WebNMS/classes/com/adventnet/launcher/nms/StartNmsJdbc
9、设置VM参数为:
-Dwebnms.rootdir=D:/AdventNet/WebNMS/ -Djava.library.path=D:/AdventNet/WebNMS/lib -Djava.rmi.server.codebase="http://localhost:9090/classes/ http://localhost:9090/classes/ManagementServer.jar http://localhost:9090/classes/AdventNetTftp.jar http://localhost:9090/classes/AdventNetCLI.jar http://localhost:9090/classes/AdventNetSnmp.jar http://localhost:9090/AdventNetSNMPv3/classes/ http://localhost:9090/classes/AdventNetJmxAgent.jar http://localhost:9090/classes/xmojo.jar http://localhost:9090/classes/jta.jar" -mx100m

10、设置程序参数为:
NMS_BE_PORT 2000 ROOT_DIR D:\AdventNet\WebNMS APACHE_DIR D:\AdventNet\WebNMS\apache TOMCAT_DIR D:\AdventNet\WebNMS\apache\tomcat WEBSERVER_PORT 9090 WEBCONTAINER_PORT 8009 BE_FE TCP NATIVE_PING true

11、调试时,可以将工程打成jar包,放到D:/AdventNet/WebNMS/classes/目录下,然后修改相应的配置文件。此时,再在JBuilderX中启动调试运行就可以进行调试了。

10:24 | 评论 (2)

2004年10月16日 #

javascript40个技巧

1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键
<table border oncontextmenu=return(false)><td>no</table> 可用于Table



2. <body onselectstart="return false"> 取消选取、防止复制



3. onpaste="return false" 不准粘贴



4. oncopy="return false;" oncut="return false;" 防止复制



5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图标



6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显示出你的图标



7. <input style="ime-mode:disabled"> 关闭输入法



8. 永远都会带着框架
<script language="JavaScript"><!--
if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页
// --></script>



9. 防止被人frame
<SCRIPT LANGUAGE=JAVASCRIPT><!--
if (top.location != self.location)top.location=self.location;
// --></SCRIPT>



10. 网页将不能被另存为
<noscript><iframe src=*.html></iframe></noscript>



11. <input type=button value=查看网页源代码
onclick="window.location = "view-source:"+ "http://www.51js.com/"">



12.删除时确认
<a href="javascript:if(confirm("确实要删除吗?"))location="boos.asp?&areyou=删除&page=1"">删



除</a>



13. 取得控件的绝对位置
//Javascript
<script language="Javascript">
function getIE(e){
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent){
t+=e.offsetTop;
l+=e.offsetLeft;
}
alert("top="+t+"/nleft="+l);
}
</script>



//VBScript
<script language="VBScript"><!--
function getIE()
dim t,l,a,b
set a=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
while a.tagName<>"BODY"
set a = a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox "top="&t&chr(13)&"left="&l,64,"得到控件的位置"
end function
--></script>



14. 光标是停在文本框文字的最后
<script language="javascript">
function cc()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart("character",e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type=text name=text1 value="123" onfocus="cc()">



15. 判断上一页的来源
javascript:
document.referrer



16. 最小化、最大化、关闭窗口
<object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Minimize"></object>
<object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Maximize"></object>
<OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAM NAME="Command" VALUE="Close"></OBJECT>



<input type=button value=最小化 onclick=hh1.Click()>
<input type=button value=最大化 onclick=hh2.Click()>
<input type=button value=关闭 onclick=hh3.Click()>
本例适用于IE



17.屏蔽功能键Shift,Alt,Ctrl
<script>
function look(){
if(event.shiftKey)
alert("禁止按Shift键!"); //可以换成ALT CTRL
}
document.onkeydown=look;
</script>



18. 网页不会被缓存
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
或者<META HTTP-EQUIV="expires" CONTENT="0">



19.怎样让表单没有凹凸感?
<input type=text style="border:1 solid #000000">

<input type=text style="border-left:none; border-right:none; border-top:none; border-bottom:



1 solid #000000"></textarea>



20.<div><span>&<layer>的区别?
<div>(division)用来定义大段的页面元素,会产生转行
<span>用来定义同一行内的元素,跟<div>的唯一区别是不产生转行
<layer>是ns的标记,ie不支持,相当于<div>




21.让弹出窗口总是在最上面:
<body onblur="this.focus();">



22.不要滚动条?
让竖条没有:
<body style="overflow:scroll;overflow-y:hidden">
</body>
让横条没有:
<body style="overflow:scroll;overflow-x:hidden">
</body>
两个都去掉?更简单了
<body scroll="no">
</body>



23.怎样去掉图片链接点击后,图片周围的虚线?
<a href="#" onFocus="this.blur()"><img src="logo.jpg" border=0></a>



24.电子邮件处理提交表单
<form name="form1" method="post" action="mailto:****@***.com" enctype="text/plain">
<input type=submit>
</form>



25.在打开的子窗口刷新父窗口的代码里如何写?
window.opener.location.reload()



26.如何设定打开页面的大小
<body onload="top.resizeTo(300,200);">
打开页面的位置<body onload="top.moveBy(300,200);">



27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动
<STYLE>
body
{background-image:url(logo.gif); background-repeat:no-repeat;



background-position:center;background-attachment: fixed}
</STYLE>



28. 检查一段字符串是否全由数字组成
<script language="Javascript"><!--
function checkNum(str){return str.match(//D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
// --></script>



29. 获得一个窗口的大小
document.body.clientWidth; document.body.clientHeight



30. 怎么判断是否是字符
if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");
else alert("全是字符");



31.TEXTAREA自适应文字行数的多少
<textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight">
</textarea>



32. 日期减去天数等于第二个日期
<script language=Javascript>
function cc(dd,dadd)
{
//可以加上错误处理
var a = new Date(dd)
a = a.valueOf()
a = a - dadd * 24 * 60 * 60 * 1000
a = new Date(a)
alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")
}
cc("12/23/2002",2)
</script>



33. 选择了哪一个Radio
<HTML><script language="vbscript">
function checkme()
for each ob in radio1
if ob.checked then window.alert ob.value
next
end function
</script><BODY>
<INPUT name="radio1" type="radio" value="style" checked>Style
<INPUT name="radio1" type="radio" value="barcode">Barcode
<INPUT type="button" value="check" onclick="checkme()">
</BODY></HTML>



34.脚本永不出错
<SCRIPT LANGUAGE="JavaScript">
<!-- Hide
function killErrors() {
return true;
}
window.onerror = killErrors;
// -->
</SCRIPT>



35.ENTER键可以让光标移到下一个输入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">



36. 检测某个网站的链接速度:
把如下代码加入<body>区域中:
<script language=Javascript>
tim=1
setInterval("tim++",100)
b=1



var autourl=new Array()
autourl[1]="www.njcatv.net"
autourl[2]="javacool.3322.net"
autourl[3]="www.sina.com.cn"
autourl[4]="www.nuaa.edu.cn"
autourl[5]="www.cctv.com"



function butt(){
document.write("<form name=autof>")
for(var i=1;i<autourl.length;i++)
document.write("<input type=text name=txt"+i+" size=10 value=测试中……> =》<input type=text



name=url"+i+" size=40> =》<input type=button value=GO



onclick=window.open(this.form.url"+i+".value)><br>")
document.write("<input type=submit value=刷新></form>")
}
butt()
function auto(url){
document.forms[0]["url"+b].value=url
if(tim>200)
{document.forms[0]["txt"+b].value="链接超时"}
else
{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"}
b++
}
function run(){for(var i=1;i<autourl.length;i++)document.write("<img



src=http://"+autourl+"/"+Math.random()+" width=1 height=1



onerror=auto("http://"+autourl+"")>")}
run()</script>



37. 各种样式的光标
auto :标准光标
default :标准箭头
hand :手形光标
wait :等待光标
text :I形光标
vertical-text :水平I形光标
no-drop :不可拖动光标
not-allowed :无效光标
help :?帮助光标
all-scroll :三角方向标
move :移动标
crosshair :十字标
e-resize
n-resize
nw-resize
w-resize
s-resize
se-resize
sw-resize



38.页面进入和退出的特效
进入页面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)">
推出页面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)">  
这个是页面被载入和调出时的一些特效。duration表示特效的持续时间,以秒为单位。transition表示使



用哪种特效,取值为1-23:
  0 矩形缩小
  1 矩形扩大
  2 圆形缩小
  3 圆形扩大
  4 下到上刷新
  5 上到下刷新
  6 左到右刷新
  7 右到左刷新
  8 竖百叶窗
  9 横百叶窗
  10 错位横百叶窗
  11 错位竖百叶窗
  12 点扩散
  13 左右到中间刷新
  14 中间到左右刷新
  15 中间到上下
  16 上下到中间
  17 右下到左上
  18 右上到左下
  19 左上到右下
  20 左下到右上
  21 横条
  22 竖条
  23 以上22种随机选择一种



39.在规定时间内跳转
<META http-equiv=V="REFRESH" content="5;URL=http://www.51js.com">



40.网页是否被检索
<meta name="ROBOTS" content="属性值">
  其中属性值有以下一些:
  属性值为"all": 文件将被检索,且页上链接可被查询;
  属性值为"none": 文件不被检索,而且不查询页上的链接;
  属性值为"index": 文件将被检索;
  属性值为"follow": 查询页上的链接;
  属性值为"noindex": 文件不检索,但可被查询链接;
  属性值为"nofollow": 文件不被检索,但可查询页上的链接。

10:52 | 评论 (0)


请不要发表可能给我们带来伤害的政治言论,谢谢配合