论文部分内容阅读
摘要:阐述了大对象数据类型在Oracle数据库的实现方式,探讨了用PB存取Oracle数据库中图片资料的方式,并给出了社会保险管理信息系统中图片资料保存和显示的程序代码,强调了程序代码的关键点。
关键词:图片;信息系统;存取;PowerBuilder;Oracle
中图分类号:TP319 文献标识码:A 文章编号:1007-9599 (2012) 15-0000-02
1 引言
在开发管理信息系统时,经常会涉及图片处理,例如:需要处理员工照片,需要处理扫描后的档案资料等。在基于C/S结构开发的Oracle数据库系统中,图片存取的方式主要有三种。第一种:图片文件保存在固定的路径下,数据库中只保存取文件路径和名称,优点是可以节省磁盘空间,缺点是图片文件必须在固定的目录下,不能丢失损坏,且同一目录下文件不能重名,图片文件比较零散,管理不便;第二种:在Oracle数据库中用blob类型字段保存图片文件,数据库若存放在网络服务器上,用户对数据的共享访问方便;第三种:在本地用OLE存储结构存储备注文件。
我们在开发本企业的社会保险管理信息系统时,使用PowerBuilder作为前台开发工具,Oracle作为后台数据库管理平台,采用C/S结构,Oracle数据库中用blob类型字段保存图片文件的方式,成功实现了图片资料的处理功能。社会保险管理信息系统中记录参保人员的基本信息,这些信息都对应图片。所以,在Oracle数据库中建立表qa04,用来存储图片资料。表Qa04包含字段sfzhm(参保人员的身份证号码),类型是CHAR,是表的主键,tpzl(存储参保人员档案图片),类型是BLOB,其它字段(略)等。该表可以用PB在前台直接创建,也可以用CREAT命令在后台创建。
2 PB和ORACLE数据库的连接
PB是美国Sybase公司研制的基于Windows的一个集成化开发工具。它包含一个直观的图形界面和可扩展的面向对象的编程语言PowerScript,提供与当前流行的大型数据库的接口,并可以通过ODBC与数据库相连。
ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。我们开发的社会保险软件,考虑到数据量大,并发操作比较多,实时性要求高,所以采用了ORACLE数据库。
PB在访问数据库之前,必须首先要与Oracle数据库建立连接关系。PB与Oracle数据库的连接通过数据库接口来实现,Power Builder提供了两类接口:ODBC接口和专用接口。Oracle专用接口针对Oracle数据库管理系统而设计,针对自身的特点.能够充分发挥Oracle数据库的优势,因此应该选用专用接口进行连接。我们在开发本企业的社会保险管理信息系统时,是将连接参数写到配置文件当中,然后在PB脚本中从配置文件中读取文件,参数文件内容如下:
[Database]
DBMS=O84 Oracle8/8i (8.x.4+)
logId=[用户名称] ;logpass=[密码];servername=[服务器名称];database=[数据库密码];userid=[数据库名称];databasepassword=[Oracle服务器密码];
DBParm=PBCatalogOwner='ldrs',DisableBind=1,SvrFailover='Yes'
program=参保人员管理系统;version=1.0;copytime=2011.10.1
3 Oracle数据库中大对象数据类型
在Oracle数据库中主要有四种大对象数据类型:第一种是BLOB数据类型。用来存储可变长度的二进制数据。由于其存储的是通用的二进制数据,因此在数据库之间或者在客户端与服务器之间进行传输的时候,不需要进行字符集的转换,其传输的效率比较高,且不容易出现乱码现象。第二种是CLOB数据类型。是用来存储可变长度的字符型数据,其存储的最大数据量是4GB。而且在定义这个数据类型的时候,不需要指定最大的固定长度,这样就可以节省空间。第三种是NCLOB数据类型。这个数据类型跟CLOB数据类型相似,也是用来存储字符类型的数据,但它其存储的是Unicode字符集字符数据。第四种是BFILE数据类型。它是在数据库外面存储的可变二进制数据,其最多也可以存储4GB的数据。这个数据类型的特殊在于其在数据库之外存储实际数据。也就是说,跟其他大对象数据类型不同,其数据并不是存储在数据文件中,而是独立于数据文件而存在的。在这个字段中,其只存储了指针信息。
4 PB处理大对象数据类型
对于大二进制数据,在PB Script中是用blob数据类型表示并加以处理。标准SQL语句中的select、insert和update语句无法直接查询blob类型的数据,在PB中操作blob类型的数据只能用专用的语句,从数据库中查询blob类型的数据的命令是:
selectblob restofselectstatement {using transactionobject};
更新数据库中blob类型数据的格式是:
updateblob tablename
set blobcolumn=blobvarible
restofupatestatement {using transctionobject};
5 将资料图片文件保存到数据库方法
社会保险管理信息资料图片录入界面具有二个功能按钮,一个是“预览图片”,另一个是“保存图片”。
“预览图片”主要完成判断是否是图形文件,如文件后缀是“.BMP”、“.JPG”等都是图形文件;其次还要检验文件是否超过限定大小,在本例中文件限定为128KB,这样可以为数据库节约空间;最后因PB每次只能处理32KB的二进制信息,所以要利用循环语句将大图片分块读取。 “保存图片”主要用UPDATEBLOB语句,将图片文件存入数据库,语句格式如下,详细代码略。
UPDATEBLOB qa04 SET tpzl=:pict_data where sfzhm=:p_a_sfzhm
6 显示数据库中的资料图片
图6.1 图6.2
显示数据库中的资料图片界面如图6.1,要显示某一行信息的对应图片,只需双击该行信息。信息显示效果如图6.2。显示数据库中的资料图片主要用SELECTBLOB语句,具体代码如下:
integer fr_len;string pc_id;blob pictdata;long fp;string zlfl
//zlfl 变量--资料分类
this.setcolumn(3);zlfl=this.gettext();zlfl=trim(zlfl)
SELECTBLOB tpzl INTO :pictdata FROM qa04 where sfzhm=:p_a_sfzhm and gzdw=:zlfl;
int m_ln;m_ln = len(pictdata);
IF SQLCA.SQLCode = 0 and m_ln <>0 THEN
p_1.setpicture(pictdata)
p_1.show()
ELSE
MessageBox ("错误提示","图片读取失败!")
p_1.hide()
END IF
7 结论
社会保险管理信息系统中图片资料的最佳存储方式是用Oracle数据库中的BLOB数据类型,它不需要进行字符集的转换,传输的效率也比较高,且不容易出现乱码现象,便于在客户端与服务器之间进行数据传输。用PB对数据库中的图片资料进行存取,不能直接用标准的SQL语句,必须用专用的UPDATEBLOB和SELECTBLOB命令
参考文献:
[1]李劲.对PB访问数据库中大对象数据方法的研究[J].微计算机信息,2006,22:236-238
[2]何旭洪,赵吴彤,欧阳军.Oracle8+PowerBuilder7数据库应用开发[M].北京:人民邮电出版社,2001
[3]李玉东,马琳.PowerBuilder8.0控件与对象大全[M].北京:电子工业出版社,2002
[作者简介]高翔云(1970-),女,辽宁沈阳人,工程师,主要从事通信计费系统开发与维护。
关键词:图片;信息系统;存取;PowerBuilder;Oracle
中图分类号:TP319 文献标识码:A 文章编号:1007-9599 (2012) 15-0000-02
1 引言
在开发管理信息系统时,经常会涉及图片处理,例如:需要处理员工照片,需要处理扫描后的档案资料等。在基于C/S结构开发的Oracle数据库系统中,图片存取的方式主要有三种。第一种:图片文件保存在固定的路径下,数据库中只保存取文件路径和名称,优点是可以节省磁盘空间,缺点是图片文件必须在固定的目录下,不能丢失损坏,且同一目录下文件不能重名,图片文件比较零散,管理不便;第二种:在Oracle数据库中用blob类型字段保存图片文件,数据库若存放在网络服务器上,用户对数据的共享访问方便;第三种:在本地用OLE存储结构存储备注文件。
我们在开发本企业的社会保险管理信息系统时,使用PowerBuilder作为前台开发工具,Oracle作为后台数据库管理平台,采用C/S结构,Oracle数据库中用blob类型字段保存图片文件的方式,成功实现了图片资料的处理功能。社会保险管理信息系统中记录参保人员的基本信息,这些信息都对应图片。所以,在Oracle数据库中建立表qa04,用来存储图片资料。表Qa04包含字段sfzhm(参保人员的身份证号码),类型是CHAR,是表的主键,tpzl(存储参保人员档案图片),类型是BLOB,其它字段(略)等。该表可以用PB在前台直接创建,也可以用CREAT命令在后台创建。
2 PB和ORACLE数据库的连接
PB是美国Sybase公司研制的基于Windows的一个集成化开发工具。它包含一个直观的图形界面和可扩展的面向对象的编程语言PowerScript,提供与当前流行的大型数据库的接口,并可以通过ODBC与数据库相连。
ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。我们开发的社会保险软件,考虑到数据量大,并发操作比较多,实时性要求高,所以采用了ORACLE数据库。
PB在访问数据库之前,必须首先要与Oracle数据库建立连接关系。PB与Oracle数据库的连接通过数据库接口来实现,Power Builder提供了两类接口:ODBC接口和专用接口。Oracle专用接口针对Oracle数据库管理系统而设计,针对自身的特点.能够充分发挥Oracle数据库的优势,因此应该选用专用接口进行连接。我们在开发本企业的社会保险管理信息系统时,是将连接参数写到配置文件当中,然后在PB脚本中从配置文件中读取文件,参数文件内容如下:
[Database]
DBMS=O84 Oracle8/8i (8.x.4+)
logId=[用户名称] ;logpass=[密码];servername=[服务器名称];database=[数据库密码];userid=[数据库名称];databasepassword=[Oracle服务器密码];
DBParm=PBCatalogOwner='ldrs',DisableBind=1,SvrFailover='Yes'
program=参保人员管理系统;version=1.0;copytime=2011.10.1
3 Oracle数据库中大对象数据类型
在Oracle数据库中主要有四种大对象数据类型:第一种是BLOB数据类型。用来存储可变长度的二进制数据。由于其存储的是通用的二进制数据,因此在数据库之间或者在客户端与服务器之间进行传输的时候,不需要进行字符集的转换,其传输的效率比较高,且不容易出现乱码现象。第二种是CLOB数据类型。是用来存储可变长度的字符型数据,其存储的最大数据量是4GB。而且在定义这个数据类型的时候,不需要指定最大的固定长度,这样就可以节省空间。第三种是NCLOB数据类型。这个数据类型跟CLOB数据类型相似,也是用来存储字符类型的数据,但它其存储的是Unicode字符集字符数据。第四种是BFILE数据类型。它是在数据库外面存储的可变二进制数据,其最多也可以存储4GB的数据。这个数据类型的特殊在于其在数据库之外存储实际数据。也就是说,跟其他大对象数据类型不同,其数据并不是存储在数据文件中,而是独立于数据文件而存在的。在这个字段中,其只存储了指针信息。
4 PB处理大对象数据类型
对于大二进制数据,在PB Script中是用blob数据类型表示并加以处理。标准SQL语句中的select、insert和update语句无法直接查询blob类型的数据,在PB中操作blob类型的数据只能用专用的语句,从数据库中查询blob类型的数据的命令是:
selectblob restofselectstatement {using transactionobject};
更新数据库中blob类型数据的格式是:
updateblob tablename
set blobcolumn=blobvarible
restofupatestatement {using transctionobject};
5 将资料图片文件保存到数据库方法
社会保险管理信息资料图片录入界面具有二个功能按钮,一个是“预览图片”,另一个是“保存图片”。
“预览图片”主要完成判断是否是图形文件,如文件后缀是“.BMP”、“.JPG”等都是图形文件;其次还要检验文件是否超过限定大小,在本例中文件限定为128KB,这样可以为数据库节约空间;最后因PB每次只能处理32KB的二进制信息,所以要利用循环语句将大图片分块读取。 “保存图片”主要用UPDATEBLOB语句,将图片文件存入数据库,语句格式如下,详细代码略。
UPDATEBLOB qa04 SET tpzl=:pict_data where sfzhm=:p_a_sfzhm
6 显示数据库中的资料图片
图6.1 图6.2
显示数据库中的资料图片界面如图6.1,要显示某一行信息的对应图片,只需双击该行信息。信息显示效果如图6.2。显示数据库中的资料图片主要用SELECTBLOB语句,具体代码如下:
integer fr_len;string pc_id;blob pictdata;long fp;string zlfl
//zlfl 变量--资料分类
this.setcolumn(3);zlfl=this.gettext();zlfl=trim(zlfl)
SELECTBLOB tpzl INTO :pictdata FROM qa04 where sfzhm=:p_a_sfzhm and gzdw=:zlfl;
int m_ln;m_ln = len(pictdata);
IF SQLCA.SQLCode = 0 and m_ln <>0 THEN
p_1.setpicture(pictdata)
p_1.show()
ELSE
MessageBox ("错误提示","图片读取失败!")
p_1.hide()
END IF
7 结论
社会保险管理信息系统中图片资料的最佳存储方式是用Oracle数据库中的BLOB数据类型,它不需要进行字符集的转换,传输的效率也比较高,且不容易出现乱码现象,便于在客户端与服务器之间进行数据传输。用PB对数据库中的图片资料进行存取,不能直接用标准的SQL语句,必须用专用的UPDATEBLOB和SELECTBLOB命令
参考文献:
[1]李劲.对PB访问数据库中大对象数据方法的研究[J].微计算机信息,2006,22:236-238
[2]何旭洪,赵吴彤,欧阳军.Oracle8+PowerBuilder7数据库应用开发[M].北京:人民邮电出版社,2001
[3]李玉东,马琳.PowerBuilder8.0控件与对象大全[M].北京:电子工业出版社,2002
[作者简介]高翔云(1970-),女,辽宁沈阳人,工程师,主要从事通信计费系统开发与维护。