Usar tipos de datos básicos

El controlador JDBC de Microsoft SQL Server usa los tipos de datos básicos de JDBC para convertir los tipos de datos de SQL Server a un formato que el lenguaje de programación Java puede comprender y viceversa. Desde la versión 2.0 del controlador JDBC de Microsoft SQL Server, el controlador JDBC proporciona compatibilidad con la API de JDBC 4.0, que incluye los tipos de datos SQLXML y los tipos de datos nacionales(Unicode), como NCHAR, NVARCHAR, LONGNVARCHAR y NCLOB.

Asignaciones de tipo de datos

La siguiente tabla muestra las asignaciones predeterminadas entre los tipos de datos de SQL Server básicos, JDBC y del lenguaje de programación Java:

Tipos de SQL Server Tipos de JDBC (Tipos de java.sql.) Tipos del lenguaje Java

bigint

BIGINT

long

timestamp

binary

BINARY

byte[]

bit

BIT

boolean

char

CHAR

String

decimal

money

smallmoney

DECIMAL

java.math.BigDecimal

float

DOUBLE

double

int

INTEGER

int

image

varbinary(max)

LONGVARBINARY

byte[]

varchar(max)

text

LONGVARCHAR

String

nchar

CHAR

SQLXML (Java SE 6.0)

String

nvarchar

VARCHAR

LONGNVARCHAR (Java SE 6.0)

String

nvarchar(max)

ntext

LONGVARCHAR

LONGNVARCHAR (Java SE 6.0)

String

numeric

NUMERIC

java.math.BigDecimal

real

REAL

float

smallint

SMALLINT

short

datetime

smalldatetime

TIMESTAMP

java.sql.Timestamp

varbinary

udt

VARBINARY

byte[]

varchar

VARCHAR

String

tinyint

TINYINT

short

uniqueidentifier

CHAR

String

xml

LONGVARCHAR

SQLXML (Java SE 6.0)

String

SQLXML

time

TIME (1)

java.sql.Time (1)

date

DATE

java.sql.Date

datetime2

TIMESTAMP

java.sql.Timestamp

datetimeoffset (2)

microsoft.sql.Types.DATETIMEOFFSET

microsoft.sql.DateTimeOffset

(1) Para utilizar java.sql.Time con el tipo de hora de SQL Server, debe establecer la propiedad de conexión sendTimeAsDatetime en FALSE.

(2) Puede tener acceso mediante programación a los valores de datetimeoffset con Clase DateTimeOffset.

El tipo de datos sqlvariant de SQL Server no es compatible actualmente con el controlador JDBC. Si se usa una consulta para recuperar datos de una tabla que contenga una columna del tipo de datos sqlvariant, se producirá una excepción.

Las siguientes secciones proporcionan ejemplos de cómo puede usar el controlador JDBC y los tipos de datos básicos. Si desea obtener un ejemplo detallado sobre cómo usar los tipos de datos básicos en una aplicación de Java, consulte Ejemplo de tipos de datos básicos.

Recuperar datos como una cadena

Si tiene que recuperar datos de un origen de datos que se asignen a cualquiera de los tipos de datos básicos de JDBC para verlos como una cadena, o si no son necesarios datos de tipos muy marcados, puede usar el método getString de la clase SQLServerResultSet, como en el siguiente ejemplo:

String SQL = "SELECT TOP 10 * FROM Person.Contact";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(SQL);

while (rs.next()) {
   System.out.println(rs.getString(4) + " " + rs.getString(6));
}
rs.close();
stmt.close();

Recuperar datos por tipos de datos

Si tiene que recuperar datos de un origen de datos y sabe el tipo de datos que se van a recuperar, use uno de los métodos get<Type> de la clase SQLServerResultSet, también conocidos como métodos de captador. Con los métodos get<Type>, puede usar un nombre de columna o un índice de columna, como en el siguiente ejemplo:

ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee
   WHERE (lname = 'Brown')");
rs.next();
short empJobID = rs.getShort("job_id");
rs.close();
stmt.close();

Nota

Los métodos con escala getUnicodeStream y getBigDecimal están obsoletos y el controlador JDBC no los admite.

Actualizar datos por tipos de datos

Si tiene que actualizar el valor de un campo en un origen de datos, use uno de los métodos update<Type> de la clase SQLServerResultSet. En el siguiente ejemplo, se usa el método updateInt en conjunción con el método updateRow para actualizar los datos del origen de datos:

Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 
ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee
   WHERE (lname = 'Brown')");
rs.next();
short empJobID = rs.getInt(2);
empJobID++;
rs.first();
rs.updateInt(2, empJobID);
rs.updateRow();
rs.close();
stmt.close();

Nota

El controlador JDBC no puede actualizar una columna SQL Server con un nombre de columna que tenga más de 127 caracteres de largo. Si se intenta una actualización a una columna cuyo nombre tenga más de 127 caracteres, se genera una excepción.

Actualizar datos mediante una consulta con parámetros

Si tiene que actualizar datos de un origen de datos mediante el uso de una consulta con parámetros, puede establecer el tipo de datos de los parámetros con los métodos set<Type> de la clase SQLServerPreparedStatement, también conocidos como métodos de establecedor. En el siguiente ejemplo, se usa el método prepareStatement para precompilar la consulta con parámetros, y luego el método setString para establecer el valor de cadena del parámetro antes de llamar al método executeUpdate.

PreparedStatement pstmt = con.prepareStatement("UPDATE employee SET
   fname = ? WHERE (lname = 'Brown')");
String first = "Bob";
pstmt.setString(1, first);
int rowCount = pstmt.executeUpdate();
pstmt.close();

Para obtener más información sobre consultas con parámetros, vea Usar una instrucción SQL con parámetros.

Pasar de parámetros a un procedimiento almacenado

Si tiene que pasar parámetros de tipo a un procedimiento almacenado, puede establecerlos por índice o por nombre mediante el uso de uno de los métodos set<Type> de la clase SQLServerCallableStatement. En el siguiente ejemplo, se usa el método prepareCall para configurar la llamada al procedimiento almacenado, y luego el método setString para establecer el parámetro para la llamada antes de llamar al método executeQuery.

CallableStatement cstmt = con.prepareCall("{call employee_jobid(?)}");
String lname = "Brown";
cstmt.setString(1, lname);
Resultset rs = cstmt.executeQuery();
rs.close();
cstmt.close();

Nota

En este ejemplo, se devuelve un conjunto de resultados con los resultados de la ejecución del procedimiento almacenado.

Para obtener más información sobre el uso del controlador JDBC con procedimientos almacenados y parámetros de entrada, consulte Usar un procedimiento almacenado con parámetros de entrada.

Recuperación de parámetros desde un procedimiento almacenado

Si tiene que recuperar parámetros desde un procedimiento almacenado, primero debe registrar un parámetro de salida por el nombre o el índice con el método registerOutParameter de la clase SQLServerCallableStatement y, a continuación, asignar el parámetro de salida devuelto a una variable adecuada después de haber ejecutado la llamada al procedimiento almacenado. En el siguiente ejemplo, se usa el método prepareCall para configurar la llamada al procedimiento almacenado, el método registerOutParameter para configurar el parámetro de salida y el método setString para establecer el parámetro para la llamada antes de llamar al método executeQuery. El valor que devuelve el parámetro de salida del procedimiento almacenado se recupera con el método getShort.

CallableStatement cstmt = con.prepareCall("{call employee_jobid (?, ?)}");
cstmt.registerOutParameter(2, java.sql.Types.SMALLINT);
String lname = "Brown";
cstmt.setString(1, lname);
Resultset rs = cstmt.executeQuery();
short empJobID = cstmt.getShort(2);
rs.close();
cstmt.close();

Nota

Además del parámetro de salida devuelto, puede que también se devuelva un conjunto de resultados con los resultados de ejecución del procedimiento almacenado.

Para obtener más información sobre el uso del controlador JDBC con procedimientos almacenados y parámetros de salida, consulte Usar un procedimiento almacenado con parámetros de salida.

Vea también

Otros recursos

Describir los tipos de datos del controlador JDBC