Cuando ejecute la selección en Postgres sobre Java
SELECT '' AS COL1, 0 AS COL2 FROM MYTABLE 1=2;
El tipo de columna es Types.OTHER
tanto para COL1 como para COL2. Como es obvio, el conjunto de resultados no tiene ninguna fila.
Pero si tengo filas en el conjunto de resultados usando la consulta a continuación:
SELECT '' AS COL1, 0 AS COL2 FROM MYTABLE;
El tipo de COL1 sigue siendo Types.OTHER
pero el tipo de COL2 es Types.INTEGER
. En mi caso, necesito Types.VARCHAR
y Types.INTEGER
incluso si el resultado está vacío o no.
¿Hay alguna configuración en la capa de base de datos o en la URL de jdbc para obtener Types.VARCHAR
y Types.INTEGER
para dos consultas?
prueba el reparto explícito:
SELECT ''::VARCHAR AS COL1, 0::INTEGER AS COL2 FROM MYTABLE;
El controlador Postgres JDBC 9.4.1212 informa el tipo de constante 0 como Types.INTEGER
= 4, independientemente de si hay un resultado o no (esto también puede depender de la versión del servidor; lo probé con un servidor 9.4).
La constante de cadena aún se notifica como Types.OTHER
. Para dichas columnas, ResultSetMetaData.getColumnClassName(i)
devuelve java.lang.String
, por lo que si encuentra Types.OTHER
, puede usar esta información para reconocer la columna como una columna de caracteres.
Si desea que ResultSetMetaData
devuelva el tipo deseado, tome las fuentes de Github y parchee ResultSetMetaData
para hacer esta traducción.