发布新日志

  • 基于UML的面向对象软件开发过程

    2010-11-09 14:44:34

    UML基本概念:

    UMl是一种标准的图形化建模语言,它是面向对象分析和设计的一种标准表示。经常用的工具有Microsoft Office Visio 2007 .

    视图

    UML中的视图大致分为如下5种:

    1、用例视图。用例视图强调从系统的外部参与者(主要是用户)的角度看到的或需要的系统功能。

    2、逻辑视图。逻辑视图从系统的静态结构和动态行为角度显示如何实现系统的功能。

    3、组件视图。组件视图显示代码组件的组织结构。

    4、并发视图。并发视图显示系统的并发性,解决在并发系统中存在的通信和同步问题。

    5、配置视图。配置视图显示系统的具体部署。部署是指将系统配置到由计算机和设备组成的物理结构上。

    上述5种视图分别描述系统的一个方面,5种视图组合成UML完整的模型。下图显示了构成UML完整模型的5种视图间的关系

    一、用例视图

    用例视图描述系统应具备的功能,也就是被成为参与者的外部用户所能观察到的功能。用例是系统的一个功能单元,可以被描述为参与者与系统之间的一次交互作用。参与者可以是一个用户或者另外一个系统。客户对系统要求的功能被当作多个用例在用例视图中进行描述,一个用例就是对系统的一个用法的通用描述。用例模型的用途就是列出系统中的用例和参与者,并显示哪个参与者参与了哪个用例的执行。用例视图是其他视图的核心,它的内容直接驱动其他视图的开发。

    二、逻辑视图

    逻辑视图描述用例视图中提出的系统功能的实现。与用例视图相比,逻辑视图主要关注系统内部,它既描述系统的静态结构(类、对象以及他们之间的关系),也描述系统内部的动态协作关系。系统的静态结构在类图和对象图中进行描述,而动态模型则在状态图、时序图、协作图以及活动图中进行描述。逻辑视图的使用者主要是设计人员和开发人员。

    三、并发视图

    并发视图主要考虑资源的有效利用、代码的并行执行以及系统环境中异步事件的处理。除了将系统划分为并发执行的控制以外,并发视图还需要处理线程之间的通信和同步。并发视图的使用者是开发人员和系统集成人员。并发视图由状态图、协作图、以及活动图组成。

    四、组件视图

    组件是不同类型的代码模块,它是构造应用的软件单元。组件视图描述系统的实现模块以及它们之间的依赖关系。组件视图中也可以添加组件的其他附加信息,例如资源分配或者其他管理信息。组件视图主要由组件图构成,它的使用者主要是开发人员。

    五、配置视图

    配置视图显示系统的物理部署,它描述位于节点上的运行实例的部署情况。配置视图主要由配置图表示,它的使用者是开发人员、系统集成人员和测试人员。配置视图还允许评估分配结果和资源分配。

    UML的各种图是UML模型的重要组成部分

    1、 用例图(Use Case Diagram

    用例是系统中的一个可以描述参与者与系统直接交互作用的功能单元,用例图的用途是列出系统中的用例和参与者,并显示哪个参与者参与了哪个用例的执行。

    2、 类图(Class Diagram

    类是对应用领域或应用解决方案中概念的描述。类图以类为中心组织,类图中国的其他元素或属于某个类,或与类相关联。

    3、 对象图(Object Diagram

    对象图是类图的变体,它使用与类图相似的符号描述,不同之处在于对象图显示的是类的多个对象实例而非实际的类。可以说对象图是类图的一个例子,对象图与类图表示的不同之处在于它用带下划线的对象名称类表示对象,显示一个关系中的所有实例。

    4、 状态图(State Diagram

    状态图是对类描述的补充,它用于显示类的对象可能具备的所有状态,以及引起状态改变的事件。实际建模时,并不需要为所有的类都绘制状态图,仅对那些具有多个明确状态并且这些状态会影响和改变其行为的类才有绘制状态图的必要。此外,还可以为系统绘制整体状态图。

    5、 时序图(Sequence Diagram

    时序图显示多个对象间的动作协作,重点是显示对象之间发送的消息的时间顺序。

    6、 协作图(Collaboration Diagram

    协作图对在一次交互中有意义的对象和对象间的链建模。除了显示消息的交互以外,协作图也显示对象以及它们之间的关系。时序图和协作图都可以表示各对象间的交互关系,但它们的侧重点不同。时序图用消息的几何排列关系来表达消息的时间顺序,各角色之间的关系是隐含的。协作图用各个角色排列来表示角色之间的关系,并用消息类说明这些关系。在实际应用中可以根据需要选用这两种图:如果需要重点强调时间或顺序,那么选择时序图;如果需要重点强调上下文,那么选择协作图。

    7、 活动图(Activity Diagram

    活动图是状态图的一个变体,用来描述执行算法的工作流程中涉及的活动。活动状态代表了一个活动,即一个工作流步骤或一个操作的执行。活动图由多个动作状态组成,当一个动作完成后,动作状态将会改变,转换为一个新的状态。

    8、 组件图(Component Diagram

    组件图是用代码组件来显示代码物理结构。一个组件包含它所实现的一个或多个逻辑类的相关信息。通常组件图用于实际的编程工作中。

    9、 配置图(Deployment Diagram

    配置图用于显示系统中的硬件和物理结构。

    模型元素

    UML中的模型元素包括事物和事物之间的联系。事物是UML中重要的组成部分,它代表任何可以定义的东西。事物之间的关系能够把事物联系在一起,组成有意义的结构模型。每一个模型元素都有一个与之相对应的图形元素。

    一、 事物

    UML中事物可以分为结构事物、动作事物、分组事物和注释事物。

    1、 结构事物

    结构事物分为:类、接口、协作、用例、活动类、组件和节点

    1) 类。类是对具有相同属性、方法、关系和语义的对象的抽象,一个类可以实现一个或多个接口。类用包括类名、属性和方法的矩形表示。

    2) 接口。接口是为类或组件提供特定服务的一组操作的集合。

    3) 协作。协作定义了交互操作。一些角色和其他元素一起工作,提供一些合作的动作,这些动作比元素的总和要大。UML中协作用虚线构成的椭圆表示。

     

    4) 用例。用例描述系统对一个特定角色执行的一系列动作。在模型中用例通常用来组织动作事物,它是通过协作来实现的。UML中,用例用标注了用例名称的实线椭圆表示。

    5) 活动类。活动类是类对象有一个或多个进程或线程的类。在UML中活动类的表示法和类相同,只是边框用粗线条。

    6) 组件。组件是实现了一个接口集合的物理上可替换的系统部分。

    7) 节点。节点是在运行时存在的一个物理元素,它代表一个可计算的资源,通常占用一些内存和具有处理能力。一个组件集合一般来说位于一个节点,但也可以从一个节点转到另一个节点。

    2、 动作事物

    动作事物是UML模型中的动态部分,它们是模型的动词,代表时间和空间上的动作。交互和状态机是UML模型中最基本的两个动态事物元素。

    1) 交互。交互是一组对象在特定上下文中,为达到某种特定的目的而进行的一系列消息交换组成的动作。在交互中组成动作的对象的每个操作都要详细列出,包括消息、动作次数(消息产生的动作)、连接(对象之间的连接)。

    2) 状态机。状态机由一系列对象的状态组成。

    3、 分组事物

    分组事物是UML模型中组织的部分,分组事物只有一种,称为包。

    4、 注释事物

    注释事物是UML模型的解释部分。

    二、 UML中的关系

    1、 关联关系

    关联关系连接元素和链接实例,它用连接两个模型元素的实线表示,在关联的两端可以标注关联双方的角色和多重性标记。

    2、 依赖关系

    依赖关系描述一个元素对另一个元素的依附。依赖关系用源模型指向目标模型的带箭头的虚线表示。

    3、 泛化关系

    泛化关系也称为继承关系,泛化用一条带空心三角箭头的实线表示,从子类指向父类。

    4、 实现关系

    实现关系描述一个元素实现另一个元素。

    5、 聚合关系

    聚合关系描述元素之间部分和整体的关系,即一个表示整体的模型元素可能由几个表示部分的模型元素聚合而成。

    通用机制

    一、 修饰。

    在使用UML建模时,可以将图形修饰附加到UML图中的模型元素上。比如,当一个元素代表某种类型的时候,它的名称可以用粗体字形类显示;当同一元素表示该类型的实例时,该元素的名称用一条下划线修饰。

    二、 注释。

    UML中用一条虚线将注释连接到它为之解释的或细化的元素上。

    三、 通用划分。

    UML对其模型元素规定了两种类型的通用划分:型-实例(值)和接口-实现。

    1、型-实例(Type-Instance):描述一个通用描述符与单个元素项之间的对应关系。实例元素使用与通用描述符相同的表示图形,但是名字的表示与通用描述符不同:实例元素名字带有下划线,而且后面还要加上冒号和通用描述符的名字。

    2、接口-实现:接口声明了一个规定了服务的约定,接口的实现负责执行接口的全部语义定义并实现该项服务。

    基于UML的面向对象软件开发过程:

    统一过程(up)已成为一种流行的构造面向对象系统的软件开发过程,RUP是对UP的详细精化,下面介绍在业务建模、需求、设计、实现和测试这几个流程中使用UML的哪些图进行建模。

    1.业务建模

    采用UML的对象图和类图表示目标软件系统所基于的的应用领域中的概念和概念间的关系。这些相互关联的概念构成了领域模型。领域模型一方面可以帮助软件项目组理解业务背景,与业务专家进行有效沟通;另一方面,随着软件开发阶段的不断推进,领域模型将成为软件结构的主要基础。如果领域中含有明显的流程处理部分,可以考虑利用UML的活动图来刻画领域中的工作流,并标识业务流程中的并发、同步等特征。

    2.需求

    UML的的用例视图以用户为中心,对系统的功能性需求进行建模。通过识别位于系统边界之外的参与者以及参与者的目标,来确定系统要为用户提供哪些功能,并用用例进行描述。可以用文本形式或UML活动图描述用例,利用UML用例图表示参与者与用例之间、用例与用例之间的关系。采用UML顺序图图形描述参与者和系统之间的系统事件。利用系统操作契约刻画系统事件的发生引起系统内部状态的变化。如果目标系统比较庞大,用例较多,则可以用包来管理和组织这些用例,将关系密切的用例组织到同一个包里,用UML包图刻画这些包及其关系。

    3.设计

    把分析阶段的结果扩展成技术解决方案,包括软件体系结构设计和用力实现的设计。采用UML包图设计软件体系结构,刻画系统的分层、分块思路。采用UML协作图或顺序图寻找参与用例实现的类及其职责,这些类一部分来自领域模型,另一部分是软件实现新加入的类,它们为软件提供基础服务,如负责数据库持久化的类。用UML类图描述这些类及其关系,这些类属于体系结构的不同的包中。用UML状态图描述那些具有复杂生命周期行为的类。用UML活动图描述复杂的算法过程和有多个对象参与的业务处理过程,活动图尤其合适描述过程中的并发和同步。此外,还可以使用UML构件图描述软件代码的静态结构与管理。UML部署图描述硬件的拓扑结构以及软件和硬件的映射问题。

    4.实现

    把设计得到的类转换成某种面向对象程序设计语言的代码。

    5.测试

    不通的测试小组使用不同的UML图作为他们工作的基础:单元测试使用类图和类的规格说明,集成测试典型地使用构件图和协作图,而确认测试使用用例图和用例文本描述的来确认系统的行为是否符合这些图中的定义。

    [转载 作者:aci]

  • Db2命令大全

    2009-11-15 08:37:09

     
    这篇写的好全啊,我是方便自己看,大家也可以看啊。

    Db2命令大全                         

    连接数据库:

         connect to [数据库名] user [操作用户名] using [密码]

    创建缓冲池(8K):

         create bufferpool ibmdefault8k IMMEDIATE     SIZE 5000 PAGESIZE 8 K ;
    创建缓冲池(16K)(OA_DIVERTASKRECORD):
         create bufferpool ibmdefault16k IMMEDIATE     SIZE 5000 PAGESIZE 16 K ;
    创建缓冲池(32K)(OA_TASK):
         create bufferpool ibmdefault32k IMMEDIATE     SIZE 5000 PAGESIZE 32 K ;

    创建表空间:

         CREATE TABLESPACE exoatbs IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 8K MANAGED BY SYSTEM USING ('/home/exoa2/exoacontainer') EXTENTSIZE 32 PREFETCHSIZE 16     BUFFERPOOL IBMDEFAULT8K     OVERHEAD 24.10 TRANSFERRATE 0.90     DROPPED TABLE RECOVERY OFF;

         CREATE TABLESPACE exoatbs16k     IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 16K MANAGED BY SYSTEM USING ('/home/exoa2/exoacontainer16k'      ) EXTENTSIZE 32     PREFETCHSIZE 16     BUFFERPOOL IBMDEFAULT16K     OVERHEAD 24.1 TRANSFERRATE 0.90     DROPPED TABLE RECOVERY OFF;

         CREATE TABLESPACE exoatbs32k     IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 32K MANAGED BY SYSTEM USING ('/home/exoa2/exoacontainer32k'      ) EXTENTSIZE 32     PREFETCHSIZE 16     BUFFERPOOL IBMDEFAULT32K     OVERHEAD 24.1 TRANSFERRATE 0.90     DROPPED TABLE RECOVERY OFF;

    GRANT USE OF TABLESPACE exoatbs TO PUBLIC;
    GRANT USE OF TABLESPACE exoatbs16k TO PUBLIC;
    GRANT USE OF TABLESPACE exoatbs32k TO PUBLIC;

    创建系统表空间:

         CREATE TEMPORARY TABLESPACE exoasystmp IN DATABASE PARTITION GROUP IBMTEMPGROUP PAGESIZE 8K     MANAGED BY SYSTEM USING ('/home/exoa2/exoasystmp'      ) EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT8K     OVERHEAD 24.10 TRANSFERRATE 0.90     DROPPED TABLE RECOVERY OFF;

         CREATE TEMPORARY TABLESPACE exoasystmp16k IN DATABASE PARTITION GROUP IBMTEMPGROUP PAGESIZE 16K MANAGED BY SYSTEM USING ('/home/exoa2/exoasystmp16k'     ) EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT16K OVERHEAD 24.10 TRANSFERRATE 0.90     DROPPED TABLE RECOVERY OFF;

         CREATE TEMPORARY TABLESPACE exoasystmp32k IN DATABASE PARTITION GROUP IBMTEMPGROUP PAGESIZE 32K MANAGED BY SYSTEM USING ('/home/exoa2/exoasystmp32k') EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT32K OVERHEAD 24.10 TRANSFERRATE 0.90     DROPPED TABLE RECOVERY OFF;

    1. 启动实例(db2inst1):

    db2start

    2. 停止实例(db2inst1):

    db2stop

    3. 列出所有实例(db2inst1)

    db2ilist

    5.列出当前实例:

    db2 get instance

    4. 察看示例配置文件:

    db2 get dbm cfg|more

    5. 更新数据库管理器参数信息:

    db2 update dbm cfg using para_name para_value

    6. 创建数据库:

    db2 create db test

    7. 察看数据库配置参数信息

    db2 get db cfg for test|more

    8. 更新数据库参数配置信息

    db2 update db cfg for test using para_name para_value

    10.删除数据库:

    db2 drop db test

    11.连接数据库

    db2 connect to test

    12.列出所有表空间的详细信息。

    db2 list tablespaces show detail

    13.查询数据:

    db2 select * from tb1

    14.删除数据:

    db2 delete from tb1 where id=1

    15.创建索引:

    db2 create index idx1 on tb1(id);

    16.创建视图:

    db2 create view view1 as select id from tb1

    17.查询视图:

    db2 select * from view1

    18.节点编目

    db2 catalog tcp node node_name remote server_ip server server_port

    19.察看端口号

    db2 get dbm cfg|grep SVCENAME

    20.测试节点的附接

    db2 attach to node_name

    21.察看本地节点

    db2 list node direcotry

    22.节点反编目

    db2 uncatalog node node_name

    23.数据库编目

    db2 catalog db db_name as db_alias at node node_name

    24.察看数据库的编目

    db2 list db directory

    25.连接数据库

    db2 connect to db_alias user user_name using user_password

    26.数据库反编目

    db2 uncatalog db db_alias

    27.导出数据

    db2 export to myfile of ixf messages msg select * from tb1

    28.导入数据

    db2 import from myfile of ixf messages msg replace into tb1

    29.导出数据库的所有表数据

    db2move test export

    30.生成数据库的定义

    db2look -d db_alias -a -e -m -l -x -f -o db2look.sql

    31.创建数据库

    db2 create db test1

    32.生成定义

    db2 -tvf db2look.sql

    33.导入数据库所有的数据

    db2move db_alias import

    34.重组检查

    db2 reorgchk

    35.重组表tb1

    db2 reorg table tb1

    36.更新统计信息

    db2 runstats on table tb1

    37.备份数据库test

    db2 backup db test

    38.恢复数据库test

    db2 restore db test

    399\.列出容器的信息

    db2 list tablespace containers for tbs_id show detail

    40.创建表:

    db2 ceate table tb1(id integer not null,name char(10))

    41.列出所有表

    db2 list tables

    42.插入数据:

    db2 insert into tb1 values(1,’sam’);

    db2 insert into tb2 values(2,’smitty’);

    . 建立数据库DB2_GCB

    CREATE DATABASE DB2_GCB ON G: ALIAS DB2_GCB

    USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM DFT_EXTENT_SZ 32

    2. 连接数据库

    connect to sample1 user db2admin using 8301206

    3. 建立别名

    create alias db2admin.tables for sysstat.tables;

    CREATE ALIAS DB2ADMIN.VIEWS FOR SYSCAT.VIEWS

    create alias db2admin.columns for syscat.columns;

    create alias guest.columns for syscat.columns;

    4. 建立表

    create table zjt_tables as

    (select * from tables) definition only;

    create table zjt_views as

    (select * from views) definition only;

    5. 插入记录

    insert into zjt_tables select * from tables;

    insert into zjt_views select * from views;

    6. 建立视图

    create view V_zjt_tables as select tabschema,tabname from zjt_tables;

    7. 建立触发器

    CREATE TRIGGER zjt_tables_del

    AFTER DELETE ON zjt_tables

    REFERENCING OLD AS O

    FOR EACH ROW MODE DB2SQL

    Insert into zjt_tables1 values(substr(o.tabschema,1,8),substr(o.tabname,1,10))

    8. 建立唯一性索引

    CREATE UNIQUE INDEX I_ztables_tabname

    [size=3]ON zjt_tables(tabname);

    9. 查看表

    select tabname from tables

    where tabname='ZJT_TABLES';

    10. 查看列

    select SUBSTR(COLNAME,1,20) as 列名,TYPENAME as 类型,LENGTH as 长度

    from columns

    where tabname='ZJT_TABLES';

    11. 查看表结构

    db2 describe table user1.department

    db2 describe select * from user.tables

    12. 查看表的索引

    db2 describe indexes for table user1.department

    13. 查看视图

    select viewname from views

    where viewname='V_ZJT_TABLES';

    14. 查看索引

    select indname from indexes

    where indname='I_ZTABLES_TABNAME';

    15. 查看存贮过程

    SELECT SUBSTR(PROCSCHEMA,1,15),SUBSTR(PROCNAME,1,15)

    FROM SYSCAT.PROCEDURES;

    16. 类型转换(cast)

    ip datatype:varchar

    select cast(ip as integer)+50 from log_comm_failed

    17. 重新连接

    connect reset

    18. 中断数据库连接

    disconnect db2_gcb

    19. view application

    LIST APPLICATION;

    20. kill application

    FORCE APPLICATION(0);

    db2 force applications all (强迫所有应用程序从数据库断开)

    21. lock table

    lock table test in exclusive mode

    22. 共享

    lock table test in share mode

    23. 显示当前用户所有表

    list tables

    24. 列出所有的系统表

    list tables for system

    25. 显示当前活动数据库

    list active databases

    26. 查看命令选项

    list command options

    27. 系统数据库目录

    LIST DATABASE DIRECTORY

    28. 表空间

    list tablespaces

    29. 表空间容器

    LIST TABLESPACE CONTAINERS FOR

    Example: LIST TABLESPACE CONTAINERS FOR 1

    30. 显示用户数据库的存取权限

    GET AUTHORIZATIONS

    31. 启动实例

    DB2START

    32. 停止实例

    db2stop

    33. 表或视图特权

    grant select,delete,insert,update on tables to user

    grant all on tables to user WITH GRANT OPTION

    34. 程序包特权

    GRANT EXECUTE

    ON PACKAGE PACKAGE-name

    TO PUBLIC

    35. 模式特权

    GRANT CREATEIN ON SCHEMA SCHEMA-name TO USER

    36. 数据库特权

    grant connect,createtab,dbadm on database to user

    37. 索引特权

    grant control on index index-name to user

    38. 信息帮助 (? XXXnnnnn )

    例:? SQL30081

    39. SQL 帮助(说明 SQL 语句的语法)

    help statement

    例如,help SELECT

    40. SQLSTATE 帮助(说明 SQL 的状态和类别代码)

    ? sqlstate 或 ? class-code

    41. 更改与"管理服务器"相关的口令

    db2admin setid username password

    42. 创建 SAMPLE 数据库

    db2sampl

    db2sampl F:(指定安装盘)

    43. 使用操作系统命令

    ! dir

    44. 转换数据类型 (cast)

    SELECT EMPNO, CAST(RESUME AS VARCHAR(370))

    FROM EMP_RESUME

    WHERE RESUME_FORMAT = 'ascii'

    45. UDF

    要运行 DB2 Java 存储过程或 UDF,还需要更新服务器上的 DB2 数据库管理程序配置,以包括在该机器上安装 JDK 的路径

    db2 update dbm cfg using JDK11_PATH d:sqllibjavajdk

    TERMINATE

    update dbm cfg using SPM_NAME sample

    46. 检查 DB2 数据库管理程序配置

    db2 get dbm cfg

    47. 检索具有特权的所有授权名

    SELECT DISTINCT GRANTEE, GRANTEETYPE, 'DATABASE' FROM SYSCAT.DBAUTH

    UNION

    SELECT DISTINCT GRANTEE, GRANTEETYPE, 'TABLE ' FROM SYSCAT.TABAUTH

    UNION

    SELECT DISTINCT GRANTEE, GRANTEETYPE, 'PACKAGE ' FROM SYSCAT.PACKAGEAUTH

    UNION

    SELECT DISTINCT GRANTEE, GRANTEETYPE, 'INDEX ' FROM SYSCAT.INDEXAUTH

    UNION

    SELECT DISTINCT GRANTEE, GRANTEETYPE, 'COLUMN ' FROM SYSCAT.COLAUTH

    UNION

    SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SCHEMA ' FROM SYSCAT.SCHEMAAUTH

    UNION

    SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SERVER ' FROM SYSCAT.PASSTHRUAUTH

    ORDER BY GRANTEE, GRANTEETYPE, 3

    create table yhdab

    (id varchar(10),

    password varchar(10),

    ywlx varchar(10),

    kh varchar(10));

    create table ywlbb

    (ywlbbh varchar(8),

    ywmc varchar(60))

    48. 修改表结构

    alter table yhdab ALTER kh SET DATA TYPE varchar(13);

    alter table yhdab ALTER ID SET DATA TYPE varchar(13);

    alter table lst_bsi alter bsi_money set data type int;

    insert into yhdab values

    ('20000300001','123456','user01','20000300001'),

    ('20000300002','123456','user02','20000300002');

    49. 业务类型说明

    insert into ywlbb values

    ('user01','业务申请'),

    ('user02','业务撤消'),

    ('user03','费用查询'),

    ('user04','费用自缴'),

    ('user05','费用预存'),

    ('user06','密码修改'),

    ('user07','发票打印'),

    ('gl01','改用户基本信息'),

    ('gl02','更改支付信息'),

    ('gl03','日统计功能'),

    ('gl04','冲帐功能'),

    ('gl05','对帐功能'),

    ('gl06','计费功能'),

    ('gl07','综合统计')

    备份数据库:
    CONNECT TO EXOA;
    QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS;
    CONNECT RESET;
    BACKUP DATABASE EXOA TO "/home/exoa2/db2bak/" WITH 2 BUFFERS BUFFER 1024 PARALLELISM 1 WITHOUT PROMPTING;
    CONNECT TO EXOA;
    UNQUIESCE DATABASE;
    CONNECT RESET;

    以下是小弟在使用db2move中的一些经验,希望对大家有所帮助。

    db2      connect      to     YOURDB  
    连接数据库

    db2look -d     YOURDB     -a -e -x -o creatab.sql
    导出建库表的SQL

    db2move      YOURDB     export
    用db2move将数据备份出来

    vi      creatab.sql
    如要导入的数据库名与原数据库不同,要修改creatab.sql中CONNECT 项
    如相同则不用更改

    db2move     NEWDB     load
    将数据导入新库中

    在导入中可能因为种种原因发生中断,会使数据库暂挂
    db2       list tablespaces      show      detail
    如:
             详细说明:
            装入暂挂
    总页数                             = 1652
    可用页数                           = 1652
    已用页数                            = 1652
    空闲页数                            = 不适用
    高水位标记(页)                    = 不适用
    页大小(字节)                      = 4096
    盘区大小(页)                      = 32
    预读取大小(页)                    = 32
    容器数                              = 1
    状态更改表空间标识                       = 2
    状态更改对象标识                         = 59

    db2 select tabname,tableid from syscat.tables where tableid=59
    查看是哪张表挂起

    表名知道后到db2move.lst(在db2move     YOURDB     export的目录中)中找到相应的.ixf文件
    db2 load from tab11.ixf of ixf terminate into db2admin.xxxxxxxxx
    tab11.ixf对应的是xxxxxxxxx表

    数据库会恢复正常,可再用db2 list tablespaces show detail查看

    30.不能通过GRANT授权的权限有哪种?

    SYSAM

    SYSCTRL

    SYSMAINT

    要更该述权限必须修改数据库管理器配置参数

    31.表的类型有哪些?

    永久表(基表)

    临时表(说明表)

    临时表(派生表)

    32.如何知道一个用户有多少表?

    SELECT * FROM SYSIBM.SYSTABLES WHERE CREATOR='USER'

    33.如何知道用户下的函数?

    select * from IWH.USERFUNCTION

    select * from sysibm.SYSFUNCTIONS

    34.如何知道用户下的VIEW数?

    select * from sysibm.sysviewsWHERECREATOR='USER'

    35.如何知道当前DB2的版本?

    select * from sysibm.sysvERSIONS

    36.如何知道用户下的TRIGGER数?

    select * from sysibm.SYSTRIGGERSWHERESCHEMA='USER'

    37.如何知道TABLESPACE的状况?

    select * from sysibm.SYSTABLESPACES

    38.如何知道SEQUENCE的状况?

    select * from sysibm.SYSSEQUENCES

    39.如何知道SCHEMA的状况?

    select * from sysibm.SYSSCHEMATA

    40.如何知道INDEX的状况?

    select*fromsysibm.SYSINDEXES

    41.如何知道表的字段的状况?

    select*fromsysibm.SYSCOLUMNSWHERETBNAME='AAAA'

    42.如何知道DB2的数据类型?

    select*from sysibm.SYSDATATYPES

    43.如何知道BUFFERPOOLS状况?

    select*from sysibm.SYSBUFFERPOOLS

    44.DB2表的字段的修改限制?

    只能修改VARCHAR2类型的并且只能增加不能减少.

    45.如何查看表的结构?

    DESCRIBLE TABLE TABLE_NAME

    OR

    DESCRIBLE SELECT*FROM SCHEMA.TABLE_NAME

  • 面向对象的分析与面向对象的设计(OOA,OOD)

    2007-05-23 07:26:11

    面向对象的技术追求的是软件系统对现实世界的直接模拟,它把数据和对数据的操作封装成为一个整体。

    对象模型技术把信息构造在三类模型中,对象模型,状态模型和功能模型,每个模型从自己的角度对系统进行描述。

    面向对象的分析分为论域分析和应用分析,面向对象的设计则分为高层设计和低层设计。

    面向对象的分析主要指概念模型,按照对模型进行构造和评审的顺序分为五个层次:类和对象层,属性层,服务层,结构层和主题层。面向对象的设计,主要对系统的四个组成部分进行设计,它们是问题论域部分,用户界面部分,任务管理部分和数据管理部分。

    详细内容如下:

    OMT对象模型技术把分析时收集到的信息构造在三类模型中:

    对象模型:对谁做

    功能模型:做什么

    动态模型:何时做

    一.对象模型:描述系统的静态结构,包括类和对象,它们的属性和操作,以及它们之间的关系。

    数据词典:用以描述类,属性和关系;

    二.动态模型:着重于系统的控制逻辑,考察在任何时候对象及其关系的改变,描述这些涉及时序和改变的状态。

    状态图:是一个状态和事件的网络,侧重于描述每一类对象的动态行为

    事件跟踪图:侧重于说明系统执行过程中的一个特点“场景”,也叫做脚本,是完成系统某个功能的一个事件序列。

    事件:对象到对象的单个消息。

    场景:在系统的一个特定的环境下发生的一系列事件。

    三.功能模型:着重于系统内部数据的传送和处理。数据流图

    从输入数据能得到什么样的输出数据,不考虑参加计算的数据按什么时序执行。

    OOA面向对象的分析:软件开发过程中的问题定义阶段,得到对问题论域的清晰,精确的定义。

    论域分析阶段:目的是使开发人员了解问题空间的组成,建立大致的系统实现环境。论域分析给出一组抽象,从高层表示论域知识,常常超出当前应用的范围,作为特定系统需求开发的参考。

      领域专家和分析员,在分析过程中标识出系统的基本概念:对象,类,方法,关系等。识别论域的特征,把这些概念集成到论域的模型中。论域的模型中必须包含概念之间的关系,还有关于每个单独概念的全部信息。这里信息起一种胶合作用,把标识出的相关概念并入论域综合视图中去。

    应用分析阶段:依据问题论域模型,并把问题论域模型用于当前特定的应用之中。

    论域分析的视野大小直接影响到应用分析保留的信息量。

    论域分析阶段不需要用基于计算机系统的程序设计语言来表示,而应用分析阶段产生的影响条件则通过基于计算机系统的程序设计语言来表示。

    应用视图和类视图。在类视图中,必须对每个类的规格说明和操作进行详细化,并表示出类之间的相互作用。

     

    OOA的任务:

    完个两个任务

    形式的说明所面对的应用问题,最终成为软件系统基本构成的对象,以及系统所必须亲人的,由应用环境所决定的规则和约束。

    明确的规定构成系统的对象如何协同工作,完成指定的功能。

    通过OOA分析建立的系统模型是以概念为中心,称为概念模型。它由一组相关的类组成。

    概念模型构造和评审的顺序由五个层次构成:类和对象层,属性层,服务层,结构层,主题层。这五个层次不是构成软件系统的层次,而是分析过程中的层次。

    OOA的步骤:

    1.  标识对象和类。

    2.  标识结构。一般与特殊(基类与派生类),整体与部分(聚合,新类)

    3.  标识属性。对象所保存的信息称为它的属性。类的属性所描述的是状态信息,还要指定属性存在哪些特殊的限制(只读,属性值限定于某个范围之内等)。

    4.  标识服务。对象收到消息后执行的操作称为对象提供的服务,它描述了系统需要执行的处理和功能。定义服务的目的在于定义对象的行为和对象之间的通信。

    5.  标识主题。对于包含大量类和对象的概念模型往往难以掌握,标识主题则对模型进行划分,给出模型的整体框架,划分出层次结构。在标识主题时,可以采取先识别主题,而后对主题进行改进和细化,最后将主题加入到分析模型当中的步骤进行。

    OOD面向对象的设计:

    从分析到设计是一个逐步扩充模型的过程。

    分析主要以实际问题为中心,可以不包括任何与特定计算机有关的问题,主要考虑“做什么”

    设计则是面向计算机的实地开发活动,考虑“怎么做”的问题。

    高层设计和低层设计:

    高层设计:

    窗口――人机交互界面――问题论域――系统交互界面――问题论域

         报告     数据管理   物理设备

               文件,RDBMS

    高层设计过程中,应当使子系统的高层部件之间的通信量达到最小,把子系统中相互之间存在高度交互的类进行逻辑分组。

    低层设计:

    集中于类的详细设计阶段。类设计的目标是形成单一概念的模型,一个独立的类表示一个概念,以及设计的部件应该是可复用的和可靠的。

    类的设计过程中需要采用信息隐蔽,高内聚低耦合等设计原则。(即存类的复用是一个很大的优点)

    面向对象的设计过程:

    在设计阶段中利用分析阶段中提到的五个层次(对象和类,结构,属性,服务和主题),建立系统的四个组成部分:问题论域,用户界面,任务管理和数据管理。

    一.问题论域部分的设计:

    主要根据需求的变化,对面向对象的分析阶段产生的模型中的类和对象,结构,属性,操作进行组合和分解,根据面向对象的设计原则,增加必要的类,属性和关系。

    设计包括:复用设计;把问题论域相关的类关联起来;加入一般化的类以建立类间协议;调整继承支持级别;改进性能;加入较低层的构件。

    二.用户界面部分的设计:

      根据需求把交互的细节加入到用户界面的设计中,包括有效的人机交互所必须的实际显示和输入。

    设计包括:用户分类,描述人及其任务的脚本;设计命令层;设计详细的交互;继续扩展用户界面原型;设计人机交互类(HIC);根据图形用户界面进行设计。

    三.任务管理部分的设计

    任务:进程的别称,是执行一系列活动的一段程序。当系统中有许多并发行为时,需要依照各个行为的协调和通信关系,划分各种任务。以达到简化并发行为的设计和编码的目的。

    任务管理主要包括任务的选择和调整,主要工作为:识别事件驱动任务;识别时钟驱动任务;识别优先任务和关键任务;识别任务之间的协调者;对各个任务进行评审,保证它能够满足选择任务的过程标准;定义各个任务,说明它是什么任务,任务之间如何协调工作,如何通信。

    四.数据管理部分的设计:

    提供在数据管理系统中存储和检索对象的基本结构,包括对永久性数据的访问和管理。

    数据管理的方法有三种:文件管理,关系数据库管理以及面向对象的数据库管理。

    数据管理的设计包括:

    1.  数据存放设计。选择数据存放的方式:

    2.  设计相应的操作。为每个需要存储的对象和类增加用于存储管理的属性和操作,在类和对象的定义中加以描述

     

     

     

  • c#学习笔记-对out关键字的理解

    2007-05-14 13:56:14

    通过out关键字明白了几点:

    1.out关键字是通过引用来传递的,并且out 参数传递的变量不需要在传递之前进行初始化,否则需要先为value进行赋值,通过调用方法返回进行赋值.

    2.对于静态方法,不需要进行实例化就可以直接调用.

    3.int,string类型一般是值传递.

    class1.cs

    namespace ClassLibrary1
    {
        public class Class1
        {
        public   static void Method( out int i)
        {
            i = 44;
        }

        }
    }

    form1.cs

    namespace WindowsApplication7
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                int value;
                ClassLibrary1.Class1.Method(out value);
                Console.Write(value);

            }
        }
    }

  • c#学习笔记-数据库操作

    2007-05-11 09:22:39

    Datasetdatagridview中对数据进行删除、取消等操作,并将结果保存到数据库中。

    Form1.cs

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Text;

    using System.Windows.Forms;

     

    namespace WindowsApplication2

    {

        public partial class Form1 : Form

        {

            public Form1()

            {

                InitializeComponent();

                ClassLibrary1.oracle dataaccess = new ClassLibrary1.oracle();

                DataSet ds = dataaccess.getData();

               dataGridView1.DataSource = ds.Tables[0];

               /* 首先我们通过form1里头的load事件把数据加载到了datagridview,dataset(数据在内存

             中的缓存)已经和datagridviewdatasource榜定在一起了*/

            }

     

            private void butdelete_Click(object sender, EventArgs e)

            {

                if (this.dataGridView1.SelectedRows.Count > 0)

                {

                    for (int i = this.dataGridView1.SelectedRows.Count - 1; i >= 0; --i)

                    {

                      DataRowView rowview = ((DataRowView)this.dataGridView1.SelectedRows[i].DataBoundItem);

                       //获取用于填充行的数据绑带对象

                        rowview.Delete();

                       /*选中的行删除,但此时的被删除的数据并没有被真正的从数据库中删除,它只是

                       做了一个删除标记。*/

                        System.Windows.Forms.MessageBox.Show(rowview.Row.RowState.ToString());

                      /*打出行的状态查看一下。Rowstate在此非常重要,因为将涉及到对数据库的操作

                      系统怎么判断这一批的数据是被删除掉了

                    }

                     /*对于for循环中初始i值说明:datagridview将数据显示出来,每删除一行,

                    this.dataGridView1.SelectedRows.Count就会减少一行,因此初值要注意*/

     

                }

            }

     

            private void butcancel_Click(object sender, EventArgs e)

            {

              ((DataTable)dataGridView1.DataSource).RejectChanges();

               //回滚上次更新该表的操作

            }

    private void btnSave_Click(object sender, EventArgs e)

            {

    ClassLibrary1.oracle dataaccess = new ClassLibrary1.oracle();

              dataaccess.deleteData(((DataTable)dataGridView1.DataSource).DataSet);

     

            }

     

        }

    }

    Oracle.cs

    using System;

    using System.Collections.Generic;

    using System.Text;

    using System.Data .OracleClient;

    using System.Data;

     

    namespace ClassLibrary1

    {

        public  class oracle

        {

            string myConnectionText = "Data Source=MYORACLE;User Id=SYSTEM;Password=SYSTEM";

            string mySelectText = "SELECT * from scott.student";

     

            public DataSet getData()

            {

                OracleDataAdapter custDA = new OracleDataAdapter(mySelectText, myConnectionText);

         //实例化一个适配器,创建数据库的连接

                OracleConnection custConn = custDA.SelectCommand.Connection;

                //打开数据库的连接

                 DataSet ds = new DataSet();

                custDA.Fill(ds);

                //将对数据库的查询结果添加到DateSet中。

                return ds;

     

            }

        }

    }

    最后的图片

     

     删除选中行以后

    form1.cs设计中,拖拉一个datagridview,添加三个按钮,分别将它们的nametext属性改为

    butdelete.Name = "butdelete";

    butdelete.Text = "删除选中";

    butcancel.Name = "butcancel";

    butcancel.Text = "取消删除";

    butsave.Name = "butsave";

    butsave.Text = "保存";

  • c#学习笔记-基础概念

    2007-04-29 13:48:24

    .基础知识篇

    1.using system:表示导入名字空间,相当于c中的include语句,用于导入预定义的元素,这样在自己的程序中就可以自由地使用其中的元素.
    2.public partial class form1:form
    声明一个form1,代表是system.windows.forms.form 中的部分类

    3.项目的创建:vs2005.
       1.
    文件/新建/项目/windows应用程序/打开  (首先创建一个项目
    )
       2.
    右击解决方案,添加/新项目/选择类库.打开 

       3.在项目名称/引用/添加引用/项目/加载类库的名称/确定.(添加引用后,在程序执行过程中就可以引用类库中的相关属性)
     
    备注:解决方案中可以包括多个类和多个项目.

    二、属性,事件,this关键字,静态成员等。

    属性:用于定义类中的值,并对它们进行读写。

    事件:用于说明发生了什么事情。

    索引指示器:允许像使用数组那样为类添加路径列表。

    构造函数和析构函数:分别用于对类的实例进行初始化和销毁。

     

    保护成员:为了方便派生类的访问,又希望成员对于外界是隐藏的,这时可以使用protected修饰符,声明成员为保护成员。

    内部成员:使用internal修饰符的类的成员是一种特殊的成员。这种成员对于同一包中的应用程序或库是透明的,而在包.net之外是禁止访问的。

    Using System;

    Class Vehicle//定义汽车类

    Protected float weight;

    Public void F(){

          Weight=10;//允许访问自身成员。

    }

     Class train//定义火车类

    Public void F(){

    Vehicle v1=new Vehicle();

    V1.weight=6;//错误,不允许访问V1的保护成员

    }

    Class Car:Vehicle //定义轿车类

    Public void F(){

      Vehicle v1= new Vehicle();

    V1.weight=6;//正确,允许访问V1的保护成员。

    }

    This 保留字

    保留字this 仅限于在构造函数、类的方法和类的实例中使用。

    This做为一个值类型或变量类型,来表示对对象本身的引用、方法的对象的引用、正在构造的结构的引用、在结构的方法中它表示对调用该方法的结构的引用等。

     

    静态成员和非静态成员

    类的非静态成员属于类的实例所有,每创建一个类的实例,都在内存中为非静态成员开辟了一块区域。而类的静态成员属于类所有,为这个类的所有实例所共享。无论这个类创建了多少个副本,一个静态成员在内存中只占有一块区域。

    namespace ClassLibrary1

    {

     

        public class Test

        {

            int x;

            static int y;

            void F() {

                x = 1;

                y = 1;

            }

            static void G() {

                x = 1;//错误,不能访问this.x,静态成员是属于类所有的

                y = 1; //正确

     

            }

        }

     

    }

    namespace WindowsApplication1

    {

        public partial class Form1 : System.Windows.Forms.Form

        {

            public Form1() //构造函数

            {

                InitializeComponent();

    ClassLibrary1.Test t = new ClassLibrary1.Test();

                t.x = 1;

                t.y = 1;//不能在类的实例中访问静态成员

                ClassLibrary1.Test.x = 1;//不能按类访问非静态成员

                ClassLibrary1.Test.y = 1;

         }

     

     

  • 无模式对话框

    2007-04-27 18:10:15

        今天学了一个新概念,无模式对话框:例如,单击窗口中某链接弹出一个小的对话框,然后可以在父窗口继续对地图进行操作,而上面的子窗口不会消失.

    一般在网页中实现是采用javascrīpt,而在c/s则采用面向对象的语言开发.

        下面是vc++代码的实现:

    创建无模式对话框需要调用BOOL CDialog::Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );之后还需要调用BOOL CDialog::ShowWindow( SW_SHOW);进行显示,否则无模式对话框将是不可见的。相关代码如下:  

    void CYourView::OnOpenDlg(void)

    {

           /*假设IDD_TEST_DLG为已经定义的对话框资源的ID*/

           CTestDlg *dlg=new CTestDlg;

           dlg->Create(IDD_TEST_DLG,NULL);

           dlg->ShowWindows(SW_SHOW);

           /*不要调用 delete dlg;*/

    }

        在上面的代码中我们新生成了一个对话框对象,而且在退出函数时并没有销毁该对象。因为如果此时销毁该对象(对象被销毁时窗口同时被销毁),而此时对话框还在显示就会出现错误。那么这就提出了一个问题:什么时候销毁该对象。我时常使用的方法有两个:

    一、在对话框退出时销毁自己:在对话框中重载OnOKOnCancel在函数中调用父类的同名函数,然后调用DestroyWindow()强制销毁窗口,在对话框中映射WM_DESTROY消息,在消息处理函数中调用delete this;强行删除自身对象。相关代码如下:

    void CTestDlg1::OnOK()

    {

           CDialog::OnOK();

           DestroyWindow();

    }

     

    void CTestDlg1::OnCancel()

    {

           CDialog::OnCancel();

           DestroyWindow();

    }

     

    void CTestDlg1::OnDestroy()

    {

           CDialog::OnDestroy();

           AfxMessageBox("call delete this");

           delete this;

    }

     

    这种方法的要点是在窗口被销毁的时候,删除自身对象。所以你可以在任何时候调用DestroyWindow()以达到彻底销毁自身对象的作用。(DestroyWindow()的调用会引起OnDestroy()的调用)

     

    二、通过向父亲窗口发送消息,要求其他窗口对其进行销毁:首先需要定义一个消息用于进行通知,然后在对话框中映射WM_DESTROY消息,在消息处理函数中调用消息发送函数通知其他窗口。在接收消息的窗口中利用ON_MESSAGE映射处理消息的函数,并在消息处理函数中删除对话框对象。相关代码如下:

    /*更改对话框的有关文件*/

    CTestDlg2::CTestDlg2(CWnd* pParent /*=NULL*/)

           : CDialog(CTestDlg2::IDD, pParent)

    {/*m_pParent为一成员变量,用于保存通知窗口的指针,所以该指针不能是一个临时指针*/

           ASSERT(pParent);

           m_pParent=pParent;

           //{{AFX_DATA_INIT(CTestDlg2)

                  // NOTE: the ClassWizard will add member initialization here

           //}}AFX_DATA_INIT

    }

    void CTestDlg2::OnOK()

    {

           CDialog::OnOK();

           DestroyWindow();

    }

     

    void CTestDlg2::OnCancel()

    {

           CDialog::OnCancel();

           DestroyWindow();

    }

     

    void CTestDlg2::OnDestroy()

    {

           CDialog::OnDestroy();

           /*向其他窗口发送消息,将自身指针作为一个参数发送*/

           m_pParent->PostMessage(WM_DELETE_DLG,(WPARAM)this);

    }

     

    /*在消息接收窗口中添加消息映射*/

    /*在头文件中添加函数定义*/

           afx_msg LONG OnDelDlgMsg(WPARAM wP,LPARAM lP);

    /*添加消息映射代码*/

           ON_MESSAGE(WM_DELETE_DLG,OnDelDlgMsg)

    END_MESSAGE_MAP()

    /*实现消息处理函数*/

    LONG CMy53_s1View::OnDelDlgMsg(WPARAM wP,LPARAM lP)

    {

           delete (CTestDlg2*)wP;

           return 0;

    }

    /*创建对话框*/

    void CMy53_s1View::OnTest2()

    {

           CTestDlg2 *dlg=new CTestDlg2(this);

           dlg->Create(IDD_TEST_DLG_2);

           dlg->ShowWindow(SW_SHOW);

    }

     

    在这种方法中我们利用消息来进行通知,在Window系统中利用消息进行通知和传递数据的用法是很多的。

    同样无模式对话框的另一个作用还可以用来在用户在对话框中的输入改变时可以及时的反映到其他窗口。下面的代码演示了在对话框中输入一段文字,然后将其更新到视图的显示区域中,这同样也是利用了消息进行通知和数据传递。

     

    /*在对话框中取出数据,并向其他窗口发送消息和数据,将数据指针作为一个参数发送*/

    void CTestDlg2::OnCommBtn()

    {

           char szOut[30];

           GetDlgItemText(IDC_OUT,szOut,30);

           m_pParent->SendMessage(WM_DLG_NOTIFY,(WPARAM)szOut);

    }

     

    /*在消息接收窗口中*/

    /*映射消息处理函数*/

           ON_MESSAGE(WM_DLG_NOTIFY,OnDlgNotifyMsg)

     

    /*在视图中绘制出字符串 m_szOut*/

    void CMy53_s1View::OnDraw(CDC* pDC)

    {

           CMy53_s1Doc* pDoc = GetDocument();

           ASSERT_VALID(pDoc);

           // TODO: add draw code for native data here

           pDC->TextOut(0,0,"Display String");

           pDC->TextOut(0,20,m_szOut);

    }

    /*处理通知消息,保存信息并更新显示*/

    LONG CMy53_s1View::OnDlgNotifyMsg(WPARAM wP,LPARAM lP)

    {

           m_szOut=(char*)wP;

           Invalidate();

           return 0;

    }

     

Open Toolbar