Java Spring - RowMapper ResultSet - Valores enteros / nulos

Tengo una aplicación Java SE 8 Spring 4.1.6-RELEASE, donde estoy implementando la org.springframework.jdbc.core.RowMapper<T>interfaz, y tenía algunas preguntas sobre la java.sql.ResultSetinterfaz que se pasa en su T mapRow(ResultSet rs, int rowNum)método.

Cuando inspecciono la ResultSetclase, veo un montón de métodos para recuperar los valores de las columnas:

╔══════════════╦═════════════════════╦════════════ ══════════════════════════════════════════════════ ══════════════════════════════════════════════════ ════════════════════════════════════════════╗
║ Tipo de retorno ║ Método ║ Retorno (javadoc, se 8) ║
╠══════════════╬═════════════════════╬════════════ ══════════════════════════════════════════════════ ══════════════════════════════════════════════════ ════════════════════════════════════════════╣
║ Cadena ║ getString ║ el valor de la columna; si el valor es SQL NULL, el valor devuelto es nulo ║
║ booleano ║ getBoolean ║ el valor de la columna; si el valor es SQL NULL, el valor devuelto es falso ║
║ byte ║ getByte ║ el valor de la columna; si el valor es SQL NULL, el valor devuelto es 0 ║
║ short ║ getShort ║ el valor de la columna; si el valor es SQL NULL, el valor devuelto es 0 ║
║ int ║ getInt ║ el valor de la columna; si el valor es SQL NULL, el valor devuelto es 0 ║
║ largo ║ getLong ║ el valor de la columna; si el valor es SQL NULL, el valor devuelto es 0 ║
║ float ║ getFloat ║ el valor de la columna; si el valor es SQL NULL, el valor devuelto es 0 ║
║ double ║ getDouble ║ el valor de la columna; si el valor es SQL NULL, el valor devuelto es 0 ║
║ BigDecimal ║ getBigDecimal ║ el valor de la columna; si el valor es SQL NULL, el valor devuelto es nulo ║
║ byte [] ║ getBytes ║ el valor de la columna; si el valor es SQL NULL, el valor devuelto es nulo ║
║ Fecha ║ getDate ║ el valor de la columna; si el valor es SQL NULL, el valor devuelto es nulo ║
║ Tiempo ║ getTime ║ el valor de la columna; si el valor es SQL NULL, el valor devuelto es nulo ║
║ Marca de tiempo ║ getTimestamp ║ el valor de la columna; si el valor es SQL NULL, el valor devuelto es nulo ║
║ InputStream ║ getAsciiStream ║ una secuencia de entrada de Java que entrega el valor de la columna de la base de datos como una secuencia de caracteres ASCII de un byte; si el valor es SQL NULL, el valor devuelto es nulo ║
║ Lector ║ getCharacterStream ║ un objeto java.io.Reader que contiene el valor de la columna; si el valor es SQL NULL, el valor devuelto es nulo en el lenguaje de programación Java ║
║ InputStream ║ getBinaryStream ║ una secuencia de entrada de Java que entrega el valor de la columna de la base de datos como una secuencia de bytes no interpretados; si el valor es SQL NULL, el valor devuelto es nulo ║
║ <T> T ║ getObject ║ una instancia de tipo que contiene el valor de la columna ║
╚══════════════╩═════════════════════╩════════════ ══════════════════════════════════════════════════ ══════════════════════════════════════════════════ ════════════════════════════════════════════╝

Es la expectativa / práctica general llamar:

rs.getObject("COLUMN_NAME", Boolean.class);

rs.getObject("COLUMN_NAME", Byte.class);

rs.getObject("COLUMN_NAME", Short.class);

rs.getObject("COLUMN_NAME", Integer.class);

rs.getObject("COLUMN_NAME", Long.class);

etc., para todos los tipos primitivos? Como todo lo demás vuelve nullpor la instancia de SQL NULL.

Si es así, ¿cuál es el punto de tener todos los métodos para los diferentes tipos cuando el método Object escrito está allí?

Además, ¿cuáles son las ventajas y desventajas de cada enfoque?

  1. Utilizando getInt(String columnLabel):

    Integer resultingActionId = rs.getInt("RESULTING_ACTION_ID");
    if (rs.wasNull) {
        resultingActionId = null
    }

  2. Usando getObject(String columnLabel)y lanzando para Integer:

    Integer resultingActionId = (Integer) rs.getObject("RESULTING_ACTION_ID");

  3. Utilizando getObject(String columnLabel, Class type):

    Integer resultingActionId = rs.getObject("RESULTING_ACTION_ID", Integer.class);

Por ejemplo, noté los métodos que org.springframework.jdbc.core.JdbcTemplatesolía tener queryForLong, queryForIntetc. para obtener un valor único de una consulta de una sola fila y los reemplacé a todos a favor de un queryForObjectmétodo escrito .

¡Gracias!

Respuesta 1

Estoy trabajando con el servidor DBeaver Oracle. Recibo un error periódico sobre guardar espacio de trabajo. Intenté google para encontrar una solución, pero todo lo que encontré fue explicaciones relacionadas con metadatos. Soy nuevo en DBeaver, así que ...

Estoy tratando de escribir un programa que genere una matriz aleatoria de diez enteros (enteros entre 1 y 6) y luego tengo que formar otra matriz con todos los duplicados eliminados. Entonces {1,3,5,5,3,4,2,2,2,1} ...

Necesito omitir ciertos métodos o segmentos de código de la instrumentación y la cobertura del código. Eso me llevó a excluir métodos de la cobertura de código con Cobertura. A continuación, la página de cobertura ant http: // ...

clase pública Animal {} clase pública Bird extiende Animal {} clase pública Mamal extiende Animal {} clase pública Humano extiende Mamal {} clase pública Principal {vacío público Hambriento (Mamal mamal) {...