服务时间:8:30-18:00

首页 >java学习网

ResultSet的方法

发布时间:2022-12-05 23:37 字数:2879字 阅读:138

ResultSet的方法

如果数据库中某个字段为numberic类型,可以通过ResultSet中的哪个方法获取?

(1)getNumberic()

(2)getDouble()

(3)setNumberic()

(4)setDouble()

考点:考察求职者对于数据集(ResultSet)的熟悉和掌握。

出现频率:★★★★★

【面试题解析】ResultSet包含符合SQL语句中条件的所有行,并且它通过一套GET方法(这些GET方法可以访问当前行中的不同列)提供了对这些行中数据的访问。ResultSet.next方法用于移动到ResultSet中的下一行,使下一行成为当前行。ResultSet一般是一个表,其中有查询所返回的列标题及相应的值。如果查询为:

        SELECT a, b, c FROM Table1

则ResultSet将具有如下形式:

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

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

        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()方法,光标向下移动一行。最初光标位于第1行之前,第1次调用next()方法将把光标置于第1行上,使它成为当前行。随着每次调用next()方法导致光标向下移动一行,按照从上至下的次序获取ResultSet行。

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

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

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

2.列

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

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

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

有些情况下,SQL查询返回的ResultSet中可能有多个列具有相同的名字。如果将列名用作GET方法的参数,则GET方法将返回第1个匹配列名的值。因而,如果多个列具有相同的名字,则需要使用列索引来确保检索了正确的列值。

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

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

3.数据类型和转换

对于GET方法,JDBC驱动程序试图将基本数据转换成指定Java类型,然后返回适合的Java值。例如,如果GET方法为getString(),而基本数据库中数据类型为VARCHAR,则JDBC驱动程序将把VARCHAR转换成String类型。getString()的返回值为String对象。常见的方法请参考相关文档,这里不再列出。

4.NULL结果值

要确定给定结果值是否是NULL,必须先读取该列,然后使用ResultSet.wasNull()方法检查该次读取是否返回NULL。当使用ResultSet的GET方法读取NULL值时,wasNull()方法将返回下列值之一。

• NULL值,对应getString()、getBigDecimal()、getBytes()、getDate()、getTime()、getTimestamp()、getAsciiStream()、getUnicodeStream()、getBinaryStream()、getObject()等方法。

• 零值,对应getByte()、getShort()、getInt()、getLong()、getFloat和getDouble()方法。• false值,对应getBoolean()方法。

5.可选ResultSet或多ResultSet

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

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

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

面试题4中,数据库中的numberic类型为数字类型,应该使用ResultSet的getDouble()方法来获得浮点值。ResultSet并没有getNumberic()方法。

参考答案:(b)。