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 驱动程序和高级数据类型的实例。
JDBC 驱动程序实现了所有 java.sql.Blob 和 java.sql.Clob 接口的 JDBC 3.0
方法。通过使用这些方法,您可以检索和更新类型为
| 注意: |
|---|
|
可以与
SQL Server 2005 大值数据类型一同使用 CLOB 值。具体来说,CLOB
类型可以与 |
在 SQL Server 的早期版本中,使用大值数据类型需要特定操作。大值数据类型是指超过 8 KB 最大行大小的数据类型。SQL
Server 2005
针对
大值类型主要用于以下场合:从数据库中检索这些类型,或者将其添加到数据库。以下部分介绍了完成这些任务的几种不同方法。
当您从数据库检索非二进制大值数据类型(如
ResultSet rs = stmt.executeQuery("SELECT TOP 1 * FROM Test1");
rs.next();
Reader reader = rs.getCharacterStream(2);
| 注意: |
|---|
|
可以将此同一方法用于 |
当您从数据库检索二进制大值数据类型(如
ResultSet rs = stmt.executeQuery("SELECT photo FROM mypics");
Rs.next();
InputStream is = rs.getBinaryStream(2);
也可以使用
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();
| 注意: |
|---|
|
还可以将这种方法用于存储在 |
如果您在服务器上具有图像库并且必须将整个二进制图像文件上载到
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)通过
如果必须替换较大文本文件(例如已存档的 HTML
文件)中某个字的实例,则可以使用
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 联机丛书中的“使用大值类型”。
SQL Server 2005
提供了
在 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
驱动程序不支持读取 |
有关
通过允许在 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
列上的 |
有关用户定义数据类型的详细信息,请参阅 SQL Server 联机丛书中的“使用和修改用户定义类型的实例”。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13714300/viewspace-1120464/ ,如需转载,请注明出处,否则将追究法律责任。