`

JDBC ResultSet 方法大全

    博客分类:
  • jdbc
 
阅读更多

ResultSet方法大全:

 

boolean absolute(int row) JDBC 2.0。将游标移至结果集中的给定行号。
void afterLast() JDBC 2.0。将游标移至结果集的末尾,正好在最后一行的后面。
void beforeFirst() JDBC 2.0。将游标移至结果集的前方,正好在第一行的前面。
void clearWarnings() 清除此 ResultSet 对象上报告的所有警告。
void close() 立即释放此 ResultSet 对象的数据库和 JDBC 资源,而不是等待对象自动关闭时才释放它们。
int findColumn(String columnName) 将给定 ResultSet 列名映射至其 ResultSet 列索引。
boolean first() JDBC 2.0。将游标移至结果集中的第一行。
BigDecimal getBigDecimal(int columnIndex) JDBC 2.0。以具有全部精度的 java.math.BigDecimal 对象形式获取当前行中某个列的值。Palm OS 的 DB2 Everyplace JDBC 驱动程序不支持此方法。
BigDecimal getBigDecimal(int columnIndex, int scale)以 Java 编程语言中的 java.math.BigDecimal 对象形式获取此 ResultSet 对象当前行中指定列的值。Palm OS 的 DB2 Everyplace JDBC 驱动程序不支持此方法。不受支持。
BigDecimal getBigDecimal(String columnName) JDBC 2.0。以具有全部精度的 java.math.BigDecimal 对象形式获取当前行中某个列的值。Palm OS 的 DB2 Everyplace JDBC 驱动程序不支持此方法。
BigDecimal getBigDecimal(String columnName, int scale) 以 Java 编程语言中的 java.math.BigDecimal 对象形式获取此 ResultSet 对象当前行中指定列的值。Palm OS 的 DB2 Everyplace JDBC 驱动程序不支持此方法。不受支持。
Blob getBlob(int columnIndex) JDBC 2.0。获取此 ResultSet 对象的当前行中的 BLOB 值。
Blob getBlob(String columnName) JDBC 2.0。获取此 ResultSet 对象的当前行中的 BLOB 值。
boolean getBoolean(int columnIndex) 以 Java 布尔值形式获取当前行中某列的值。
boolean getBoolean(String columnName) 以 Java 布尔值形式获取当前行中某列的值。
byte getByte(int columnIndex) 以 Java 编程语言中的字节形式获取此 ResultSet 对象当前行中指定列的值。
byte getByte(String columnName) 以 Java 编程语言中的字节形式获取此 ResultSet 对象当前行中指定列的值。
byte[] getBytes(int columnIndex) 以 Java 编程语言中的字节数组形式获取此 ResultSet 对象当前行中指定列的值。
byte[] getBytes(String columnName) 以 Java 编程语言中的字节数组形式获取此 ResultSet 对象当前行中指定列的值。
int getConcurrency() JDBC 2.0。返回结果集的并行性方式。
Date getDate(int columnIndex) 以 Java 编程语言中的 java.sql.Date 对象形式获取此 ResultSet 对象当前行中指定列的值。
Date getDate(int columnIndex, Calendar cal) 以 Java 编程语言中的 java.sql.Date 对象形式返回此 ResultSet 对象的当前行中指定列的值。
Date getDate(String columnName)以 Java 编程语言中的 java.sql.Date 对象形式获取此 ResultSet 对象的当前行中指定列的值。
double getDouble(int columnIndex) 以 Java 双精度形式获取当前行中某列的值。
double getDouble(String columnName) 以 Java 双精度形式获取当前行中某列的值。
float getFloat(int columnIndex) 以 Java 浮点形式获取当前行中某列的值。
float getFloat(String columnName) 以 Java 浮点形式获取当前行中某列的值。
int getInt(int columnIndex)以 Java 编程语言中的整数形式获取此 ResultSet 对象当前行中指定列的值。
int getInt(String columnName) 以 Java 编程语言中的整数形式获取此 ResultSet 对象的当前行中指定列的值。
long getLong(int columnIndex) 以 Java 长整型形式获取当前行中某列的值。
long getLong(String columnName) 以 Java 长整型形式获取当前行中某列的值。
ResultSetMetaData getMetaData() 检索此 ResultSet 对象的列的数目、类型和属性。
Object getObject(int columnIndex) 以 Java 对象形式获取当前行中某列的值。
Object getObject(String columnName) 以 Java 对象形式获取当前行中某列的值。
int getRow() JDBC 2.0。检索当前行号。
short getShort(int columnIndex) 以 Java 编程语言中的 short 形式获取此 ResultSet 对象当前行中指定列的值。
short getShort(String columnName)以 Java 编程语言中的 short 形式获取此 ResultSet 对象当前行中指定列的值。
Statement getStatement() JDBC 2.0。返回产生此 ResultSet 对象的"语句"。
String getString(int columnIndex) 以 Java 编程语言中的 String 形式获取此 ResultSet 对象当前行中指定列的值。
String getString(String columnName)以 Java 编程语言中的 String 形式获取此 ResultSet 对象当前行中指定列的值。
Time getTime(int columnIndex) 以 Java 编程语言中的 java.sql.Time 对象形式获取此 ResultSet 对象的当前行中指定列的值。
Time getTime(String columnName) 以 Java 编程语言中的 java.sql.Date 对象形式获取此 ResultSet 对象的当前行中指定列的值。
Timestamp getTimestamp(String columnName) 以 Java 编程语言中的 java.sql.Timestamp 对象形式获取此 ResultSet 对象的当前行中指定列的值。
Timestamp getTimestamp(int columnIndex) 以 Java 编程语言中的 java.sql.Timestamp 对象形式获取此 ResultSet 对象的当前行中指定列的值。
int getType() JDBC 2.0。返回此结果集的类型。
SQLWarning getWarnings() 返回此 ResultSet 上的调用报告的首次警告。
boolean isAfterLast() JDBC 2.0。指示游标是否在结果集中的最后一行后面。
boolean isBeforeFirst() JDBC 2.0。指示游标是否在结果集中的第一行前面。
boolean isFirst() JDBC 2.0。指示游标是否在结果集中的第一行上。
boolean isLast() JDBC 2.0。指示游标是否在结果集中的最后一行上。对于具有类型 TYPE_FORWARD_ONLY 的结果集,不支持此方法。
boolean last() JDBC 2.0。将游标移至结果集中的最后一行。
boolean next() 将游标从当前位置向下移动一行。
boolean previous() JDBC 2.0。将游标移至结果集中的前一行。
boolean relative(int rows) JDBC 2.0。将游标移动相对行数,正数或负数。
boolean wasNull() 报告读取的最后一列是否具有值 SQL NULL。

 

 

ResultSet简介:

      ResultSet 包含符合 SQL 语句中条件的所有行,并且它通过一套 get 方法(这些 get 方法可以访问当前行中的不同列)提供了对这些行中数据的访问。ResultSet.next 方法用于移动到 ResultSet 中的下一行,使下一行成为当前行。

      结果集一般是一个表,其中有查询所返回的列标题及相应的值。例如,如果查询为 SELECT a, b, c FROM Table1,则结果集将具有如下形式:

 

a b c
-------- --------- --------
12345 Cupertino CA
83472 Redmond WA
83492 Boston MA

 


  下面的代码段是执行 SQL 语句的示例。该 SQL 语句将返回行集合,其中列 1 为 int,列 2 为 String,而列 3 则为字节数组:

 

java.sql.Statement stmt = conn.createStatement();
ResultSet r = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (r.next())
{
 // 打印当前行的值。
 int i = r.getInt("a");
 String s = r.getString("b");
 float f = r.getFloat("c");
 System.out.println("ROW = " + i + " " + s + " " + f);
}


  1、行和光标

  ResultSet 维护指向其当前数据行的光标。每调用一次 next 方法,光标向下移动一行。最初它位于第一行之前,因此第一次调用 next 将把光标置于第一行上,使它成为当前行。随着每次调用 next 导致光标向下移动一行,按照从上至下的次序获取ResultSet 行。

  在 ResultSet 对象或其父辈 Statement 对象关闭之前,光标一直保持有效。

  在 SQL 中,结果表的光标是有名字的。如果数据库允许定位更新或定位删除,则需要将光标的名字作为参数提供给更新或删除命令。可通过调用方法getCursorName 获得光标名。

  注意:不是所有的 DBMS 都支持定位更新和删除。可使用 DatabaseMetaData.supportsPositionedDelete 和 supportsPositionedUpdate 方法来检查特定连接是否支持这些操作。当支持这些操作时,DBMS/驱动程序必须确保适当锁定选定行,以使定位更新不会导致更新异常或其它并发问题。

 

      2、列

  方法 getXXX 提供了获取当前行中某列值的途径。在每一行内,可按任何次序获取列值。但为了保证可移植性,应该从左至右获取列值,并且一次性地读取列值。列名或列号可用于标识要从中获取数据的列。例如,如果 ResultSet 对象 rs 的第二列名为“title”,并将值存储为字符串,则下列任一代码将获取存储在该列中的值:

String s = rs.getString("title");
String s = rs.getString(2);


  注意列是从左至右编号的,并且从列 1 开始。同时,用作 getXXX 方法的输入的列名不区分大小写。

  提供使用列名这个选项的目的是为了让在查询中指定列名的用户可使用相同的名字作为 getXXX 方法的参数。另一方面,如果 select 语句未指定列名(例如在“select * from table1”中或列是导出的时),则应该使用列号。这些情况下,
户将无法确切知道列名。

  有些情况下,SQL 查询返回的结果集中可能有多个列具有相同的名字。如果列名用作 getXXX 方法的参数,则 getXXX 将返回第一个匹配列名的值。因而,如果多个列具有相同的名字,则需要使用列索引来确保检索了正确的列值。这时,使用列号效率要稍微高一些。

  关于 ResultSet 中列的信息,可通过调用方法 ResultSet.getMetaData 得到。返回的 ResultSetMetaData 对象将给出其 ResultSet 对象各列的编号、类型和属性。

  如果列名已知,但不知其索引,则可用方法 findColumn 得到其列号。

  3、数据类型和转换

  对于 getXXX 方法,JDBC 驱动程序试图将基本数据转换成指定 Java 类型,然后返回适合的 Java 值。例如,如果 getXXX 方法为 getString,而基本数据库中数据类型为 VARCHAR,则 JDBC 驱动程序将把 VARCHAR 转换成 Java String。getString 的返回值将为 Java String 对象。

  下表显示了允许用 getXXX 获取的 JDBC 类型及推荐用它获取的 JDBC 类型(通用SQL 类型)。小写的 x 表示允许 getXXX 方法获取该数据类型;大写的 X 表示对该数据类型推荐使用 getXXX 方法。例如,除了 getBytes 和 getBinaryStream 之外的任何 getXXX 方法都可用来获取 LONGVARCHAR 值,但是推荐根据返回的数据类型使用 getAsciiStream 或 getUnicodeStream 方法。方法 getObject 将任何数据类型返回为 Java Object。当基本数据类型是特定于数据库的抽象类型或当通用应用程序需要接受任何数据类型时,它是非常有用的。

  可使用 ResultSet.getXXX 方法获取常见的 JDBC 数据类型。

  “x”表示该 getXXX 方法可合法地用于获取给定 JDBC 类型。

  “X”表示推荐使用该 getXXX 方法来获取给定 JDBC 类型。

  getByte X x x x x x x x x x x x x            
  getShort x X x x x x x x x x x x x            
  getInt x x X x x x x x x x x x x            
  getLong x x x X x x x x x x x x x            
  getFloat x x x x X x x x x x x x x            
  getDouble x x x x x X X x x x x x x            
  getBigDecimal x x x x x x x X X x x x x            
  getBoolean x x x x x x x x x X x x x            
  getString x x x x x x x x x x X X x x x x x x x
  getBytes                           X X x      
  getDate                     x x x       X   x
  getTime                     x x x         X x

  getTimestamp                     x x x       x   X
  getAsciiStream                     x x X x x x      
  getUnicodeStream                     x x X x x x      
  getBinaryStream                           x x X      
  getObject x x x x x x x x x x x x x x x x x x x

      4、对非常大的行值使用流

  ResultSet 可以获取任意大的 LONGVARBINARY 或 LONGVARCHAR 数据。方法getBytes 和 getString 将数据返回为大的块(最大为 Statement.getMaxFieldSize 的返回值)。但是,以较小的固定块获取非常大的数据可能会更方便,而这可通过让 ResultSet 类返回 java.io.Input 流来完成。从该流中可分块读取数据。注意:必须立即访问这些流,因为在下一次对 ResultSet 调用getXXX 时它们将自动关闭(这是由于基本实现对大块数据访问有限制)。

  JDBC API 具有三个获取流的方法,分别具有不同的返回值:

  getBinaryStream 返回只提供数据库原字节而不进行任何转换的流。

  getAsciiStream 返回提供单字节 ASCII 字符的流。

  getUnicodeStream 返回提供双字节 Unicode 字符的流。

  注意:它不同于 Java 流,后者返回无类型字节并可(例如)通用于 ASCII 和Unicode 字符。

  下列代码演示了 getAsciiStream 的用法:

java.sql.Statement stmt = con.createStatement();
ResultSet r = stmt.executeQuery("SELECT x FROM Table2");
// 现在以 4K 块大小获取列 1 结果:
byte buff = new byte[4096];
while (r
// 将新填充的缓冲区发送到 ASCII 输出流:
output.write(buff, 0, size);
}
}


  5、NULL 结果值

  要确定给定结果值是否是 JDBC NULL,必须先读取该列,然后使用 ResultSet.wasNull 方法检查该次读取是否返回 JDBC NULL。

  当使用 ResultSet.getXXX 方法读取 JDBC NULL 时,方法 wasNull 将返回下列值之一:

  Java null 值:对于返回 Java 对象的 getXXX 方法(例如 getString、getBigDecimal、getBytes、getDate、getTime、getTimestamp、getAsciiStream、getUnicodeStream、getBinaryStream、getObject 等)。

  零值:对于 getByte、getShort、getInt、getLong、getFloat 和 getDouble。

  false 值:对于 getBoolean。

  6、可选结果集或多结果集

  通常使用 executeQuery(它返回单个 ResultSet)或 executeUpdate(它可用于任何数据库修改语句,并返回更新行数)可执行 SQL 语句。但有些情况下,应用程序在执行语句之前不知道该语句是否返回结果集。此外,有些已存储过程可能返回几个不同的结果集和/或更新计数。

  为了适应这些情况,JDBC 提供了一种机制,允许应用程序执行语句,然后处理由结果集和更新计数组成的任意集合。这种机制的原理是首先调用一个完全通用的execute 方法,然后调用另外三个方法,getResultSet、getUpdateCount 和getMoreResults。这些方法允许应用程序一次一个地研究语句结果,并确定给定结果是 ResultSet 还是更新计数。

  用户不必关闭 ResultSet;当产生它的 Statement 关闭、重新执行或用于从多结果序列中获取下一个结果时,该 ResultSet 将被 Statement 自动关闭。 

 

 

调用ResultSet中的last()方法时,提示:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.last
解决方法:
Statement st=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
不带参数使用默认值:      
   createStatement()   
   =createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY)
1。TYPE_FORWARD_ONLY:缺省类型。只允许向前访问一次,并且不会受到其他用户对该数据库所作更改的影响。
2。TYPE_SCROLL_INSENSITIVE:允许在列表中向前或向后移动,甚至可以进行特定定位,例如移至列表中的第四个记录或者从当前位置向后移动两个记录。不会受到其他用户对该数据库所作更改的影响。
3。TYPE_SCROLL_SENSITIVE:象 TYPE_SCROLL_INSENSITIVE 一样,允许在记录中定位。这种类型受到其他用户所作更改的影响。如果用户在执行完查询之后删除一个记录,那个记录将从 ResultSet 中消失。类似的,对数据值的更改也将反映在 ResultSet 中。
第二个参数设置 ResultSet 的并发性,该参数确定是否可以更新 ResultSet。其选项有:
4。CONCUR_READ_ONLY:这是缺省值,指定不可以更新 ResultSet
5。CONCUR_UPDATABLE:指定可以更新 ResultSet

分享到:
评论

相关推荐

    如何从 Java 存储过程将 JDBC ResultSet 作为 Ref Cursor 返回.doc

    JDBC提供了一种标准的方式来访问各种数据库,包括SQL查询的执行、结果集(ResultSet)的处理等。ResultSet是JDBC中用于存储查询结果的一个接口,它表示从数据库中检索的数据集。而REF CURSOR则是PL/SQL(Oracle...

    ResultSet转化为json,json转化为List

    使用Java的JDBC API,遍历ResultSet并创建User对象的列表: ```java List<User> userList = new ArrayList(); while (resultSet.next()) { User user = new User(); user.setName(resultSet.getString("name")...

    JDBC编程resultset游标控制

    JDBC通信原理 JDBC驱动类型 JDBC构成 JDBC程序5步走 滚动的结果集 可更新的结果集 SQL数据类型对应的Java类型 事务及批量处理 行集、连接池、LDAP

    Java-JDBC【之】数据类型、封装JDBCUtil、封装通用增删改、ResultSet与ResultSetMetaData

    Java-JDBC【之】数据类型、封装JDBCUtil、封装通用增删改、ResultSet与ResultSetMetaData、查询结果集映射Map与ListMap 1.数据类型 2.封装通用增删改 2.1.封装JDBCUtil 2.2.封装Dao通用增删改 2.3.测试 3.ResultSet...

    优化JDBC方法功略

    标题“优化JDBC方法攻略”和描述中提到的是关于JDBC(Java Database Connectivity)数据库操作的性能优化,适合初学者和教学使用。本文将详细介绍三个主要的JDBC性能优化技巧,并提供了一些通用的准则,以帮助开发者...

    JDBC基础教程之ResultSet对象.doc )

    ### JDBC基础教程之ResultSet对象详解 #### 一、ResultSet对象概览 `ResultSet`对象是Java Database Connectivity (JDBC) API中的一个核心组件,用于处理SQL查询结果。它充当了一个临时的数据存储,其中包含了所有...

    javaResultSet常用方法.pdf

    Java ResultSet是Java数据库连接(JDBC)中最重要的组件之一,用于存储和处理数据库查询结果。在Java中,ResultSet对象是通过Statement对象的executeQuery()方法或prepareStatement()方法执行SQL语句后生成的。...

    JDBC公共操作方法代码

    这篇名为“JDBC公共操作方法代码”的博客文章可能详细介绍了如何使用JDBC进行常见的数据库操作。下面我们将深入探讨JDBC的关键知识点。 首先,JDBC连接数据库的步骤通常包括以下几个部分: 1. 导入JDBC驱动:在...

    ResultSet

    ResultSet是Java数据库连接(JDBC)中的核心接口,它用于存储和检索数据库查询结果。当你执行SQL查询并从数据库获取数据时,结果会被封装在ResultSet对象中。在本篇文章中,我们将深入探讨ResultSet的主要概念、操作...

    JDBC连接方法总汇

    ### JDBC连接方法总汇 #### 一、JDBC简介与作用 Java Database Connectivity(JDBC)是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了与...

    实用的jdbc的工具类,提供多种ResultSet的转化方法

    次类对ResultSet进行封装,可以将其转化为List,Map,BO等

    java数据库连接ResultSet

    ResultSet 通过一套 get 方法访问当前行中的不同列,例如 getInt、getString、getFloat 等。 在使用 ResultSet 之前,需要先执行 SQL 语句,并将结果存储到 ResultSet 对象中。例如: ```java java.sql.Statement ...

    ResultSet常用方法

    ResultSet是Java数据库连接(JDBC)中的一个核心接口,它用于存储从数据库查询返回的结果集。在处理SQL查询结果时,开发人员通常会与ResultSet对象交互以获取和操作数据。以下是对ResultSet常用方法的详细解释: 1....

    JAVA 版本ResultSet 转换为JAVABEAN的工具类

    这个工具类通常包含一个静态方法,接受ResultSet和JavaBean类型作为参数,然后遍历ResultSet,将数据填充到JavaBean对象中: ```java import java.sql.ResultSet; import java.sql.SQLException; public class ...

    jdbc连接大全 jdbc连接大全,很有用的,经自己精心总结!!

    **JDBC连接大全** 在Java编程中,JDBC(Java Database Connectivity)是Java语言与数据库交互的标准接口,它使得开发者可以使用Java代码来操作数据库。本篇内容将深入探讨JDBC连接的各个方面,旨在为你提供全面的...

    java jdbc连接数据库大全

    总的来说,Java JDBC为开发者提供了一个统一的接口来操作各种数据库,通过理解JDBC的基本概念和使用方法,可以高效地进行数据库操作。随着JDBC的不断优化,现代的JDBC驱动如JDBC 4.0及以上版本提供了更多的特性,如...

    jdbc学习文档

    ### JDBC学习文档精要 #### 一、JDBC概述与应用场景 **1.1 JDBC概念** JDBC(Java Database Connectivity)是一种用于执行SQL语句的标准Java API,它为Java开发者提供了一种统一的方式去访问各种关系型数据库。...

    jdbc连接不同数据库方法

    标题中的“jdbc连接不同数据库方法”指的是使用Java Database Connectivity (JDBC) API来与不同的数据库进行交互的方法。JDBC是Java平台中用于访问数据库的标准Java API,它允许开发者执行SQL语句并处理结果。 在...

    java resultset常用方法

    在Java的JDBC编程中,`ResultSet`接口用于表示从数据库查询中获取的结果集。它提供了多种方式来处理这些数据,并且根据不同的应用场景,支持不同类型的ResultSet。 #### 二、ResultSet 类型详解 1. **ResultSet....

    4. 尚硅谷_佟刚_JDBC_通过 ResultSet 执行查询操作.wmv

    JavaJDBC的视频,通过ResultSet执行查询操作,视频详细描述了如何使用ResultSet执行查询的案例。

Global site tag (gtag.js) - Google Analytics