ResultSet用发!

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

 这篇文章并没有给出如何使用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没有离开插入列,否则插入不被执行,并且对插入行的更新将丢失。

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的介绍,如果有什么不正确的地方,欢迎大家指出。

ResultSet详解 这一章详细的介绍了ResultSet,可以帮助我们更好的了解它。并且在使用中给到我们一些更优解。 阅读详情

相关推荐

Jdbc系列四:ResultSet接口

一、ResultSet  通过调用 Statement 对象的 excuteQuery() 方法创建该对象。  ResultSet 对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet 接口由数据库厂商实现。  ResultSet 对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过 ResultSet 对象的 next() 方法移动到下一行。  Result...

苍穹尘的博客 2922

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

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

YiGE_snail的专栏 816

【论文分享】【Agent】ProAgent: Building Proactive Cooperative Agents with Large Language Models

多智能体系统是由多个智能体组成的集合,这些智能体可以是软件程序、机器人、传感器或其他实体,它们各自具备一定的智能和自主性,并通过交互协作来实现单个智能体难以完成的复杂目标。

nanxun___的博客 1089

ResultSet概论

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

走出条路来给自己看 1925

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

ResultSet用法集锦

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

leefang_cvic的博客 8万+

结果集 (ResultSet)全面解析

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

qq_52324490的博客 1万+

ResultSet结果集

一、概述 在最近开的文件上转上转功能,使用到JDBC进行操作数据库。在查询数据重使用到ResultSet结果集类与ResultSetMetaData 类。Resultset主要用于接收JDBC查询语句返回的数据集对象,而ResultSetMetaData 可用于获取关于 ResultSet 对象中列的类型和属性信息的对象。 二、使用 ResultSet 的使用 ResultSet 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。 String getcommodityd...

随缘的博客 9478

ResultSet

ResultSet 的功能 java.sql.ResultSet接口表示一个数据库查询的结果集。一个ResultSet对象具有一个游标指向当前行的结果集。 最初,光标被置于第一行之前。调用 next() 方法将光标移动到下一行;因为该方法在 ResultSet 对象没有下一行时返回 false, 所以可以在 while 循环中使用它来迭代结果集,调用getXXX(int fieldIndex)/...

博客&brz 8711

resultset java 类型_关于JAVA中Resultset的类型

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

weixin_31460419的博客 822

resultset java 类型_java 中的resultset的类型

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

weixin_30220465的博客 375

ResultSet is closed!

     这是本人在CSDN BLOG表的第一篇文章,哈哈,我也加入这个大家庭来啦,还请大家多多关照~~~~昨晚用JAVA开桌面软件的时候,出现了一个错误:ResultSet is closed! 昨晚搞了足足一个晚上,用了N种方法还是不行,最后实验了N遍,ResultSet有个很特殊的地方,那就是当从Statement得到一个ResultSet_1后,必须要先操作ResultSet_

SunshineWu's Little Zone 1697

java 循环resultset_JDBC中的ResultSet无法多次循环的问题。

前几天碰见了一个很奇葩的问题,使我百思不得其解,今天就写一下我遇见的问题吧,也供大家参考,别和我犯同样的毛病。首先说下jdbc,jdbc是java是一种用于执行SQL语句的Java API,从jdbc中取值我们一般都是Statement stmt 的next()方法,或者是PreStatement 的next()方法,next()方法用来判断下一条记录是否存在,如果存在就执行一次,游标就向后移动...

weixin_39631767的博客 1777

java resultset 不关闭_java – ResultSet什么时候关闭?

我想知道如果我没有关闭它,是否可以关闭ResultSet?我有一个ResultSet是关闭异常但我确信我没有关闭任何地方的ResultSet.我所做的确切是我使用ResultSet执行SELECT查询然后我使用相同的ResultSet,因为它被此方法调用:public Object getValueAt( int row, int column )throws IllegalStateExcept...

weixin_28689193的博客 541

JDBC ResultSet

ResultSet的类型如下 1. 在滚动方面     1.1 只能向前滚动         创建方式             用API                      connection.createStatement()                      connection.createStatement(ResultSet.TYPE_FORWARD_ONLY

Jinuxwu的专栏 1995

java中resultset的previous_java中resultset

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

weixin_32821257的博客 586

(3万字深度解析)Kaggle《房价预测:高级回归技巧》详解复现攻略

在这篇教程式文章中,我们从零开始完成了 Kaggle《房价预测:高级回归技巧》比赛的复现工作,涵盖了数据预处理、特征工程、模型训练、调优、解释和融合的完整流程。深入理解数据:阅读数据描述,结合常识对每个特征作出合理处理(如缺失值填充’None’表示无此设施 、异常值剔除 等)。对目标和偏态特征进行对数变换,使分布更平滑,从而更好满足模型假设并提升准确度。特征工程:我们创造了总面积、总浴室等新特征,整合信息提高模型可学习性。

qq_38334677的博客 1711

车辆悬架设计及理论 [周长城 著] 2011年版

悬架是保证车轮或车桥与车辆承载系统(车架或承载式车身)之间具有弹性联系并能传递载荷、缓和冲击、衰减振动以及调节车辆行驶中的车身位置等有关装置的总称。 从结构功能而言,它都是由弹性元件、导向装置及减振器三个基本部分组成。此外,还可包括一些特殊功能的部件,如缓冲块和稳定杆等。

上一篇: 在JavaScript中使用Java
下一篇: JAVA代码编写的30条建议 ***推荐***
zhouysh
博客等级 码龄24年 8粉丝 31原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值