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(intcolindex/String columnname),通过这个方法获得当前行中,colindex所在列的元素组成的对象的数组。使用 getAsciiStream(intcolindex/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

这两个方法都能够实现任意的前后滚动,使用各种移动的ResultSet指针的方法。二者的区别在于前者对于修改不敏感,而后者对于修改敏感。

Result.TYPE_SCROLL_SENSITIVE

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

ResultSet用法集锦的更多相关文章

  1. ResultSet用法集锦 (转)

    转:http://soft-development.iteye.com/blog/1420323 结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是 ...

  2. ASP.NET MVC HtmlHelper用法集锦

    ASP.NET MVC HtmlHelper用法集锦 在写一个编辑数据的页面时,我们通常会写如下代码 1:<inputtype="text"value='<%=View ...

  3. C#随机函数random()典型用法集锦

    C#随机函数random()典型用法集锦 Random.Next() 返回非负随机数: Random.Next(Int) 返回一个小于所指定最大值的非负随机数 Random.Next(Int,Int) ...

  4. delphi webbrowser用法集锦

    delphi webbrowser用法集锦 (2012-05-13 08:29:00) 标签: it 分类: 软件_Software WebBrowser1.GoHome; //到浏览器默认主页 We ...

  5. jQuery load()方法用法集锦!

    调用load方法的完整格式是:DE>load( url, [data], [callback] ),其中DE> DE>urlDE>:是指要导入文件的地址. DE>data ...

  6. #define用法集锦

    Definition: The #define Directive You can use the #define directive to give a meaningful name to a c ...

  7. Perl关联数组用法集锦

    本文和大家重点讨论一下Perl关联数组的概念,创建Perl关联数组,从数组变量复制到Perl关联数组,元素的增删,用Perl关联数组循环等内容,相信通过本文的学习你对Perl关联数组的用法一定会有深刻 ...

  8. find命令用法集锦

    find命令用法: 01--过滤日志find -name "catelina.*.out"|xargs -f |grep '关键字' 02 -忽略一个目录或者多个目录find ./ ...

  9. 结果集(ResultSet)用法

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

随机推荐

  1. java 将一张图片拷贝到另外一个地方。(IO流)

    package com.beiwo.inputstream; import java.io.FileInputStream; import java.io.FileOutputStream; impo ...

  2. ZK textbox Constraint验证

    test.zul: <?page title="" contentType="text/html;charset=UTF-8"?> <zk x ...

  3. chart.js 里添加图表的清单:

    chart.js 里添加图表的清单: var legend = myDoughnut.generateLegend(); $("#chart_legend").html(legen ...

  4. centos 安装 opencv-3.1.0

    官方安装教程 http://docs.opencv.org/3.1.0/d9/d52/tutorial_java_dev_intro.html#gsc.tab=0 注意要先安装jdk和apache a ...

  5. 【RabbitMQ】Publish/Subscribe

    Publish/Subscribe 在上一节我们创建了一个work queue.背后的设想为每个任务被分发给明确的消费者.这节内容我们将做一些完全不同的事情 -- 我们将发送一条消息给多个消费者.这种 ...

  6. HJ-第二周,真机调试

      报错: Showing Recent Issues   Huiju_app requires a provisioning profile. Select a provisioning profi ...

  7. log4j使用快速入门【转】

    1.引言 在应用程序中添加日志记录总的来说基于三个目的: .监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作 .跟踪代码运行时轨迹,作为日后审计的依据 .担当集成开发环境中的调 ...

  8. asp.net mvc 表单相关

    1. <form action="/controller/action" method="post"> ... </form> *act ...

  9. rabbitmq之back queue草稿

    申请队列rabbit_reader在收到消息后处理数据帧时,如果channel id不是0(0代表连接),则认为是channel相关方法. handle_frame(Type, Channel, Pa ...

  10. How to inspect who is caller of func and who is the class of instance

    1. Who is the class of self instance ? class aa(object): def a(self): if self.__class__.__name__ == ...