文档

Java™ 教程
隐藏目录
使用高级数据类型
路径: JDBC数据库访问
课程: JDBC基础知识

使用高级数据类型

本节介绍的高级数据类型为关系数据库提供了更多的灵活性,可以作为表列的值使用。例如,可以使用列来存储BLOB(二进制大对象)值,它可以存储大量的原始字节数据。列还可以是CLOB(字符大对象)类型,它能够以字符格式存储大量的数据。

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

映射高级数据类型

JDBC API为SQL:2003标准指定的高级数据类型提供了默认映射。以下列表列出了数据类型及其映射的接口或类:

使用高级数据类型

您可以像处理其他数据类型一样检索、存储和更新高级数据类型。您可以使用ResultSet.getDataTypeCallableStatement.getDataType方法来检索它们,使用PreparedStatement.setDataType方法来存储它们,并使用ResultSet.updateDataType方法来更新它们。(变量DataType是映射到高级数据类型的Java接口或类的名称。)大约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 数据类型的行为不同。作为一个基于已存在的内置类型的用户定义类型,它在Java编程语言中没有接口。因此,您需要使用与 DISTINCT 数据类型基于的Java类型相对应的方法。有关更多信息,请参见使用 DISTINCT 数据类型

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

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

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

如果您想要将一个值存储到数据库中,您可以使用相应的set方法。例如,下面的代码片段中,rs是一个ResultSet对象,它存储了一个Clob对象:

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

此代码将notes设置为发送到数据库的更新语句的第一个参数。通过notes指定的Clob值将存储在表MARKETSCOMMENTS列中,在该列的值小于一百万的每一行中。


上一页:使用WebRowSet对象
下一页:使用大对象