使用高级数据类型

本节中介绍的高级数据类型使关系数据库在用作表列的值时具有更大的灵 Active。例如,一列可用于存储BLOB(二进制大对象)值,该值可将非常大量的数据存储为原始字节。列也可以是CLOB(字符大对象)类型,它能够以字符格式存储大量数据。

ANSI/ISO SQL 标准的最新版本通常称为 SQL:2003.该标准指定以下数据类型:

CREATE TYPE PLANE_POINT
AS (X FLOAT, Y FLOAT) NOT FINAL
CREATE TYPE MONEY
AS NUMERIC(10,2) FINAL

Map 高级数据类型

JDBC API 为 SQL:2003 标准指定的高级数据类型提供默认 Map。以下列表提供了数据类型以及它们 Map 到的interface或类:

使用高级数据类型

您以与处理其他数据类型相同的方式检索,存储和更新高级数据类型。您可以使用ResultSet.getDataTypeCallableStatement.getDataType方法来检索它们,使用PreparedStatement.setDataType方法来存储它们,并使用ResultSet.updateDataType方法来更新它们。 (变量DataType是 Map 到高级数据类型的 Java interface或类的名称.)对高级数据类型执行的大约 90%的操作涉及使用getDataTypesetDataTypeupdateDataType方法。下表显示了要使用的方法:

高级数据类型 getDataType方法 setDataType方法 updateDataType方法
BLOB getBlob setBlob updateBlob
CLOB getClob setClob updateClob
NCLOB getNClob setNClob updateNClob
ARRAY getArray setArray updateArray
XML getSQLXML setSQLXML updateSQLXML
Structured type getObject setObject updateObject
REF(structured type) getRef setRef updateRef
ROWID getRowId setRowId updateRowId
DISTINCT getBigDecimal setBigDecimal updateBigDecimal
DATALINK getURL setURL updateURL

注意DISTINCT数据类型的行为与其他高级 SQL 数据类型不同。作为基于现有内置类型的用户定义类型,它没有interface作为 Java 编程语言中的 Map。因此,您将使用与DISTINCT数据类型所基于的 Java 类型相对应的方法。有关更多信息,请参见使用 DISTINCT 数据类型

例如,以下代码片段检索 SQL ARRAY值。对于此示例,假设表STUDENTS中的列SCORES包含类型ARRAY的值。变量stmtStatement对象。

ResultSet rs = stmt.executeQuery(
    "SELECT SCORES FROM STUDENTS " +
    "WHERE ID = 002238");
rs.next();
Array scores = rs.getArray("SCORES");

变量scores是指向学生002238的行中表STUDENTS中存储的 SQL ARRAY对象的逻辑指针。

如果要在数据库中存储值,请使用适当的set方法。例如,以下代码片段(其中rsResultSet对象)存储了Clob对象:

Clob notes = rs.getClob("NOTES");
PreparedStatement pstmt =
    con.prepareStatement(
        "UPDATE MARKETS SET COMMENTS = ? " +
        "WHERE SALES < 1000000");
pstmt.setClob(1, notes);
pstmt.executeUpdate();

此代码将notes设置为要发送到数据库的 update 语句中的第一个参数。 notes所指定的Clob值将存储在COMMENTS列中的值小于一百万的每一行的COMMENTS列中的表MARKETS中。

首页