|
|
| SQL Story摘录(十)————游标的应该与不应该 |
|
|
| 作者:佚名 文章来源:本站整理 更新时间:2008-9-27 9:42:32 |
|
|
|
|
SQL Story摘录(十)————游标的应该与不应该
来源:不详 作者 佚名 点击数: 录入时间:07-12-19 21:47:13
游标概观
相信很多Delphi程序员都写过这样的代码:
...
begin
MyDataSet.Open;
MyDataSet.Frist;
while not ( MyDataSet.BOF or MyDataSet.EOF) do
begin
...
end;
MyDataSet.Close;
end;
...
很久以来,我们习惯了用这样的代码对数据库返回的数据进行逐行操作。在用客户端程序的代码打开数据集之前,我们把它当做是一个无序集合。不过,在需要时,我们在服务器端就可以直接以行操作形式处理数据集,这就是游标。
游标的的使用方法类似前面的Delphi代码,通常有如下四步:
一、声明游标:Declare Cursor,这一过程在前面的代码中没有体现出来。然而我们都知道,在使用一个数据集之前,我们总要定义它的种种属性,比如数据源、SQL语句、打开方式等等。在游标中,数据源一般是不用指定了(因为就在当前数据库中,MS SQL Server中也可以通过SQL语言来读取异构数据源)。不过我们要为它指定一个数据集,还可以为它指定各种打开方式的设置,比如是否允许写操作,是否可以随机读取等等。一般来说,数据库系统默认的游标是只读、单向、逐行读取的。
二、打开游标:Open Cursor,一个Delphi(或其它开发平台)的数据集组件,在指定了各种必要属性后,还一定要用一个打开指令(如前面的MyDataSet.Open)来打开它,才能得到我们所需要的数据集,对于游标,我们也一样需要一个Open指令来打开它,才能使用。
三、操作数据:这一步骤通常包括移动当前游标、读取当前数据、操作代码三部分。前面设置的游标属性,很大一部分是关于这里面所能进行什么样操作的。比如,对于双向游标,我们可以向前或向后一行,而随机游标,我们甚至可以以随机方式指定游标的操作位置,但最常见的游标,是单向、只读的那一种。而对于当前行数据,我们能常是通过定义一些变量来读取,或移动到适当位置再进行写操作,这一点和一般的开发工具是一样的。至于操作代码,这虽然不是SQL的强项,但一般的数据库系统也提供基本的过程化编码能力,可以让我们完成操作。
四、关闭结果集:Close Cursor 做事要有始有终,在Delphi中,如果忘了关闭自己打开的数据集,会带来很多麻烦,而在数据库系统中,如果打开一个游标没有关上(想想吧,游标操作是要对数据上锁的),如果有很多用户都在执行这段有问题的代码……所以,在游标的标准语法中,有明确的语句,用来关闭数据集,并释放所占用的各种资源。这一点更像是OO语言中的析构函数,比Delphi的数据集组件的Close方法要做的事情要多一些。
以上各个步骤,SQL标准都约定了相应的实现代码。但具体到各个DBMS平台的实现,却是大同小异。问题就在于这一点不同之处足以把人烦死。所以,我[1] [2] [3] 下一页
|
|
|
|
| 文章录入:admin 责任编辑:admin |
|
|
上一篇文章: 学 习 中 的 思 考 下一篇文章: 国内企业实施ERP的思考 |
|
|
|
|
|
|