Preguntas frecuentes sobre Oracle JDBC (preguntas frecuentes)

Este documento responde a las preguntas más frecuentes sobre los controladores JDBC de Oracle. Tenga en cuenta que estas preguntas frecuentes solo abordan preguntas técnicas específicas y también cubren problemas conocidos. Consulta la Guía para desarrolladores de JDBC y Javadoc para JDBC para obtener más detalles sobre las funcionalidades y cómo se pueden utilizar en tu aplicación. 


Preguntas frecuentes

    • Novedades en 26ai
    • ¿Existen documentos relacionados con Oracle Database Cloud Service para desarrolladores Java?

JDBC en General

Preguntas específicas sobre la versión

    • ¿Qué versión de los controladores JDBC son compatibles?

Versión

Fecha de disponibilidad general

Finaliza el soporte Premier

Finaliza el soporte Extendido

Finaliza el soporte de mantenimiento

26IA Ene 2026
  • Dic 2031
Dic 2031 Indefinido
21c (versión de innovación) Agosto de 2021 Julio de 2027 No disponible Indefinido
19c (versión a largo plazo) Abril de 2019 Dic 2029 (consulta Lifetime Support Policy) Dic 2032 Indefinido
18c Julio de 2018 Junio de 2021 No disponible Indefinido
12.2 Marzo de 2017 30 de noviembre de 2020 (periodo de corrección de errores limitado para 12.2.0.1 - 1 de diciembre de 2020 - 31 de marzo de 2022) No disponible Indefinido
EE 12.1 Junio de 2013 Julio de 2018 Julio de 2022 Indefinido

    • ¿De qué se trata la matriz de interoperabilidad JDBC y RDBMS o la matriz de certificación?

Matriz de interoperabilidad

Database 23.x

Database 21.x

Database 19.x

Database 18.3

Database 12.2 y 12.1

JDBC 23.x No No
JDBC 21.x Antes Antes
JDBC 19.x Antes Antes
JDBC 18.x No Antes Antes Antes Antes
JDBC 12.2 y 12.1 No Antes Antes Antes Antes

    • ¿Cuáles son las versiones de Oracle JDBC frente a las versiones de JDK?

Versión de Oracle Database

Archivos Jar de JDBC específicos para la versión

23.x

ojdbc17.jar con JDK17, JDK19, JDK21 y JDK25 con compatibilidad con API de Jakarta


ojdbc11.jar con JDK11 y JDK 21


ojdbc8.jar con JDK8 y JDK 11

21.x

ojdbc11.jar con JDK11, JDK17, JDK19 y JDK21


ojdbc8.jar con JDK8 y JDK 11

19.x

ojdbc11.jar con JDK11, JDK17, JDK19 y JDK21 (19.25 en adelante)


ojdbc8.jar con JDK8, JDK11, JDK17, JDK19 y JDK21 (19.25 en adelante)

18.x ojdbc8.jar con JDK8 y JDK 11
12.2 o 12cR2 ojdbc8.jar con JDK 8
12.1 o 12cR1

ojdbc7.jar con JDK 7 y JDK 8


ojdbc6.jar con JDK 6

11.2 o 11gR2

ojdbc6.jar con JDK 6, JDK 7 y JDK 8


(Nota: JDK7 y JDK8 solo están soportados en 11.2.0.3 y 11.2.0.4)


ojdbc5.jar con JDK 5

    • ¿Cuáles son las versiones de JDBC de Oracle frente a las especificaciones JDBC?

Versión de Oracle Database

Conformidad de las especificaciones de JDBC

23.x y 21.x

JDBC 4.3 en ojdbc11.jar


JDBC 4.2 en ojdbc8.jar

19.x

JDBC 4.3 en ojdbc10.jar


JDBC 4.2 en ojdbc8.jar

18.3 JDBC 4.2 en ojdbc8.jar
12.2 o 12cR2 JDBC 4.2 en ojdbc8.jar
12.1 o 12cR1

JDBC 4.1 en ojdbc7.jar


JDBC 4.0 en ojdbc6.jar

11.2 o 11gR2

JDBC 4.0 en ojdbc6.jar


JDBC 3.0 en ojdbc5.jar

Preguntas específicas adicionales sobre la versión

    • ¿Están los controladores de Oracle JDBC certificados para OpenJDK?
    • ¿Cuál es el controlador JDBC 19.x recomendado para JDK 11?
    • ¿Qué sucede con la versión de JDBC que no se muestra en la tabla anterior?
    • ¿Dónde puedo obtener los archivos jar de JDBC?
    • ¿Para qué sirven los distintos archivos JAR de la página de descarga del controlador JDBC 19.x?

Oracle JDBC en General

    • ¿Cuáles son los diferentes controladores JDBC que proporciona Oracle?
    • ¿Qué controlador debo utilizar?
    • ¿Qué sucede con los archivos jar para el controlador Thin del servidor y el controlador interno del servidor?
    • ¿Pueden los proveedores externos distribuir los controladores JDBC de Oracle junto con su propio software?
    • ¿Qué permisos necesitan los controladores JDBC de Oracle?

Instalación

    • ¿Cómo instalo el controlador Thin?
    • ¿Cómo instalo el controlador OCI?
    • ¿Cómo instalo el controlador interno del lado del servidor o el Thin en el controlador del servidor?

DriverManager y DataSources

    • ¿Cuál es la diferencia entre DriverManager y DataSource?
    • ¿Qué pool de conexiones debo utilizar?
    • ¿Qué es el pool de conexiones JDBC OCI?

Conexiones

    • ¿Cuál es el formato de una URL?
    • ¿Cuál es la forma de la descripción?
    • ¿Cómo puedo utilizar el argumento Propiedades?
    • ¿No tengo que registrar la clase OracleDriver con DriverManager?
    • ¿Qué nombre de usuario y contraseña debo utilizar al conectarse al controlador interno del servidor?
    • Aparece el error OutofMemory al definir un valor de recuperación previa predeterminada superior.
    • ¿Qué es una cadena de conexión de servicios?
    • ¿Cómo me conecto como SYSDBA o SYSOPER?
    • ¿Qué métodos de cifrado admiten los controladores JDBC de Oracle?
    • ¿Cómo activo el cifrado y el total de comprobación con el controlador JDBC Thin?
    • ¿En qué consiste la autenticación de proxy?
    • ¿Los controladores JDBC de Oracle son compatibles con SSL?
    • ¿Los controladores JDBC de Oracle admiten LDAP en la URL de conexión?
    • ¿Cómo puedo utilizar JDBC para conectarse a un servidor de base de datos detrás de un firewall?
  • Declaraciones, PreparedStatements, CallableStatements

    • ¿Qué es defineColumnType y cuándo debo utilizarlo?
    • ¿Fuerza defineColumnType las conversiones en el servidor?
    • ¿Cómo desactivar EscapeProcessing en el nivel de controlador jdbc en lugar de llamar a stmt.setEscapeProcessing(false) en el código de aplicación?
    • ¿Proporcionan los controladores JDBC de Oracle una función de enlace por nombre?
    • En los métodos setXXX en PreparedStatement, ¿cómo determinan los controladores JDBC de Oracle el tipo de dato?
    • ¿Qué sucede si el tipo del parámetro de destino no es el mismo que el tipo asumido por el método setXXX?
    • ¿Por qué los conductores no realizan la conversión en el lado del cliente?
    • Para insertar en una columna de una tabla, ¿cuáles son los tipos de dato de bytes?
    • Para introducir en una columna de una tabla, ¿cuáles son los tipos de dato de caracteres?
    • ¿Cuáles son los tamaños de setString, setCharacterStream y setAsciiStream y los límites de tamaño para los datos binarios a través de setBytes y setBinaryStream?

Formulario

Estado

Controlador

Límite inferior

Límite superior

Mecanismo de enlace

Nota

Todo Todo Todo 0 0 Nulo
Todo SQL Cliente 1 caracter 32766 caracteres Directo
Todo SQL Cliente 32767 caracteres 2147483647 bytes Stream
Todo SQL Cliente 2147483648 bytes 2147483647 caracteres

Clob temporal


CARACTER  
Servidor 1 carácter 65536 bytes

Directo


1, 2


NCHAR  
 
1 carácter 4000 bytes

Directo


NCHAR  
 
4001 bytes 2147483647 caracteres

Clob temporal


CARACTER  
 
65537 bytes 2147483647 caracteres

Stream


 
 
 
2147483647 bytes 2147483647 caracteres

Clob temporal


Todo PL/SQL Todo 1 caracter 32512 caracteres Directo  
Todo PL/SQL Todo 32512 caracteres 2147483647 caracteres Clob temporal

    • ¿Cuáles son los límites de tamaño de los métodos de propiedad setBytesForBlob, setStringForClob en oracle.jdbc.OraclePreparedStatement?

API

FORMULARIO

Estado

Controlador

Límite inferior

Límite superior

Mecanismo de enlace

Nota

setBytesForBlob

n/d


Todo Todo

0


0


Nulo
 
 
Todo Cliente 1 byte

2000 bytes


Directo
 
 
Todo Cliente 2001 bytes 21474836487 bytes Blob temporal 2
setStringForClob

Todo


Todo Todo 0 0 Nulo  
 

Todo


Todo Cliente 1 caracter 32766 caracteres Directo  
 

Todo


Todo Cliente 32766 caracteres 2147483647 caracteres Clob temporal  
 

Todo


Todo Servidor 1 caracter 4000 bytes Directo  
 

Todo


Todo Servidor 4001 bytes 2147483647 caracteres Clob temporal 1

    • ¿La conmutación de tipos de enlace fuerza el análisis adicional del servidor de la sentencia?
    • ¿Qué sucede con CallableStatements y los procedimientos con los parámetros IN OUT?
    • ¿Cambiará la selección de procedimientos polimórficos PL/SQL cuando cambie el tipo de enlace?
    • ¿Qué sucede con el código existente?
    • En determinados casos, el controlador está creando lobs temporales. ¿Se realiza un seguimiento de estos y se liberan?
    • Estamos utilizando un juego de caracteres de ancho variable como UTF8. ¿El controlador corrige la longitud de bytes real de una secuencia de caracteres?
    • ¿Es una buena idea utilizar, por ejemplo, setString para una cadena realmente enorme?
    • Los tipos de columna LONG RAW y LONG están en desuso. ¿Por qué hay nuevos usos de las API de setXXXStream?
    • Las API de LOB son mucho más flexibles, ¿verdad?
    • ¿Por qué no puedo crear una PreparedStatement que haga select * from tab where id in (?, ?, ?, ...)?

ResultSets

    • ¿Qué significa "Exhausted Resultset: prepare_for_new_get"?
    • ¿Por qué tengo que cerrar ResultSets?

Tipos de datos simples

    • ¿Qué sucede con DATE y TIMESTAMP?
    • ¿Cuál es el valor más largo que puedo vincular?

Método

Tipo de columna

Longitud máxima

setBytes LONG

4000 bytes


setBytes LONG RAW

2G bytes


setString LONG

32 000 caracteres (SetBigStringTryClob="false")
4000 caracteres (SetBigStringTryClob="true")


setString

CLOB


Caracteres 2G


    • ¿Por qué es el resultado de leer un TIMESTAMP WITH TIME ZONE diferente?

Tipos de datos avanzados (objetos)

    • ¿Cómo debo crear instancias de ADT?
    • ¿Por qué no se admite el método de fábrica estándar createArrayOf?

BFILEs, BLOBs, CLOBs

    • ¿Qué hace DBMS_LOB.ERASE?
    • ¿Puedo utilizar oracle.sql.CLOB.putChars()?
    • OCI proporciona una función para manipular un CLOB CharSetId. ¿Cuál es el equivalente de JDBC?
    • ¿Es más lento escribir en BLOBS que insertar LONG RAWs?
    • ¿Por qué aparece un error ORA-03127 al obtener LobLength en el código de ejemplo de flujo?
    • Cuando obtengo un CLOB de la base de datos y, a continuación, lo actualizo, a veces mis cambios no aparecen en la base de datos. ¿Por qué?

Tipos de REF

    • ¿Cómo puedo transferir un oracle.sql.REF entre dos clientes JDBC diferentes (EJB, clientes JDBC, etc.)? Dado que la clase REF no es serializable
    • ¿Cómo puedo crear una nueva REF?

Tipos de OPAQUE

    • ¿Qué son los tipos de OPAQUE?

Fuentes de filas

    • Al definir el atributo de desplazamiento después de la ejecución, no afecta a la capacidad de desplazamiento de RowSet. ¿Por qué?
    • ¿Puedo serializar el objeto RowSet en un archivo plano incluso si RowSet contiene flujos?

Controlador Thin

    • ¿Se puede utilizar el controlador JDBC Thin para desarrollar aplicaciones Java?

Controlador interno del servidor

    • ¿Cuándo debo utilizar el controlador interno del servidor?

Controlador thin del servidor

    • ¿Cuándo debo utilizar el controlador interno del servidor?

Errores

    • DriverManager.getConnection da el error: "Controlador no adecuado"
    • Mensaje de error: "UnsatisfiedLinkError with OCI driver"
    • Mensaje de error: "ORA-1019: imposible asignar memoria".
    • Mensaje de error: "ORA-01000: máximo de cursores abiertos superado"
    • Mensaje de error: "ORA-01002: obtención fuera de secuencia"
    • Mensaje de error: "ORA-12705: valor de parámetro NLS no válido o desconocido especificado"
    • Error al intentar recuperar texto para el error ORA-12705.
    • Mensaje de error: el controlador JDBC Thin me indica errores de "carácter no válido" para literales Unicode
    • Las operaciones INSERT o UPDATE son lentas
    • Mensaje de error: "Connection reset by peer"
    • ¿Qué significa "violación de protocolo"?

Programas de demostración

    • ¿Existe algún programa de demostración de JDBC?
    • ¿Cómo puedo ejecutar las demostraciones?
    • ¿Qué debo hacer cuando se produce un error al ejecutar una demostración?

Utilidad de Rastreo JDBC de Oracle

    • ¿De qué se trata la utilidad de rastreo JDBC?
    • ¿Cómo puedo activar el rastreo de JDBC antiguo?
    • ¿Cómo puedo controlar el volumen de salida de rastreo?
    • ¿Dónde va la salida de rastreo?
    • ¿Cómo puedo desactivar DMS en un jar activado para DMS?

Herramientas y procesos de desarrollo

    • ¿Puedo depurar programas JDBC con Symantec Visual Cafe?
    • ¿Puedo depurar programas JDBC con Visual J++ de Microsoft?

Funciones compatibles

    • ¿Pueden los controladores JDBC acceder a procedimientos almacenados PL/SQL?
    • ¿Los controladores JDBC admiten la transmisión?
    • ¿Los controladores JDBC admiten juegos de caracteres multibyte?
    • ¿Funcionan los controladores JDBC con firewalls?
    • ¿Los controladores JDBC de Oracle admiten tablas/juegos de resultados/registros/booleanos PL/SQL?
    • ¿Se admite el failover?
    • ¿Cómo admiten los controladores JDBC los tipos de datos Oracle ROWID? ¿Qué tiene que ver esto con getCursorName y setCursorName?
    • ¿Cómo admiten los controladores JDBC los tipos de datos Oracle ROWID?
    • ¿Funciona ANO con controladores JDBC?
    • ¿Puedo serializar tipos de datos oracle.sql.*?
    • ¿Los controladores JDBC admiten objetos o recopilaciones?
    • ¿Puedo utilizar WaitOption y AutoRollback?
    • ¿Puede un procedimiento almacenado Java en una instancia de base de datos abrir una conexión a otra instancia de base de datos?

Desempeño

    • ¿Cuál es más rápido, el controlador Thin o el controlador OCI?
    • ¿Qué es más rápido, las sentencias o PreparedStatements?

java.util.logging

    • ¿Cómo puedo utilizar java.util.logging para obtener la salida de rastreo de los controladores JDBC de Oracle?
    • ¿Cómo configuro java.util.logging para obtener una salida de rastreo útil de JDBC de Oracle?
    • ¿Qué sucede con el controlador interno del lado del servidor?