这篇文章并没有给出如何使用ResultSet的具体例子,只是从ResultSet的功能性上进行了详细的讲述。希望这篇文章对大家理解ResultSet能够有所帮助。下面就是这篇文章的具体内容。
      结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等。

结果集读取数据的方法主要是getXXX(),他的参数可以使整型表示第几列(是从1开始的),还可以是列名。返回的是对应的XXX类型的值。如果对应那列时空值,XXX是对象的话返回XXX型的空值,如果XXX是数字类型,如Float等则返回0,boolean返回false。使用getString()可以返回所有的列的值,不过返回的都是字符串类型的。XXX可以代表的类型有:基本的数据类型如整型(int),布尔型(Boolean),浮点型(Float,Double)等,比特型(byte),还包括一些特殊的类型,如:日期类型(java.sql.Date),时间类型(java.sql.Time),时间戳类型(java.sql.Timestamp),大数型(BigDecimal和BigInteger等)等。还可以使用getArray(int colindex/String columnname),通过这个方法获得当前行中,colindex所在列的元素组成的对象的数组。使用getAsciiStream(
int colindex/String colname)可以获得该列对应的当前行的ascii流。也就是说所有的getXXX方法都是对当前行进行操作。

结果集从其使用的特点上可以分为四类,这四类的结果集的所具备的特点都是和Statement语句的创建有关,因为结果集是通过Statement语句执行后产生的,所以可以说,结果集具备何种特点,完全决定于Statement,当然我是说下面要将的四个特点,在Statement创建时包括三种类型。首先是无参数类型的,他对应的就是下面要介绍的基本的ResultSet对应的Statement。下面的代码中用到的Connection并没有对其初始化,变量conn代表的就是Connection对应的对象。SqlStr代表的是响应的SQL语句。

1、 最基本的ResultSet。
     之所以说是最基本的ResultSet是因为,这个ResultSet他起到的作用就是完成了查询结果的存储功能,而且只能读去一次,不能够来回的滚动读取。这种结果集的创建方式如下:

Statement st = conn.CreateStatement()
ResultSet rs = Statement.excuteQuery(sqlStr);

由于这种结果集不支持,滚动的读去功能所以,如果获得这样一个结果集,只能使用它里面的next()方法,逐个的读去数据。

2、 可滚动的ResultSet类型。
     这个类型支持前后滚动取得纪录next()、previous(),回到第一行first(),同时还支持要去的ResultSet中的第几行absolute(int n),以及移动到相对当前行的第几行relative(int n),要实现这样的ResultSet在创建Statement时用如下的方法。

Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency)
ResultSet rs = st.executeQuery(sqlStr)

其中两个参数的意义是:
       resultSetType是设置ResultSet对象的类型可滚动,或者是不可滚动。取值如下:
       ResultSet.TYPE_FORWARD_ONLY只能向前滚动
       ResultSet.TYPE_SCROLL_INSENSITIVE和Result.TYPE_SCROLL_SENSITIVE这两个方法都能够实现任意的前后滚动,使用各种移动的ResultSet指针的方法。二者的区别在于前者对于修改不敏感,而后者对于修改敏感。
       resultSetConcurency是设置ResultSet对象能够修改的,取值如下:
      ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。
       ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。
所以如果只是想要可以滚动的类型的Result只要把Statement如下赋值就行了。

Statement st = conn.createStatement(Result.TYPE_SCROLL_INSENITIVE,
                          ResultSet.CONCUR_READ_ONLY);
ResultSet rs = st.excuteQuery(sqlStr);

用这个Statement执行的查询语句得到的就是可滚动的ResultSet。

3、 可更新的ResultSet
     这样的ResultSet对象可以完成对数据库中表的修改,但是我知道ResultSet只是相当于数据库中表的视图,所以并不是所有的ResultSet只要设置了可更新就能够完成更新的,能够完成更新的ResultSet的SQL语句必须要具备如下的属性:
    a、只引用了单个表。
    b、不含有join或者group by子句。
    c、那些列中要包含主关键字。
    具有上述条件的,可更新的ResultSet可以完成对数据的修改,可更新的结果集的创建方法是:

Statement st = createstatement(Result.TYPE_SCROLL_INSENSITIVE,Result.CONCUR_UPDATABLE)

这样的Statement的执行结果得到的就是可更新的结果集。

更新的方法是,把ResultSet的游标移动到你要更新的行,然后调用updateXXX(),这个方法XXX的含义和getXXX()是相同的。updateXXX()方法,有两个参数,第一个是要更新的列,可以是列名或者序号。第二个是要更新的数据,这个数据类型要和XXX相同。每完成对一行的update要调用updateRow()完成对数据库的写入,而且是在ResultSet的游标没有离开该修改行之前,否则修改将不会被提交。
    使用updateXXX方法还可以完成插入操作。但是首先要介绍两个方法:
    moveToInsertRow()是把ResultSet移动到插入行,这个插入行是表中特殊的一行,不需要指定具体那一行,只要调用这个方法系统会自动移动到那一行的。
    moveToCurrentRow()这是把ResultSet移动到记忆中的某个行,通常当前行。如果没有使用insert操作,这个方法没有什么效果,如果使用了insert操作,这个方法用于返回到insert操作之前的那一行,离开插入行,当然也可以通过next(),previous()等方法离开插入行。
要完成对数据库的插入,首先调用moveToInsertRow()移动到插入行,然后调用updateXXX的方法完成对,各列数据的更新,完成更新后和更新操作一样,要写到数据库,不过这里使用的是insertRow(),也要保证在该方法执行之前ResultSet没有离开插入列,否则插入不被执行,并且对插入行的更新将丢失。

4、 可保持的ResultSet
     正常情况下如果使用Statement执行完一个查询,又去执行另一个查询时这时候第一个查询的结果集就会被关闭,也就是说,所有的Statement的查询对应的结果集是一个,如果调用Connection的commit()方法也会关闭结果集。可保持性就是指当ResultSet的结果被提交时,是被关闭还是不被关闭。JDBC2.0和1.0提供的都是提交后ResultSet就会被关闭。不过在JDBC3.0中,我们可以设置ResultSet是否关闭。要完成这样的ResultSet的对象的创建,要使用的Statement的创建要具有三个参数,这个Statement的创建方式也就是,我所说的Statement的第三种创建方式。如下:

Statement st=createStatement(int resultsetscrollable,int resultsetupdateable,int resultsetSetHoldability)
ResultSet rs = st.excuteQuery(sqlStr);

前两个参数和两个参数的createStatement方法中的参数是完全相同的,这里只介绍第三个参数:
     resultSetHoldability表示在结果集提交后结果集是否打开,取值有两个:
     ResultSet.HOLD_CURSORS_OVER_COMMIT:表示修改提交时,不关闭数据库。
     ResultSet.CLOSE_CURSORS_AT_COMMIT:表示修改提交时ResultSet关闭。

不过这种功能只是在JDBC3.0的驱动下才能成立。【转】

转载于:https://www.cnblogs.com/havingsealing/archive/2011/12/30/2307578.html

实习日志(2)2011-12-30相关推荐

  1. 【日志】2011.12.24

    2011.12.2 4 1 . de2-115-TV的视频信号输出已经改到了LTM上了. 2 . 已经将算法模块整理修改完毕,随后移植至de2-70和de2-115上. 转载于:https://www ...

  2. 实习日志(1)2011-12-30

    Java方面 结果一番研究,终将Java连接到了oracle数据库.主要分为以下三个步骤: (1)装载驱动器 Class.forName("oracle.jdbc.driver.Oracle ...

  3. 实习日志_实习律师实习日志第十八篇(连载30篇)

    提供实习律师实习日记相关的文章资讯,希望我的分享能让您感到满意! 这个月接触最多的是人身损害赔偿的一些案件,交通事故.工伤的一些案件最多.起初,以为这些案件就是走走法律流程便可了事,最简单不过,可当完 ...

  4. 杰普实习日志 第一天学习内容

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一 ...

  5. 随笔--2011.12.21

    2011年12月21日对于CSDN来说是一个严重受挫点,中国最大的程序员交流平台尽然被黑客入侵,600万的用户资料以明文形势在各大网络疯狂传播!CSDN公开致歉说CSDN网站早期使用过明文密码,使用明 ...

  6. DayDayUp:2019.12.30吴晓波2020年终秀演讲《预见2020:来海边,拾起信心》读后有感

    DayDayUp:2019.12.30吴晓波2020年终秀演讲<预见2020:来海边,拾起信心>读后有感 导读:2019年,过的好不好?有人豪情万丈,有人强颜欢笑. 互联网平台带来了方便快 ...

  7. Cheatsheet: 2011 12.01 ~ 12.12

    Web memcache internals Beyond YSlow - Squeeeezing out website network performance The Fastest Webser ...

  8. 实习日志_【人医札记】护理实习日志

    实习日志:新起点 01 章莹 (河南鹤壁职业技术学院) 盛夏七月,开始了我的实习生活-- 有幸可以来到兰溪市人民医院,经历了几十年风雨历程,一个花甲的峥嵘岁月,几十年璀璨硕果的积累,也让我对实习充满了 ...

  9. 2011 - 12 - 12记录2011 - 12 - 11

    1. argc与argv main函数的形参(int argc,char * argv[]). main 函数有两种写法:1s.默认写法:int main() 2.标准写法:main(int argc ...

最新文章

  1. Scrum Mastery:产品开发中如何优化产品价值?
  2. python批量读取dat文件_python编写Windows环境下批量修改文件名
  3. 【AutoML】如何选择最合适的数据增强操作
  4. 更换mysql_安利给你,关于MySQL字符集乱码与解决方案
  5. 两台centos之间免密传输 scp
  6. 使用Python处理声音文件(一):让歌曲重复两次
  7. 利用计算机诊断ct故障,计算机在CT室工作中的应用及管理
  8. 第六:Pytest中的setup/teardown
  9. 返回封装结果集Result
  10. 【LeetCode】64. Minimum Path Sum
  11. Java判断一个实体类对象实例的所有成员变量是否为空
  12. secureCRT简单上传、下载文件记录
  13. 计算机二级c语言编程题库100题下载,计算机二级c语言编程题库(100题).pdf
  14. 计算机网络的通信主体,计算机网络试题及答案
  15. 插入数据 java_JAVA插入数据笔记
  16. u盘文件变成快捷方式怎么恢复,恢复U盘文件的五种方法
  17. 利用python如何抓取微博评论?
  18. J-Link下载失败解决办法
  19. 强化学习(9):TRPO、PPO以及DPPO算法
  20. 1397 火车票退票费计算(函数专题)

热门文章

  1. fedora mysql默认密码忘记_Linux fedora 24 忘记密码图形化界面修改root密码的方法
  2. python中意外缩进是什么意思_Python 的缩进是不是反人类的设计?
  3. 【工具软件】webstorm如何使用快捷键生成固定代码
  4. python神秘的魔法函数_Python魔法函数
  5. 石头剪刀布python代码_我的第一个python程序,石头剪刀布猜拳游戏
  6. UIView Animation
  7. 熬夜写了一个小游戏,向SpaceX聊表敬意
  8. spring boot 实战 / 可执行war启动参数详解
  9. SQL语句实现取消自增列属性
  10. Angular - - $sce 和 $sceDelegate