Usar tipos de datos avanzadosUsing Advanced Data Types

DescargarDescargar controlador para JDBCDownloadDownload JDBC Driver

El Controlador JDBC de Microsoft para SQL ServerMicrosoft JDBC Driver for SQL Server usa los tipos de datos avanzados de JDBC para convertir el SQL ServerSQL Server tipos de datos a un formato que pueda entender el Java de lenguaje de programación.The Controlador JDBC de Microsoft para SQL ServerMicrosoft JDBC Driver for SQL Server uses the JDBC advanced data types to convert the SQL ServerSQL Server data types to a format that can be understood by the Java programming language.

ComentariosRemarks

En la tabla siguiente se enumera las asignaciones predeterminadas entre los avanzados SQL ServerSQL Server, JDBC y los tipos de datos de lenguaje de programación Java.The following table lists the default mappings between the advanced SQL ServerSQL Server, JDBC, and Java programming language data types.

Tipos de SQL ServerSQL Server Types Tipos de JDBC (Tipos de java.sql.)JDBC Types (java.sql.Types) Tipos del lenguaje JavaJava Language Types
varbinary(max)varbinary(max)

imagenimage
LONGVARBINARYLONGVARBINARY Byte [] (predeterminado), Blob, InputStream, cadenabyte[] (default), Blob, InputStream, String
textotext

varchar(max)varchar(max)
LONGVARCHARLONGVARCHAR String (default), Clob, InputStreamString (default), Clob, InputStream
ntextntext

nvarchar(max)nvarchar(max)
LONGVARCHARLONGVARCHAR

LONGNVARCHAR (Java SE 6.0)LONGNVARCHAR (Java SE 6.0)
String (default), Clob, NClob (Java SE 6.0)String (default), Clob, NClob (Java SE 6.0)
xmlxml LONGVARCHARLONGVARCHAR

SQLXML (Java SE 6.0)SQLXML (Java SE 6.0)
String (default), InputStream, Clob, byte[],Blob, SQLXML (Java SE 6.0)String (default), InputStream, Clob, byte[],Blob, SQLXML (Java SE 6.0)
UDT1Udt1 VARBINARYVARBINARY String (default), byte[], InputStreamString (default), byte[], InputStream

1 la Controlador JDBC de Microsoft para SQL ServerMicrosoft JDBC Driver for SQL Server admite el envío y recuperación de UDT de CLR como datos binarios, pero no se admite la manipulación de metadatos CLR.1 The Controlador JDBC de Microsoft para SQL ServerMicrosoft JDBC Driver for SQL Server supports sending and retrieving CLR UDTs as binary data but does not support manipulation of the CLR metadata.

Las siguientes secciones proporcionan ejemplos de cómo puede usar el controlador JDBC y los tipos de datos avanzados.The following sections provide examples of how you can use the JDBC driver and the advanced data types.

Tipos de datos BLOB, CLOB y NCLOBBLOB and CLOB and NCLOB Data Types

El controlador JDBC implementa todos los métodos de las interfaces java.sql.Blob, java.sql.Clob y java.sql.NClob.The JDBC driver implements all the methods of the java.sql.Blob, java.sql.Clob, and java.sql.NClob interfaces.

Nota

Valores CLOB se pueden usar con Resultado deSQL Server 2005 (o posterior) tipos de datos de valor grande.CLOB values can be used with Resultado deSQL Server 2005 (or later) large-value data types. En concreto, los tipos CLOB se pueden usar con la varchar (max) y nvarchar (max) tipos de datos, tipos BLOB pueden usarse con varbinary (max) y imagen tipos de datos y los tipos NCLOB pueden utilizarse con ntext y nvarchar (max).Specifically, CLOB types can be used with the varchar(max) and nvarchar(max) data types, BLOB types can be used with varbinary(max) and image data types, and NCLOB types can be used with ntext and nvarchar(max).

Tipos de datos de valores grandesLarge Value Data Types

En versiones anteriores de SQL ServerSQL Server, trabajar con datos de valores grandes tipos requería un tratamiento especial.In earlier versions of SQL ServerSQL Server, working with large-value data types required special handling. Los tipos de datos de gran tamaño son aquellos que superan el tamaño de fila máximo de 8 KB.Large-value data types are those that exceed the maximum row size of 8 KB. SQL ServerSQL ServerIntroduce un especificador de máximo para varchar, nvarchar, y varbinary tipos de datos para permitir el almacenamiento de valores tan grandes como 2 ^ 31 bytes. introduces a max specifier for varchar, nvarchar, and varbinary data types to allow storage of values as large as 2^31 bytes. Columnas de la tabla y Transact-SQLTransact-SQL pueden especificar variables varchar (max), nvarchar (max), o varbinary (max) tipos de datos.Table columns and Transact-SQLTransact-SQL variables can specify varchar(max), nvarchar(max), or varbinary(max) data types.

Los escenarios principales en los que se trabaja con tipos de valores grandes implican su recuperación de una base de datos o agregarlos a una base de datos.The primary scenarios for working with large-value types involve retrieving them from a database, or adding them to a database. Las siguientes secciones describen diferentes enfoques para realizar estas tareas.The following sections describe different approaches to accomplish these tasks.

Recuperar tipos de valores grandes de una base de datosRetrieving Large-Value Types from a Database

Cuando se recupera un tipo de datos de valores grandes no binarios, como el varchar (max) tipo de datos, desde una base de datos, un enfoque consiste en leer esos datos como una secuencia de caracteres.When you retrieve a non-binary large-value data type—such as the varchar(max) data type—from a database, one approach is to read that data as a character stream. En el ejemplo siguiente, la executeQuery método de la SQLServerStatement clase se utiliza para recuperar datos de la base de datos y devolverlos como un conjunto de resultados.In the following example, the executeQuery method of the SQLServerStatement class is used to retrieve data from the database and return it as a result set. La getCharacterStream método de la SQLServerResultSet clase se utiliza para leer los datos de valores grandes desde el conjunto de resultados.Then the getCharacterStream method of the SQLServerResultSet class is used to read the large-value data from the result set.

ResultSet rs = stmt.executeQuery("SELECT TOP 1 * FROM Test1");  
rs.next();  
Reader reader = rs.getCharacterStream(2);  

Nota

Este mismo enfoque también se puede utilizar para la texto, ntext, y nvarchar (max) tipos de datos.This same approach can also be used for the text, ntext, and nvarchar(max) data types.

Cuando se recupera un tipo de datos binarios de gran valor, como el varbinary (max) tipo de datos, desde una base de datos, hay varios enfoques que puede realizar.When you retrieve a binary large-value data type—such as the varbinary(max) data type—from a database, there are several approaches that you can take. El enfoque más eficaz es leer los datos como un flujo binario, como en el siguiente ejemplo:The most efficient approach is to read the data as a binary stream, as in the following:

ResultSet rs = stmt.executeQuery("SELECT photo FROM mypics");  
rs.next();  
InputStream is = rs.getBinaryStream(2);  

También puede usar el getBytes método para leer los datos como una matriz de bytes, como en el siguiente ejemplo:You can also use the getBytes method to read the data as a byte array, as in the following:

ResultSet rs = stmt.executeQuery("SELECT photo FROM mypics");  
rs.next();  
byte [] b = rs.getBytes(2);  

Nota

También puede leer los datos como un BLOB.You can also read the data as a BLOB. No obstante, este es el método menos eficaz de los dos que se han mostrado anteriormente.However, this is less efficient than the two methods shown previously.

Agregar tipos de valores grandes a una base de datosAdding Large-Value Types to a Database

La carga de datos grandes con el controlador JDBC funciona bien para los casos en que tienen el tamaño de la memoria y, en los casos en los que son más grandes que la memoria, la transmisión de datos es la opción principal.Uploading large data with the JDBC driver works well for the memory-sized cases, and in the larger-than-memory cases, streaming is the primary option. No obstante, la manera más eficaz de cargar datos grandes es mediante interfaces de transmisión de datos.However, the most efficient way to upload large data is through the stream interfaces.

Otra opción es usar un String o bytes, como se puede ver en el siguiente ejemplo:Using a String or bytes is also an option, as in the following:

PreparedStatement pstmt = con.prepareStatement("INSERT INTO test1 (c1_id, c2_vcmax) VALUES (?, ?)");  
pstmt.setInt(1, 1);  
pstmt.setString(2, htmlStr);  
pstmt.executeUpdate();  

Nota

Este enfoque también puede utilizarse para los valores que se almacenan en texto, ntext, y nvarchar (max) columnas.This approach can also be used for values that are stored in text, ntext, and nvarchar(max) columns.

Si tiene una biblioteca de imágenes en el servidor y debe cargar archivos binarios completos para una varbinary (max) columna, el método más eficaz con el controlador JDBC es usar directamente secuencias, como en el siguiente ejemplo:If you have an image library on the server and must upload entire binary image files to a varbinary(max) column, the most efficient method with the JDBC driver is to use streams directly, as in the following:

PreparedStatement pstmt = con.prepareStatement("INSERT INTO test1 (Col1, Col2) VALUES(?,?)");  
File inputFile = new File("CLOBFile20mb.jpg");  
FileInputStream inStream = new FileInputStream(inputFile);  
int id = 1;  
pstmt.setInt(1,id);  
pstmt.setBinaryStream(2, inStream);  
pstmt.executeUpdate();  
inStream.close();  

Nota

El método CLOB o BLOB no es una forma eficaz de cargar grandes volúmenes de datos.Using either the CLOB or BLOB method is not an efficient way to upload large data.

Modificación de tipos de valores grandes en una base de datosModifying Large-Value Types in a Database

En la mayoría de los casos, el método recomendado para actualizar o modificar valores grandes en la base de datos consiste en pasar parámetros a través de la SQLServerPreparedStatement y SQLServerCallableStatement clases mediante el uso de Transact-SQLTransact-SQL comandos como UPDATE, WRITE y SUBSTRING.In most cases, the recommended method for updating or modifying large values on the database is to pass parameters through the SQLServerPreparedStatement and SQLServerCallableStatement classes by using Transact-SQLTransact-SQL commands like UPDATE, WRITE, and SUBSTRING.

Si tiene que reemplazar la instancia de una palabra en un archivo de texto grande, como un archivo de almacenamiento HTML, puede usar un objeto Clob, como en el siguiente ejemplo:If you have to replace the instance of a word in a large text file, such as an archived HTML file, you can use a Clob object, as in the following:

String SQL = "SELECT * FROM test1;";  
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);  
ResultSet rs = stmt.executeQuery(SQL);  
rs.next();  

Clob clob = rs.getClob(2);  
long pos = clob.position("dog", 1);  
clob.setString(pos, "cat");  
rs.updateClob(2, clob);  
rs.updateRow();  

Además, podría hacer el trabajo en el servidor y pasar los parámetros a una instrucción UPDATE preparada.Additionally, you could do all the work on the server and just pass parameters to a prepared UPDATE statement.

Para obtener más información sobre tipos de valores grandes, consulte "Uso de tipos de valores grandes" en los Libros en pantalla de SQL Server.For more information about large-value types, see "Using Large-Value Types" in SQL Server Books Online.

Tipos de datos XMLXML Data Type

SQL ServerSQL ServerProporciona un xml tipo de datos que le permite almacenar documentos XML y fragmentos en un SQL ServerSQL Server base de datos. provides an xml data type that lets you store XML documents and fragments in a SQL ServerSQL Server database. El xml tipo de datos es un tipo de datos integrado en SQL ServerSQL Servery es en cierta forma es similar a otros tipos integrados, como int y varchar.The xml data type is a built-in data type in SQL ServerSQL Server, and is in some ways similar to other built-in types, such as int and varchar. Como con otros tipos integrados, puede usar el xml tipo de datos como un tipo de columna cuando crea una tabla, como un tipo de variable, un tipo de parámetro o un tipo de valor devuelto de función; o en Transact-SQLTransact-SQL funciones CAST y CONVERT.As with other built-in types, you can use the xml data type as a column type when you create a table; as a variable type, a parameter type, or a function-return type; or in Transact-SQLTransact-SQL CAST and CONVERT functions.

En el controlador JDBC, el xml se puede asignar el tipo de datos como una cadena, matriz de bytes, secuencia, objeto CLOB, BLOB o SQLXML.In the JDBC driver, the xml data type can be mapped as a String, byte array, stream, CLOB, BLOB, or SQLXML object. Cadena es el valor predeterminado.String is the default. Desde la versión 2.0 del controlador JDBC, este controlador proporciona compatibilidad con la API de JDBC 4.0, que presenta la interfaz SQLXML.Starting with the JDBC Driver version 2.0, the JDBC driver provides support for the JDBC 4.0 API, which introduces the SQLXML interface. La interfaz SQLXML define métodos para interactuar y manipular datos XML.The SQLXML interface defines methods to interact and manipulate XML data. El SQLXML tipo de datos se asigna a la SQL ServerSQL Server xml tipo de datos.The SQLXML data type maps to the SQL ServerSQL Serverxml data type. Para obtener más información acerca de cómo leer y escribir datos XML desde y hacia la base de datos relacional con el SQLXML tipo de datos de Java, consulte compatibilidad con datos XML.For more information about how to read and write XML data from and to the relational database with the SQLXML Java data type, see Supporting XML Data.

La implementación de la xml tipo de datos en el controlador JDBC proporciona compatibilidad para lo siguiente:The implementation of the xml data type in the JDBC driver provides support for the following:

  • Acceso a XML como una cadena UTF-16 estándar de Java para la mayoría de las situaciones comunes de programación.Access to the XML as a standard Java UTF-16 string for most common programming scenarios

  • Compatibilidad con la escritura de UTF-8 y otros XML codificados de 8 bits.Input of UTF-8 and other 8-bit encoded XML

  • Acceso a XML como una matriz de bytes con un BOM inicial, cuando está codificado en UTF-16 para el intercambio con otros procesadores de XML y archivos en discos.Access to the XML as a byte array with a leading BOM when encoded in UTF-16 for interchange with other XML processors and disk files

    SQL ServerSQL Serverrequiere un BOM inicial para XML codificado en UTF-16. requires a leading BOM for UTF-16-encoded XML. La aplicación debe proporcionarlo cuando los valores de parámetro XML se proporcionen como matrices de bytes.The application must provide this when XML parameter values are supplied as byte arrays. SQL ServerSQL Serversiempre produce valores XML como UTF-16 cadenas sin BOM o declaración de codificación incrustada. always outputs XML values as UTF-16 strings with no BOM or embedded encoding declaration. Cuando se recuperan valores XML como byte[], BinaryStream o Blob, se agrega al principio del valor un BOM de UTF-16.When XML values are retrieved as byte[], BinaryStream or Blob, a UTF-16 BOM is pre-pended to the value.

    Para obtener más información sobre la xml tipo de datos, vea "tipos de datos xml" en SQL ServerSQL Server libros en pantalla.For more information about the xml data type, see "xml Data Type" in SQL ServerSQL Server Books Online.

Tipo de datos definido por el usuarioUser-Defined Data Type

La introducción de tipos definidos por el usuario (UDT) en Resultado deSQL Server 2005 amplía el sistema de tipos SQL al permitirle almacenar objetos y estructuras de datos personalizadas en un SQL ServerSQL Server base de datos.The introduction of user-defined types (UDTs) in Resultado deSQL Server 2005 extends the SQL type system by letting you store objects and custom data structures in a SQL ServerSQL Server database. Los UDT pueden contener varios tipos de datos y pueden presentar distintos comportamientos, lo que los diferencia de los tipos de datos de alias tradicionales que constan de un único tipo de datos del sistema de SQL ServerSQL Server.UDTs can contain multiple data types and can have behaviors, differentiating them from the traditional alias data types that consist of a single SQL ServerSQL Server system data type. Los UDT se definen con cualquiera de los lenguajes compatibles con Microsoft .NET Common Language Runtime (CLR) que producen código comprobable.UDTs are defined by using any of the languages supported by the Microsoft .NET common language runtime (CLR) that produce verifiable code. Esto incluye Microsoft Visual C# y Visual Basic .NET.This includes Microsoft Visual C# and Visual Basic .NET. Los datos se exponen como campos y propiedades de una clase o una estructura basada en .NET Framework, y los comportamientos se definen con métodos de la clase o la estructura.The data is exposed as fields and properties of a .NET Framework-based class or structure, and behaviors are defined by methods of the class or structure.

En SQL ServerSQL Server, un UDT puede utilizarse como definición de columna de una tabla, como una variable en un Transact-SQLTransact-SQL lote, o como un argumento de un Transact-SQLTransact-SQL función o procedimiento almacenado.In SQL ServerSQL Server, a UDT can be used as the column definition of a table, as a variable in a Transact-SQLTransact-SQL batch, or as an argument of a Transact-SQLTransact-SQL function or stored procedure.

Para obtener más información acerca de los tipos de datos definidos por el usuario, consulte "Usar y modificar instancias de tipos definidos por el usuario" en SQL ServerSQL Server libros en pantalla.For more information about user-defined data types, see "Using and Modifying Instances of User-defined Types" in SQL ServerSQL Server Books Online.

Vea tambiénSee Also

Describir los tipos de datos del controlador JDBCUnderstanding the JDBC Driver Data Types