(一)浅谈游标

(1)游标的概念

游标是指向查询结果集的一个指针,它是一个通过定义语句与一条Select语句相关联的一组SQL语句,即从结果集中逐一的读取一条记录。游标包含两方面的内容:

●游标结果集:执行其中的Select语句所得到的结果集;

●游标位置:一个指向游标结果集内的某一条记录的指针

利用游标可以单独操纵结果集中的每一行。游标在定义以后存在两种状态:关闭和打开。当游标关闭时,其查询结果集不存在;只有当游标打开时,才能按行读取或修改结果集中的数据。

(2)浅谈游标

游标我们可以通俗的解释为变动的标示。正如它的解释一样,数据库中的游标其实也是一种读取数据的方式。举个简单的例子来说:我有一个电话本,电话本上的号码首先是按地域划分的,现在我想找个家住廊坊的李四。首先我们要做的是先找到廊坊地区的电话表,找到后的表也即是我们上面所说的游标结果集;而为了找到李四我们可能会用手一条一条逐行的扫过,以帮助我们找到所需的那条记录。对应于数据库来说,这就是游标的模型。所以,你可以这样想象:表格是数据库中的表,而我们的手好比是游标。

总结来说游标就好比是在电话本上逐一扫描号码的手指。

(二)使用游标

一个应用程序中可以使用两种类型的游标:前端(客户)游标和后端(服务器)游标,它们是两个不同的概念。

但无论使用哪种游标,都必须经过如下的步骤:

●声明游标

●打开游标

●从游标中操作数据

●关闭游标

下面我们主要讲述下服务器游标:

(1)定义游标

使用游标之前必须先声明它。声明指定定义游标结果集的查询。通过使用for update或for read only关键词将游标显式定义成可更新的或只读的。

Declare cursor_name  cursor

For select_statement

[for{read only|update[of colum_name_list]}]

举例:

Declare  company_crsr cursor

For select name,salary from company where salary>2000

For update of name,salary

上面我们声明了一个名为company_crsr的游标。

(2)打开游标

open的语法为:

open游标名

在声明游标后,必须打开它以便用fetch,update,delete读取、修改、删除行。在打开一个游标后,它将被放在游标结果集的首行前,必须用fetch语句访问该首行。

(3)读取游标数据

在声明并打开一个游标后,可用fetch命令从游标结果集中获取数据行。

Fetch的语法为:

Fetch[[Next | Prior | First | Last | Absolute{n|@nvar} |Relative {n|@nvar}]

From]游标名[into变量列表]

参数说明:

Next:返回结果集中当前行的下一行,如果该语句是第一次读取结果集中数据则返回的是第一行

Prior:返回结果集中当前行的上一行,如果该语句是第一次读取结果集中的数据则无记录结果返回并把游标位置设置为第一行。

First:返回游标第一行;Last:返回游标中的最后一行;

Absolute{n|@nvar}:如果n或@nvar为正数,返回从游标头开始的第n行并将返回的行变成新的当前行。如果n或@nvar为负数,返回游标尾之前的第n行并将返回的行变成新的当前行。如果n或@nvar为0,则没有行返回。n必须为整型常量且@nvar必须为smallint、tinyint或int。

RELATIVE {n | @nvar}:如果n或@nvar为正数,返回当前行之后的第n行并将返回的行变成新的当前行。如果n或@nvar为负数,返回当前行之前的第n行并将返回的行变成新的当前行。如果n或@nvar为0,返回当前行。如果对游标的第一次提取操作时将FETCH RELATIVE的n或@nvar指定为负数或0,则没有行返回。n必须为整型常量且@nvar必须为smallint、tinyint或int。

举例:

Fetch  next

company_crsr into @name,@salary

SQL Server在每次读取后返回一个状态值。可用@@sql_status访问该值,下表给出了可能的@@sql_status值及其意义。

值意义:

0——Fetch语句成功

1——Fetch语句导致一错误

2——结果集没有更多的数据,当前位置位于结果集最后一行,而客户对该游标仍发出Fetch语句时。

若游标是可更新的,可用update和delete语句来更新和删除行。

删除游标当前行的语法为:

Delete [from]表名

where current of游标名

举例:delete from authors where current of authors_crsr

当游标删除一行后,SQL Server将游标置于被删除行的前一行上。

更新游标当前行的语法为:

update表名

set column_name1={expression1|NULL|(select_statement)}

[,column_name2={expression2|NULL|(select_statement)}

[……]

where current of游标名

举例:

update company

set name=”张三”,salary=”5000”

where current of company_crsr

(4)关闭游标

当结束一个游标结果集时,可用close关闭。该语法为:

close游标名

关闭游标并不改变其定义,可用open再次打开。若想放弃游标,必须使用deallocate释放它,deallocater的语法为:

deallocater cursor游标名

deallocater语句通知SQL Server释放Declare语句使用的共享内存,不再允许另一进程在其上执行Open操作。

java 数据库 游标_让数据库游标变得简单相关推荐

  1. java数据库实例_选择数据库实例

    选择数据库实例 本章介绍了如何使用 JDBC 应用程序选择一个数据库的示例.执行下面的示例之前,请确保你已做好以下工作- 在运行下面的例子之前,你需要用你实际的用户名和密码去代替 username 和 ...

  2. java 分布式数据库架构_分布式数据库的模式结构介绍

    分布式数据库的模式结构可以划分为全局视图.全局概念层.局部概念层.局部内层.各层之间有相应的层间映射.具体介绍如下: 1.全局外层 分布式数据库是一组分布的局部物理数据库的逻辑集合.分布式数据库的全局 ...

  3. jsp和mysql答辩_如何应对JSP连接MySQL数据库问题_网站数据库怎么连接到网页答辩问题...

    当您面临JSP连接MySQL数据库问题,你首先需要在MySQL数据库里创建一username表,表里面创建两个字符型的字段,字段名分别为:uid,pwd,然后插入几条测试数据. 以下用两种方式来实现J ...

  4. dts数据库迁移工具_传统数据库迁移上云利器-ADAM

    自1970年关系型数据库被提出以来,至今已有50年历史.但在关系型数据库领域正在发生着巨大的变化,首先是互联网的发展,使得开源数据库越来越受欢迎,可扩展性成为支撑业务发展的重要特性,比如WebScal ...

  5. java 映射类_将数据库类型映射到具体的Java类

    解 答案比使用getMetaData方法更复杂,因为getMetaData方法返回的整数类型和完整的类名没有直接映射.此解决方案需要两段代码: >实现一个方法来获取java.sql.Types常 ...

  6. java 数据库 树_在数据库中保存树数据(族树)

    我正在尝试存储一棵家谱 . 这是我正在使用的平台,Zend框架,Mysql,Ajax我搜索了stackoverflow我遇到过这篇文章,这对于处理对象方面的数据非常有帮助 . 我将简要说明我的用例 . ...

  7. java下拉列表 动态_【示例】教你简单用Java写一个动态更新的下拉列表(无数据库)...

    动态更新下拉列表 varxmlHttp;functioncreatXMLHttpRequest() {if(window.ActiveXObject){xmlHttp=newActiveXObject ...

  8. python读取oracle数据库性能_用python对oracle进行简单性能测试

    一.概述 dba在工作中避不开的两个问题,sql使用绑定变量到底会有多少的性能提升?数据库的审计功能如果打开对数据库的性能会产生多大的影响?最近恰好都碰到了,索性做个实验. sql使用绑定变量对性能的 ...

  9. 知识图谱 图数据库 推理_图数据库的知识表示与推理

    知识图谱 图数据库 推理 图形数据库及其技术生态系统可以为知识表示和推理问题提供优雅,有效的解决方案. 要了解这种说法,我们必须首先了解什么是图形. 图是一种数据结构. 图数据结构的类型很多,但出于本 ...

最新文章

  1. 引入外部css_css
  2. AI创业哪家强?6大选择给你方向
  3. Cydia for Android2
  4. 网易游戏2016实习生招聘笔试题目--推箱子
  5. Docker简介以及mysql和redis的部署
  6. 新媒体学python有用吗_你真的不学Python吗?学习Python的四大理由!
  7. TOC之关键链项目管理遇到软件工程7原则
  8. nginx配置多个conf文件
  9. 【广州】Web前端工程师
  10. e3是合法浮点数吗_下面4个选项中,均是合法浮点数的选项是?
  11. tableau两个不同的图合并_举个栗子!Tableau技巧(59):学做两个集合的维恩图(文氏图)Venn diagram...
  12. java编译生成哪些文件_java编译后生成什么文件?生成的文件包括什么?
  13. AWK 批量杀进程号,好记性不如烂笔头
  14. 配置tomcat用户
  15. VGG16迁移学习,实现医学图像识别分类工程项目
  16. c#开发大全、系列文章、精品教程
  17. Shell Notes(2)
  18. 「leetcode」C++题解:20. 有效的括号,括号匹配是使用栈解决的经典问题
  19. 【VHDL语言学习笔记(七)】 分频器
  20. Could not resolve com.huawei.agconnect:agcp

热门文章

  1. 初探Eigen(error C2719: “Qcw”: 具有 __declspec(align('16')) 的形参将不被对齐)
  2. Cocos Creator JSB绑定
  3. 120D02S 调试与维修(三)
  4. puppeteer Error: getaddrinfo ENOTFOUND storage.googleapis.com
  5. 自动售货机原来还可以用在这里?厉害了
  6. c语言这样计算一个厄数的位数,c语言编程 题目和答案.doc
  7. Angular 7 升级到Angular 12
  8. 学完计算机绘图收获有哪些,国开电大-计算机绘图(本)-形考任务检测1-6答案...
  9. Asp.net在线阅读文件(pdf,txt,doc,jpg等)
  10. 解决Win10无法修改hosts文件