jdbc连接数据库ResultSet 详细介绍

上传人:ji****72 文档编号:37520023 上传时间:2018-04-17 格式:DOCX 页数:13 大小:37.24KB
返回 下载 相关 举报
jdbc连接数据库ResultSet 详细介绍_第1页
第1页 / 共13页
jdbc连接数据库ResultSet 详细介绍_第2页
第2页 / 共13页
jdbc连接数据库ResultSet 详细介绍_第3页
第3页 / 共13页
jdbc连接数据库ResultSet 详细介绍_第4页
第4页 / 共13页
jdbc连接数据库ResultSet 详细介绍_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《jdbc连接数据库ResultSet 详细介绍》由会员分享,可在线阅读,更多相关《jdbc连接数据库ResultSet 详细介绍(13页珍藏版)》请在金锄头文库上搜索。

1、这篇文章并没有给出如何使用 ResultSet 的具体例子,只是从 ResultSet 的功能性上进行了详细的讲述。希望这篇文章对大家理解 ResultSet 能够有所帮助。下面就是这篇文章的具体内容。 结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等。结果集读取数据的方法主要是 getXXX(),他的参数可以使整型表示第几列(是从 1 开始的),还可以是列名。返回的是对应的 XXX 类型的值。如果对应那列时空值,XXX 是对象的话返回 XXX 型的空值,如果

2、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 co

3、lumnname),通过这个方法获得当前行中,colindex 所在列的元素组成的对象的数组。使用 getAsciiStream(int colindex/String colname)可以获得该列对应的当前行的 ascii 流。也就是说所有的 getXXX 方法都是对当前行进行操作。结果集从其使用的特点上可以分为四类,这四类的结果集的所具备的特点都是和 Statement 语句的创建有关,因为结果集是通过 Statement 语句执行后产生的,所以可以说,结果集具备何种特点,完全决定于 Statement,当然我是说下面要将的四个特点,在 Statement 创建时包括三种类型。首先是无参数

4、类型的,他对应的就是下面要介绍的基本的 ResultSet 对应的 Statement。下面的代码中用到的 Connection并没有对其初始化,变量 conn 代表的就是 Connection 对应的对象。SqlStr 代表的是响应的 SQL 语句。1、 最基本的 ResultSet。之所以说是最基本的 ResultSet 是因为,这个 ResultSet 他起到的作用就是完成了查询结果的存储功能,而且只能读去一次,不能够来回的滚动读取。这种结果集的创建方式如下:Statement st = conn.CreateStatement()ResultSet rs = Statement.exc

5、uteQuery(sqlStr);由于这种结果集不支持,滚动的读去功能所以,如果获得这样一个结果集,只能使用它里面的 next()方法,逐个的读去数据。2、 可滚动的 ResultSet 类型。这个类型支持前后滚动取得纪录 next()、previous(),回到第一行 first(),同时还支持要去的 ResultSet 中的第几行 absolute(int n),以及移动到相对当前行的第几行 relative(int n),要实现这样的 ResultSet 在创建 Statement 时用如下的方法。Statement st = conn.createStatement(int resul

6、tSetType, int resultSetConcurrency)ResultSet rs = st.executeQuery(sqlStr)其中两个参数的意义是:resultSetType 是设置 ResultSet 对象的类型可滚动,或者是不可滚动。取值如下:ResultSet.TYPE_FORWARD_ONLY 只能向前滚动ResultSet.TYPE_SCROLL_INSENSITIVE 和 Result.TYPE_SCROLL_SENSITIVE 这两个方法都能够实现任意的前后滚动,使用各种移动的 ResultSet 指针的方法。二者的区别在于前者对于修改不敏感,而后者对于修改敏

7、感。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(sqlS

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

9、nt st = createstatement(Result.TYPE_SCROLL_INSENSITIVE,Result.CONCUR_UPDATABLE)这样的 Statement 的执行结果得到的就是可更新的结果集。更新的方法是,把 ResultSet 的游标移动到你要更新的行,然后调用 updateXXX(),这个方法 XXX 的含义和 getXXX()是相同的。updateXXX()方法,有两个参数,第一个是要更新的列,可以是列名或者序号。第二个是要更新的数据,这个数据类型要和 XXX 相同。每完成对一行的 update 要调用 updateRow()完成对数据库的写入,而且是在 R

10、esultSet 的游标没有离开该修改行之前,否则修改将不会被提交。使用 updateXXX 方法还可以完成插入操作。但是首先要介绍两个方法:moveToInsertRow()是把 ResultSet 移动到插入行,这个插入行是表中特殊的一行,不需要指定具体那一行,只要调用这个方法系统会自动移动到那一行的。moveToCurrentRow()这是把 ResultSet 移动到记忆中的某个行,通常当前行。如果没有使用 insert操作,这个方法没有什么效果,如果使用了 insert 操作,这个方法用于返回到 insert 操作之前的那一行,离开插入行,当然也可以通过 next(),previou

11、s()等方法离开插入行。要完成对数据库的插入,首先调用 moveToInsertRow()移动到插入行,然后调用 updateXXX 的方法完成对,各列数据的更新,完成更新后和更新操作一样,要写到数据库,不过这里使用的是 insertRow(),也要保证在该方法执行之前 ResultSet 没有离开插入列,否则插入不被执行,并且对插入行的更新将丢失。4、 可保持的 ResultSet正常情况下如果使用 Statement 执行完一个查询,又去执行另一个查询时这时候第一个查询的结果集就会被关闭,也就是说,所有的 Statement 的查询对应的结果集是一个,如果调用 Connection 的 c

12、ommit()方法也会关闭结果集。可保持性就是指当 ResultSet 的结果被提交时,是被关闭还是不被关闭。JDBC2.0 和1.0 提供的都是提交后 ResultSet 就会被关闭。不过在 JDBC3.0 中,我们可以设置 ResultSet 是否关闭。要完成这样的 ResultSet 的对象的创建,要使用的 Statement 的创建要具有三个参数,这个 Statement 的创建方式也就是,我所说的 Statement 的第三种创建方式。如下:Statement st=createStatement(int resultsetscrollable,int resultsetupdate

13、able,int resultsetSetHoldability)ResultSet rs = st.excuteQuery(sqlStr);前两个参数和两个参数的 createStatement 方法中的参数是完全相同的,这里只介绍第三个参数:resultSetHoldability 表示在结果集提交后结果集是否打开,取值有两个:ResultSet.HOLD_CURSORS_OVER_COMMIT:表示修改提交时,不关闭数据库。ResultSet.CLOSE_CURSORS_AT_COMMIT:表示修改提交时 ResultSet 关闭。不过这种功能只是在 JDBC3.0 的驱动下才能成立。R

14、esultSetResultSet 接口接口ResultSet 接口提供对数据表的访问。ResultSet 对象通常是通过执行“语句” 来生成的。ResultSet 始终有一个游标指向其当前数据行。最初,游标定位在第一行的前 面。next() 方法将游标移至下一行。getXXX 方法会检索当前行的列值。可使用列的索引号或列的名称来检索这些值。 通常,使用列索引将更为有效。列是从 1 开始编号的。java.sql 包公共接口 ResultSetResultSet表 102 列示 ResultSet 接口中 DB2 Everyplace 支持的字段。表表 102.102. ResultSetRes

15、ultSet 接口字段接口字段字段类型字段类型字段字段static intCONCUR_READ_ONLYCONCUR_READ_ONLY 该常量指示不能更新的 ResultSet 对象的并行性方式。 注意注意:DB2 Everyplace 不支持 CONCUR_UPDATABLE。如果在创建“语句”对象时对 ResultSet 对象的并行性方式指定CONCUR_UPDATABLE,则 DB2 Everyplace JDBC 驱动程序将对产生“语句”对象的“连接”对象发出 SQLWarning 并使用 CONCUR_READ_ONLY代替。static intTYPE_FORWARD_ONLY

16、TYPE_FORWARD_ONLY 该常量指示其游标只能向前移动的 ResultSet 对象的类型。static intTYPE_SCROLL_INSENSITIVETYPE_SCROLL_INSENSITIVE 该常量指示可滚动但通常对他人所作的更改不敏感的 ResultSet 对象的类型。注意注意:不要经常使用此类型的ResultSet 对象,原因是它可能会影响性能。此类型使用SQL_INSENSITIVE 作为 CLI 语句属性 SQL_ATTR_CURSOR_SENSITIVITY的值。有关详细信息,参阅 CLI 函数 SQLSetStmtAttr 的文档。static intTYPE_SCROLL_SENSITIVETYPE_SCROLL_SENSITIVE 该常量指示可滚动且通常对他人所作的更改敏感的 ResultSet 对象的类型。注意注意:此类型使用 SQL_UNSPECIFIED 作为 CLI 语句属性 SQL_ATTR_CURSOR_SENSITIVITY 的值。有关详细信息,参阅 CLI 函数 SQLSetStmtAttr 的文档。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号