• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

AS/400开发经验点滴(三)--如何使用分布式关系数据库

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 26次 | 进入软件测试论坛讨论

领测软件测试网
AS/400开发经验点滴(三)


五.如何使用分布式关系数据库

我们可以在AS/400系统中使用STRSQL命令来交互执行SQL语句。如果AS/400系统中没有安装交互式SQL工具,那么我们便不能使用SQL语句进行交互式查询等操作。假设有一群连网的AS/400,其中只有一台安装了交互式SQL工具,那么我们能不能只通过这台AS/400的交互SQL工具去对其他没有安装SQL交互工具机器的数据库进行操作呢?答案是肯定的,这就需要使用分布式关系数据库。

分布式数据库管理是AS/400系统提供的一个重要功能之一,其功能比较强大,在本文里只能根据作者经验对分布式关系数据库的使用作简单介绍,根据这个简单介绍,你就可以很容易体验分布式关系数据库的使用。

要使用分布式关系数据库,首先需要创建关系数据库目录,即Relational Database Diretory。用WRKRDBDIRE可以查看关系数据库目录,其界面如下:
[code:1:77907562ca]
                Work with Relational Database Directory Entries 
 
 Position to  . . . . . . 
 
 Type options, press Enter.
   1=Add   2=Change   4=Remove   5=Display details   6=Print details
 
        Relational           Remote
 Option  Database            Location                  Text

   -     PRODUCT         PRODUCT
   -     BACKUP          *LOCAL[/code:1:77907562ca]该示例显示在BACKUP机器上已经创建了PRODUCT和BACKUP两个Relational Database Directory Entry。对应界面操作选择项命令则分别是ADDRDBDIRE、CHGRDBDIRE、RMVRDBDIRE、DSPRDBDIRE。

用ADDRDBDIRE命令可以增加新的Relational Database Directory Entry。这个命令里有两个必填项(其他项可以使用缺省),RDB项是取一个关系数据库的名称,通常选择与机器系统名一致的名称,RMTLOCNAME是给定对方地址名称,如果是定义本地关系数据库,则此项填*LOCAL。如果是定义远程机器数据库,在RMTLOCNAME项实际上要填两个域,先确定通信类型,可选项是*SNA和*IP,分别表示使用SNA协议或TCP/IP协议通信。如果TYPE选择*SNA,则Name or address里需填远程机器location name,这个location name可以在远程机器上执行DSPNETA命令查到。如果TYPE选择*IP,则Name or address可以直接填IP地址。

[code:1:77907562ca]                      Add RDB Directory Entry (ADDRDBDIRE)

 Type choices, press Enter.  
 
 Relational database  . . . . . PRODUCT
 Remote location:  
   Name or address  . . . . . PRODUCT     Name, *LOCAL, *ARDPGM 
   Type . . . . . . . . . . . . .   *SNA          *SNA, *IP                     
 Text . . . . . . . . . . . . . .   *BLANK              [/code:1:77907562ca]
关系数据库目录创建好后,我们就可以在STRSQL命令里连接不同的关系数据库。

用CONNECT TO语句可以第一次连接关系数据库,比如在BACKUP机器上在STRSQL界面里执行CONNECT TO PRODUCT,那么我们就在BACKUP机器上连接上了PRODUCT机器上的数据库,接下来任何SQL语句操作都是对PRODUCT机器上数据库操作,再执行CONNECT TO BACKUP,那么又回到本地数据库操作。

如果BACKUP和PRODUCT关系数据库已经连接,那么不能再使用CONNECT TO语句切换连接,切换连接的命令则是SET CONNECTION,比如我们要重新切换到PRODUCT连接,则执行SQL语句:SET CONNECTION PRODUCT。

如果我们要关闭关系数据库连接,则可以使用SQL语句DISCONNECT,比如执行DISCONNECT PRODUCT就关闭了PRODUCT的关系数据库连接。如果在使用STRSQL的时候,你启动了事务机制,那么DISCONNECT就不再起作用了,这时候如果要关闭关系数据库连接,需要使用RELEASE语句,比如RELEASE PRODUCT,注意在RELEASE之后,还必须再执行COMMIT或ROLLBACK语句才能彻底关闭关系数据库连接。

综上,与关系数据库操作有关的SQL语句为下面四条:
[list:77907562ca]CONNECT TO
SET CONNECTION
DISCONNECT
RELEASE[/list:u:77907562ca]

 yokel 回复于:2003-12-25 08:29:07
谢谢!!!

 xuguopeng 回复于:2003-12-25 08:47:51
好 UP~

 wildfish 回复于:2003-12-25 10:44:51
老大,嗯,不错,我们都喜欢

 yj2yq 回复于:2003-12-25 10:55:06
顶顶,再顶顶!

 kevingao 回复于:2003-12-25 11:47:26
UP

 blogliou 回复于:2003-12-25 15:34:38
六.如何利用分布式关系数据库进行分布式编程

我们不仅可以使用STRSQL进行关系数据库的交互操作,还可以用关系数据库的SQL语句进行分布式编程,即我们可以在一台机器的程序里连接另一台机器的关系数据库,从而通过程序实现对另一台机器的数据库操作,这就是分布式数据库编程。

下面以ILE RPG程序为例,说明如何进行分布式编程。因为在程序中要使用SQL语句,所以程序类型(或扩展名)是SQLRPGLE。因为在程序中,需要先连接关系数据库,才能打开数据库文件,所以在F行规范定义中,不能使用隐含打开方式,需要指定USROPN关键词来显式打开文件。如下例TESTPF文件就是另一台机器上的文件:

FTESTPF   IF   E           K DISK    USROPN


连接关系数据库方式如下:

C/EXEC SQL                                    
C+          CONNECT   TO  :RDBNAM             
C/END-EXEC

如果关系数据库连接已经建立,则返回错误码-842,可以判断此错误码,重新SET一次关系数据库连接:

C     SQLCOD        IFEQ      -842     
C/EXEC SQL                             
C+    SET   CONNECTION    :RDBNAM      
C/END-EXEC                             
C                     ENDIF

关系数据库连接建好后,我们就可以显示打开另一台机器的文件TESTPF了:

C                   OPEN      TESTPF

之后就可以对TESTPF进行各种数据库操作了。


要退出程序时,需要关闭数据库连接:

C/EXEC SQL                       
C+       DISCONNECT   :RDBNAM    
C/END-EXEC                       

如果程序中使用了事务处理机制,需要用RELEASE关闭连接:

C/EXEC SQL                           
C+       RELEASE      :RDBNAM        
C/END-EXEC                           
C….
C/EXEC SQL COMMIT       
C/END-EXEC               

这样子分布式程序就写好可以编译了。分布式程序要正常工作,还需要SQL Package来支持!OS/400系统支持一种叫SQL Package的目标,其目标类型是*SQLPKG。SQL Package包含有分布式程序运行时处理SQL语句的控制和访问计划。建立SQL Package有两种方法,一种方法是在编译分布式程序时,在Relational database(RDB)选择项里填写远程机器的关系数据库名,那么编译器会自动创建一个名字与程序名一样但类型为*SQLPKG的目标。另一种方法是用CRTSQLPKG命令手工创建SQL Package:

                         Create SQL Package (CRTSQLPKG)  

 Type choices, press Enter.

 Program  . . . . . . . . . . . .                 Name                          
   Library  . . . . . . . . . . .     *LIBL       Name, *LIBL, *CURLIB          
 Relational database  . . . . . .   *PGM                                        
 RDB user . . . . . . . . . . . .   *CURRENT      Name, *CURRENT                
 RDB user password  . . . . . . .                 Character value, *NONE, ' '   
 Default Collection . . . . . . .   *PGM          Name, *PGM, *NONE             
 Object type  . . . . . . . . . .   *PGM          *PGM, *SRVPGM                 
 Module list  . . . . . . . . . .   *ALL          Character value, *ALL         
                + for more values                                           
 Text 'description' . . . . . . .   *PGMTXT                                     

在Program选项里填写上面编译后的分布式程序名,在Relational database选项里填写已经定义的另一台机器的关系数据库名。

我们在实际运行分布式程序前,可以根据配置关系数据库名称,用DELSQLPKG删除原来的SQL Package,用CRTSQLPKG重新创建一个新的SQL Package。有了SQL Packge支持,分布式程序就可以正常运行了。

 qingzhou 回复于:2003-12-25 17:15:40
顶!!!
辛苦了!!!

 fairyboy 回复于:2004-12-01 08:05:09
哈,楼主真厉害,加油!

 Red_Crow 回复于:2004-12-01 08:53:11
支持,加油。

 ╰●-●╯ 回复于:2004-12-01 09:20:08
It's Good !!

 thursday 回复于:2004-12-01 09:43:35
收藏,帮顶!

 thursday 回复于:2004-12-01 09:43:35
收藏,帮顶!

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网