使用高级数据类型
JDBC 高级数据类型是在 JDBC 2.0 核心 API 中引入的。Microsoft SQL Server 2005 JDBC Driver 使用 JDBC 高级数据类型将 SQL Server 数据类型转换为 Java 编程语言所支持的格式。
下表列出了高级 SQL Server、JDBC 和 Java 编程语言数据类型之间的默认映射。
SQL Server 类型 JDBC 类型 (java.sql.Types) Java 语言类型
varbinary(max)
image
LONGVARBINARY
byte[](默认)、Blob、CharacterStream、BinaryStream、String
text
ntext
varchar(max)
nvarchar(max)
LONGVARCHAR
String(默认)、Clob、CharacterStream、BinaryStream
xml
LONGVARCHAR
String(默认)、CharacterStream、Clob、byte[]、BinaryStream、Blob
udt
VARBINARY(最大大小为 8000 字节)
String(默认)、byte[]、BinaryStream、Object
以下部分提供了如何使用 JDBC 驱动程序和高级数据类型的实例。
BLOB 和 CLOB 数据类型
JDBC 驱动程序实现了所有 java.sql.Blob 和 java.sql.Clob 接口的 JDBC 3.0 方法。通过使用这些方法,您可以检索和更新类型为 text、ntext、xml 和 image 的列。
注意:
可以与 SQL Server 2005 大值数据类型一同使用 CLOB 值。具体来说,CLOB 类型可以与 varchar(max) 和 nvarchar(max) 数据类型一起使用,BLOB 类型可以与 varbinary(max) 和 xml 数据类型一起使用。
大值数据类型
在 SQL Server 的早期版本中,使用大值数据类型需要特定操作。大值数据类型是指超过 8 KB 最大行大小的数据类型。SQL Server 2005 针对 varchar、nvarchar 和 varbinary 数据类型引入了一个 max 说明符,以允许存储大至 2^31 个字节的值。表列和 Transact-SQL 变量可以指定 varchar(max)、nvarchar(max) 或 varbinary(max) 数据类型。
大值类型主要用于以下场合:从数据库中检索这些类型,或者将其添加到数据库。以下部分介绍了完成这些任务的几种不同方法。
从数据库中检索大值类型
当您从数据库检索非二进制大值数据类型(如 varchar(max) 数据类型)时,一种方法是将该数据作为字符流进行读取。以下实例使用了 SQLServerStatement 类的 executeQuery 方法从数据库中检索数据,并将其返回为结果集。然后,使用 SQLServerResultSet 类的 getCharacterStream 方法从结果集读取大值数据。
复制代码
ResultSet rs = stmt.executeQuery("SELECT TOP 1 * FROM Test1");
rs.next();
Reader reader = rs.getCharacterStream(2);注意:
可以将此同一方法用于 text、ntext 和 nvarchar(max) 数据类型。
当您从数据库检索二进制大值数据类型(如 varbinary(max) 数据类型)时,您可以采取多种方法。最有效的方法是将数据作为二进制流进行读取,如下所示:
复制代码
ResultSet rs = stmt.executeQuery("SELECT photo FROM mypics");
Rs.next();
InputStream is = rs.getBinaryStream(2);也可以使用 getBytes 方法将数据作为字节数组进行读取,如下所示:
复制代码
ResultSet rs = stmt.executeQuery("SELECT photo FROM mypics");
Rs.next();
byte [] b = rs.getBytes(2);注意:
还可以将数据作为 BLOB 进行读取。但是,这种方法与前两种方法相比效率较低。
向数据库添加大值类型
通过 JDBC 驱动程序上载较大数据适用于内存大小合适的情况,而对于大于内存的情况,流是主要选择。但是,最有效的上载较大数据的方法是通过流接口。
使用字符串或字节也是一个选项,如下所示:
复制代码
PreparedStatement pstmt = con.prepareStatement("INSERT INTO test1 (c1_id, c2_vcmax) VALUES (?, ?)");
pstmt.setInt(1, 1);
pstmt.setString(2, htmlStr);
pstmt.executeUpdate();注意:
还可以将这种方法用于存储在 text、ntext 和 nvarchar(max) 列中的值。
如果您在服务器上具有图像库并且必须将整个二进制图像文件上载到 varbinary(max) 列,则适用于 JDBC 驱动程序的最有效方法是直接使用流,如下所示:
复制代码
Statement stmt = con.createStatement();
PreparedStatement pstmt = con.prepareStatement("INSERT INTO test1
VALUES( ?, ? )");
FileReader in = new FileReader(new File("CLOBFile20mb.txt");
long len = fileIn.length();
int id = 1;
pstmt.setInt(1,id);
pstmt.setCharacterStream(2, in, (int)len);
pstmt.executeUpdate();
in.close();注意:
使用 CLOB 或 BLOB 方法不是上载较大数据的有效方法。
修改数据库中的大值类型
在大多数情况下,对更新或修改数据库中的大值建议使用的方法为:使用 Transact-SQL 命令(例如 UPDATE、WRITE 和 SUBSTRING)通过 SQLServerPreparedStatement 和 SQLServerCallableStatement 类传递参数。
如果必须替换较大文本文件(例如已存档的 HTML 文件)中某个字的实例,则可以使用 Clob 对象,如下所示:
复制代码
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM test1");
rs.next();
Clob clob = rs.getClob(2);
long pos = clob.position("dog", 1);
clob.setString(1, "cat", len, 3);
rs.updateClob(2, clob);
rs.updateRow();此外,可以在服务器上完成全部工作,仅将参数传递到准备好的 UPDATE 语句。
有关大值类型的详细信息,请参阅 SQL Server 联机丛书中的“使用大值类型”。
XML 数据类型
SQL Server 2005 提供了 xml 数据类型,该数据类型允许您将 XML 文档和碎片存储在 SQL Server 数据库中。xml 数据类型是 SQL Server 中的内置数据类型,在某些方面类似于其他内置类型,如 int 和 varchar。对于其他内置类型,在作为变量类型、参数类型、函数返回类型或在 Transact-SQL CAST 和 CONVERT 函数中创建表时,可以使用 xml 数据类型作为列类型。
在 JDBC 驱动程序中,xml 数据类型可以映射为字符串、字节数组、流、CLOB 或 BLOB 对象。字符串是默认的表示形式。在 JDBC 驱动程序中实现 xml 数据类型为以下各项提供了支持:
在大多数常见的编程场景中,对作为标准 Java UTF-16 字符串的 XML 的访问
输入以 UTF-8 和其他 8 格式进行编码的 XML
为了可与其他 XML 处理器和磁盘文件进行互换而以 UTF-16 进行编码时,对作为带有前导 BOM 的字节数组的 XML 的访问
SQL Server 要求以 UTF-16 编码的 XML 具有前导 BOM。当以字节数组形式提供 XML 参数值时,应用程序必须提供此前导 BOM。SQL Server 始终以 UTF-16 字符串形式输出 XML 值,而不带有 BOM 或嵌入式编码声明。当将 XML 值作为 byte[]、BinaryStream 或 Blob 进行检索时,会为该值预置一个 UTF-16 BOM。
注意:
JDBC 驱动程序不支持读取 xml 数据类型的存储过程输出参数。然而,它的确支持将 xml 数据类型用作输入参数。如果您必须使用 xml 数据类型作为输出参数,首先必须在存储过程中将 xml 数据类型转换为 VARCHAR 或 LONGVARCHAR,然后才能读取此参数。
有关 xml 数据类型的详细信息,请参阅 SQL Server 联机丛书中的“xml 数据类型”。
用户定义的数据类型
通过允许在 SQL Server 数据库中存储对象和自定义数据结构,在 SQL Server 2005 中引入了用户定义的类型 (UDT),从而扩展了 SQL 类型系统。UDT 可以包含多种数据类型,也可以具有多种行为,这一点使它与传统的由单个 SQL Server 系统数据类型组成的别名数据类型区分开来。可使用 Microsoft .NET 公共语言运行时 (CLR)(生成可验证的代码)所支持的任意一种语言定义 UDT。包括 Microsoft Visual C# 和 Visual Basic .NET。数据被公开为基于 .NET Framework 的类或结构的字段和属性,行为由类或结构的方法定义。
在 SQL Server 2005 中,UDT 可用作表的列定义、Transact-SQL 批处理的变量或 Transact-SQL 函数或存储过程的参数。
注意:
JDBC 驱动程序不支持对 UDT 列上的 AsciiStream 和 CharacterStream 使用 getter 或 setter 方法。此外,与 xml 数据类型相类似,JDBC 驱动程序不支持读取 udt 数据类型的存储过程输出参数。但是,它支持将 udt 数据类型用作输入参数。如果您必须使用 udt 数据类型作为输出参数,首先必须在存储过程中将 udt 数据类型转换为 varbinary(max) 数据类型,然后才能读取此参数。
有关用户定义数据类型的详细信息,请参阅 SQL Server 联机丛书中的“使用和修改用户定义类型的实例”。
另请参见
其他资源
了解 JDBC 驱动程序数据类型
分享到:
相关推荐
### MySQL与Java数据类型对应详解 #### 概述 在进行数据库操作时,尤其是在使用Java进行MySQL数据库开发的过程中,正确地映射数据类型是至关重要的一步。本文将详细介绍MySQL中的各种数据类型及其在Java中的对应...
通常,这样的SQL脚本会包括CREATE TABLE语句,用于定义表的字段、数据类型、约束条件等。例如,可能有一个名为“students”的表,包含“id”(唯一标识符)、"name"(姓名)、"age"(年龄)、"major"(专业)等字段...
本文将深入探讨SQLite的数据类型及其与Java JDBC连接SQLite的基础知识,并通过一个简单的Java例子程序来演示如何存取数据。 SQLite支持七种基本的数据类型,它们分别是: 1. NULL:表示空值,任何值都可以赋为NULL...
JDBC数据类型与数据库字段对应表——mysql篇 数值型 整型 JDBC tinyint java.lang.Integer smallint mediumint java.lang.Long int bigint java.math.BigInteger
在 Oracle 数据库与 Java 应用程序交互时,理解 SQL 数据类型和它们对应的 JDBC 类型以及 Oracle 扩展的 Java 类型是至关重要的。这里我们将深入探讨这些概念,并提供一个全面的指南。 首先,JDBC(Java Database ...
JDBC是Java中的一个标准API,它提供了一组接口和类,用于在Java程序中访问各种类型的数据库。SQLJDBC驱动是实现这些接口的具体实现,针对SQL Server提供了高效、可靠的数据库连接功能。 2. SQLJDBC 4.0的主要特性 ...
首先,我们需要理解JDBC,它是Java语言访问数据库的标准API,能够连接并操作多种类型的数据库。对于MySQL,JDBC提供了连接、查询、插入、更新和删除数据的能力。要使用JDBC,我们需要引入对应的数据库驱动,例如`...
在进行数据库开发时,了解不同数据库管理系统(DBMS)的数据类型及其与Java Database Connectivity (JDBC)中的数据类型的对应关系至关重要。这有助于确保数据能够在Java应用程序与不同数据库之间正确、高效地传输。...
3. **类型3:网络协议全Java驱动** - 将JDBC调用转换成独立于任何原生数据库协议的网络协议。中间件软件运行在服务器上,将网络协议转换为原生数据库协议。 4. **类型4:原生协议全Java驱动** - 在服务器端完成JDBC...
Oracle 数据类型是 Oracle 数据库管理系统中的数据类型,用于存储和管理数据,而 JDBC(Java Database Connectivity)类型是 Java 语言中用于连接数据库的 API 中的数据类型。了解 Oracle 数据类型和对应的 JDBC ...
"基本数据库访问"和"SQL数据类型与Java数据类型"章节探讨了如何使用JDBC执行SQL语句,获取结果集,并将这些结果转换为Java对象。此外,还介绍了如何处理不同的数据类型,确保Java与数据库之间的数据类型匹配,以避免...
Java 使用 JDBC 将数据库数据导出到 CSV 文件 Java 是一种广泛使用的编程语言,它提供了多种方式来处理数据库数据,而 JDBC(Java Database Connectivity)是 Java 中连接数据库的标准 API 之一。将数据库数据导出...
Java Web JDBC 数据源配置 Java Web JDBC 数据源是指在 Java Web 应用程序中使用 JDBC(Java Database Connectivity)技术来连接数据库的方式。在这个配置文件中,我们可以看到的是在 Tomcat 中的 conf 文件下,...
JDBC读取数据库元数据,生成JAVA实体类
在Java编程语言中,数据类型是构建程序的基础。它们决定了变量可以存储的值的种类以及进行的操作。简单数据类型包括整数类型、浮点类型、字符类型和布尔类型。整数类型包括byte(1字节)、short(2字节)、int(4...
- **JDBC-ODBC桥**:这是最早的JDBC驱动类型,它将Java应用程序与ODBC驱动程序桥接,进而访问任何ODBC支持的数据库。 - **本地协议驱动**:这些驱动程序是为特定数据库量身定制的,直接与数据库通信,不依赖ODBC,...
在Java编程中,JDBC是连接Java应用和关系型数据库的标准接口,它允许程序员执行SQL语句,进行数据查询、插入、更新和删除等操作。在这个项目中,开发者首先需要配置数据库连接,包括设置数据库URL、用户名和密码,...
这里,`ResultSetMetaData`对象提供了有关结果集中列的信息,包括列的数量、名称和数据类型等。 6. **注意事项** - 在编写代码时,需要注意以下几点: - 确保导入了DB2的JDBC驱动包,否则会因为找不到驱动而报错...
第六章"SQL Data Types In Java And ORM Mapping"涉及Java中的SQL数据类型和对象关系映射(ORM)。通过ResultSetMetaData接口,读者可以了解如何获取和理解数据库列的信息。此外,本章还介绍了如何将数据库表映射到...