|
一、处理 SQL 语句
1、缓冲 SQL 语句
在应用程序中,有时需要反复调用同一组 SQL语句,在这种情况下,可以通过在应用中为这些 SQL 建立缓冲区来提高执行性能。在缺省情况下,SQL 语句的缓冲区是关闭的,你可以通过如下语句打开它:
SQLCACHE = n
n 表示装入缓冲区的 SQL 语句数量(缺省为0)
例如:
dw_1.SetTransObject(sqlca)
SQLCA.dbParm = "SQLCache = 0"
dw_1.retrieve()
如果将上例的 "SQLCache = 0" 改为 "SQLCache = 25",此句的执行效率将提高五分之一左右。但应注意缓冲区的大小,否则也将影响程序执行的性能。
注:此方法对用 ODBC 和 ORACLE 连接的数据库非常有效。
2、捆绑变量
请看下例:
SQLCA.DBPARM = "DISABLEBIND=1"
INSERT INTO DA_DH VALUES("1","河南0")
INSERT INTO DA_DH VALUES("2","河南1")
INSERT INTO DA_DH VALUES("3","河南2")
INSERT INTO DA_DH VALUES("4","河南3")
INSERT INTO DA_DH VALUES("5","河南4")
INSERT INTO DA_DH VALUES("6","河南5")
这里未使用捆绑变量,在插入是 PB 将重新处理每个带有新值的SQL语句。
如果将上例改为:
SQLCA.DBPARM = "DISABLEBIND=0"
INSERT INTO DA_DH VALUES("1","河南0")
INSERT INTO DA_DH VALUES("2","河南1")
INSERT INTO DA_DH VALUES("3","河南2")
INSERT INTO DA_DH VALUES("4","河南3")
INSERT INTO DA_DH VALUES("5","河南4")
INSERT INTO DA_DH VALUES("6","河南5")
则系统将把 INSERT 语句按如下格式进行处理: INSERT INTO DA_DH VALUES(?,?)
其中 "?" 称为占位符。系统性能将有所增强。
3、用数据窗口代替 SQL 语句
通常,为了获得某些数据,采用数据窗口和 SQL 语句都是可行的,但是PB 对数据窗口和 SQL 语句采用不同的处理机制,因此,具有不同的效率。
例:为里检索电话档案中的用户名,可以利用 SQL 语句,将所有的数据检索到一个多行编辑中,也可以检索到一个数据窗口中。
如果使用第一中方法:首先定义一个游标:
DECLARE CUR CURSOR FOR
SELECT "DA_DH"."HM"
FROM "DA_DH";
然后可以:
STRING stxt[],st
int li
open cur
do li = li + 1
fetch cur
into :stxt[li] ;
st=st+stxt[li] + "~r~n"
loop while stxt[li]<>""
close cur;
mle_1.txt = st
也可以使用第二种方法:
dw_1.settransobject(sqlca)
dw_1.retrieve()
利用 POWERBUILDER PROFILER 工具进行检查,对比两种方法所需时间如下
方法 所需时间 (百分之一秒)
SQL 语句 100.9857
数据窗口 49.0133
由于数据窗口或 DATASTORE 使用了标准的内嵌的代码,而不是有开发人员进行全部编码,同时编译执行的速度比解释执行的速度快的多,因此在开发过程中应尽量使用数据窗口和DATASTORE..即使是必须用 SQL 语句的时候,也应该尽量将它们定义为存储过程(特别是在多用户的环境中),以提高应用程序的性能.
二、数据窗口的编程和执行
上一篇:PowerBuilder编程技巧四则
下一篇:PB中使用FORMULA ONE入门介绍
|