ResultSet概论

深入理解 ResultSet(结果集) ResultSet代表数据库查询的结果表,它通常是通过执行 SQL 查询语句生成的。ResultSet对象保存一个光标指向其当前的数据行。光标最初位于第一行之前,调用next()方法可以将光标移动到下一行。当next()方法移动到超出ResultSet范围时,返回false,因此在while循环中可以使用它来遍历整个结果集。这张类图展示了ResultSetResultSet继承了接口提供了close()方法,用于在不再需要ResultSet时释放资源,防止资源泄漏。这意味着ResultSet 阅读详情

         这篇文章并没有给出如何使用ResultSet的具体例子,只是从ResultSet的功能性上进行了详细的讲述。希望这篇文章对大家理解ResultSet能够有所帮助。下面就是这篇文章的具体内容。

         结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等。

        结果集读取数据的方法主要是getXXX(),他的参数可以使整型表示第几列(是从1开始的),还可以是列名。返回的是对应的XXX类型的值。如果对应那列时空值,XXX是对象的话返回XXX型的空值,如果XXX是数字类型,如Float等则返回0boolean返回false。使用getString()可以返回所有的列的值,不过返回的都是字符串类型的。XXX可以代表的类型有:基本的数据类型如整型(int),布尔型(Boolean),浮点型(Float,Double)等,比特型(byte),还包括一些特殊的类型,如:日期类型(java.sql.Date),时间类型(java.sql.Time),时间戳类型(java.sql.Timestamp),大数型(BigDecimalBigInteger)等。还可以使用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中的第几行absoluteint 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只要设置了可更新就能够完成更新的,能够完成更新的ResultSetSQL语句必须要具备如下的属性:

    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没有离开插入列,否则插入不被执行,并且对插入行的更新将丢失。

 

 

这样的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的查询对应的结果集是一个,如果调用Connectioncommit()方法也会关闭结果集。可保持性就是指当ResultSet的结果被提交时,是被关闭还是不被关闭。JDBC2.01.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的驱动下才能成立。

 

 

上面就是关于ResultSet的介绍,如果有什么不正确的地方,欢迎大家指出。

 

 

 

Android开发Intent详解 本文详解Android开发Intent。 阅读详情

相关推荐

VFIO框架源码分析(一)- 从初始化到设备访问

本文深入剖析了Linux内核中的VFIO(Virtual Function I/O)框架,详细解读了其从初始化到设备访问的全过程。VFIO通过Container->Group->Device的层次化设计,利用IOMMU提供安全隔离,允许用户空间直接访问物理设备。文章基于Linux v5.15版本,重点分析了vfio_init模块入口、Container创建与配置、Group关联以及最终设备访问等关键环节,揭示了VFIO如何通过逐层授权机制构建安全可靠的设备直通模型,为虚拟化技术提供核心支持。

qq_36071928的博客 346

Java 数据库编程 ResultSet 的 使用方法

  结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等。  结果集读取数据的方法主要是getXXX() ,他的参数可以使整型表示第几列(是从1开始的),还可以是列名。返回的是对应的XXX类型的值。 如果对应那列时空值,XXX是对象的话返回XXX型的空值,如果XXX...

YiGE_snail的专栏 816

二维码识别-使用opencv在Android上开发的微信二维码识别项目-优质项目实战-附完整流程教程.zip

二维码识别_使用opencv在Android上开发的微信二维码识别项目_优质项目实战_附完整流程教程

java中的resultset类详解

一:JDBC  sun:提供了一套通用性的接口:可以连接任何的数据库:   连接数据库的具体得到实例,具体的数据库厂商实现的。    连接数据的步骤(别忘了复制jar包):(   1)注册驱动: Class.forName():DriverManager   (2)获得链接对象:Connection   (3)创建sql容器:语句:   (4)执行sql语句:: stmt  (5)查询操作:遍...

东方 4万+

【Java 进阶篇】JDBC ResultSet 类详解

ResultSet是Java中的一个接口,它代表了一个数据库查询的结果集。结果集通常是一个表格,包含了一组行和列,这些行和列包含了查询所返回的数据。您可以通过ResultSet对象的方法来遍历和操作查询结果。

繁依Fanyi的博客 2870

Java中,ResultSet 的用法

•在Java中,获得ResultSet的总行数的方法有以下几种。  第一种:利用ResultSet的getRow方法来获得ResultSet的总行数  Java代码   Statement stmt = con.createStatement(R

Perry in IT World 3万+

DirectDraw学习总结

DirectDraw学习总结       最近一段时间,一直在学习DirectDraw. 在这里把自己学习的一些浅浅的体会写出来.因为自己工作中只使用很少的DirectDraw,所以也没有深入研究.基本上是浅尝辄止把.     要学习DirectDraw. 首先要熟悉COM. DirectX利用COM 实现了程序的无缝升级.这是DX一个很大的优点,用户无需对特定版本的DX编写程序.开发出来

Hellfire的专栏 1820

DirectDraw动画编程

DirectDraw——也许大多数人闻所未闻,但当提到 DirectX 恐怕每一个 游戏爱好者都再熟悉不过了,但是只知道那是一个很多游戏都要求的必须安装的程序,再多就无从所知了,那么它到底能为我们的游戏干什么呢,其实它又叫 Game SDK,它最大的特点是直接对硬件的抽象层(HAL)进行操作,利用 此特点可制作出高性能的Windows游戏。   DirectDraw就是DirectX5的...

diexiequ0204的博客 194

如何快速修复经典游戏:Windows 10/11下的DirectDraw兼容性终极指南

你是否曾经在Windows 10或11上尝试运行那些充满回忆的经典游戏,却发现画面闪烁、颜色异常甚至根本无法启动?🤔 这正是因为微软在现代化Windows系统中逐渐放弃了对DirectDraw和早期Direct3D图形API的完整支持。今天我要向你介绍一个神奇的工具——DDrawCompat,它能帮你解决这些困扰,让你心爱的老游戏在现代系统上焕发新生! ## 经典游戏在现代Windows中的常

gitblog_00920的博客 657

DirectDraw基础

DirectDraw基础篇(学东西还是基础的好哦!) 第一节 DirectDraw简介 Grubers的一个观点是DirectDraw“只是一个bltting发动机”。这是相当准确的,但却太简化了。更准确地讲,DirectDraw是一个可以提供软件仿真测试的独立于硬件设备的bltting发动机。DirectDraw的主要用途是尽可能快、尽可能可靠并且尽可能连续地将图形考贝到视频显示设备上。

chenjie0011的专栏 1696

DirectDraw基础篇

DirectDraw基础篇(学东西还是基础的好哦!) 第一节 DirectDraw简介 Grubers的一个观点是DirectDraw“只是一个bltting发动机”。这是相当准确的,但却太简化了。更准确地讲,DirectDraw是一个可以提供软件仿真测试的独立于硬件设备的bltting发动机。DirectDraw的主要用途是尽可能快、尽可能可靠...

weixin_33722405的博客 2993

【Java 进阶篇】JDBC ResultSet 遍历结果集详解

ResultSet是Java JDBC中的一个接口,用于表示查询数据库的结果集。它是一个数据表,包含了满足SQL查询条件的数据行。ResultSet对象具有游标,初始时位于第一行之前,通过移动游标,可以逐行遍历查询结果。通过本文,您了解了如何遍历JDBC中的ResultSet,以及在遍历过程中需要注意的事项。ResultSet是在Java数据库编程中常用的类之一,掌握它的用法对于处理数据库查询结果非常重要。在实际应用中,根据需求和性能考虑,可以选择不同的遍历方法和优化策略。希望本文能够帮助您更好地使用。

繁依Fanyi的博客 1万+

Java中ResultSet接口的详细介绍

ResultSet接口是Java JDBC API中的一个核心接口,用于表示从数据库查询返回的结果集。它允许用户遍历查询结果,并从中提取数据。ResultSet接口代表从数据库查询返回的结果集,它提供了以下功能:遍历结果集:允许用户向前或向后移动指针,以便访问结果集中的每一行。

楠寻寻的博客 1430

怎么从resultset 结果集中取出想要的字段值

前言 在使用jsp与sqlserver数据库连接时,怎么从查找返回的resultset结果集中取出想要自己想要的对应于数据库中的字段值 提示:以下是本篇文章正文内容,下面案例可供参考 一、JDBCResultSet是什么? 在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表。 ResultSet对象维护了一个游标,指向当前的数据行。开始的时候这个游标指向的是第一行。如果调用了ResultSet的next()方法游标会下移一行,如果没有更多的数据了,next()方法会返回false

zhouwenyan2548的博客 5672

Java JDBCResultSet的详细说明

Java JDBCResultSet的详细说明

qq_35368296的博客 1362

Java 中的resultset详解

结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等。   结果集读取数据的方法主要是getXXX() ,他的参数可以使整型表示第几列(是从1开始的),还可以是列名。返回的是对应的XXX类型的值。如果对应那列时空值,XXX是对象的话返回XXX型的空值,如果XXX是数字类型,如Float等则返回0,boolean返回false。   使用getString()可以返回所有的列的.

qq_27149185的博客 1096

Java ResultSet教程

Java ResultSet interface is a part of the java.sql package. It is one of the core components of the JDBC Framework. ResultSet Object is used to access query results retrieved from the relational datab...

从零开始的教程世界 3273

JAVA ResultSet概论

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

wwj256的专栏 152

java ResultSet对象的使用方法

版权声明:本文为博主原创文章,未经博主允许不得转载。    https://blog.csdn.net/miniduhua/article/details/52885179 ResultSet set=....; while(set.next()){//next方法返回的是布尔所以如果没有数据就不进行循环了 set.getInt('列的位置123...或者列的名字");//该列是什么数据类型就执...

ryuqiu的专栏 9542

Java ResultSet案例讲解

Account{id=11, name='林帅', balance=20000.0, myAge=18}Account{id=1, name='张三', balance=500.0, myAge=17}Account{id=7, name='张三', balance=600.0, myAge=19}Account{id=1, name='张三', balance=500.0, myAge=17}Account{id=7, name='张三', balance=600.0, myAge=19}

男神的专栏 627

Java中ResultSet类如何处理数据

一个ResultSet对象对应着一个由查询语句返回的一个表。对ResultSet对象的处理必须逐行进行,而对每一行中的各个列,可以按任何顺序进行处理。 ResultSet对象维持一个指向当前行的指针。最初,这个指针指向第一行之前。Result类的next()方法使这个指针向下移动一行。因此,第一次使用next()方法将指针指向结果集的第一行,这时可以对第一行的数据进行处理。处理完毕后,使用next()方法,将指针移向下一行,继续处理第二行数据。 next()返回值是一个boolean值,该值若为true

qq_48810010的博客 1374
上一篇: JTree实现的系统文件目录树
下一篇: 使用SAX把XML转换成JTree
jackkui
博客等级 码龄24年 2粉丝 8原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值