java with Tipo de datos del resultado SUM en MySQL




suma select mysql (3)

Esto es sólo una suposición, pero tal vez enviarlo a enteros obligará a MySQL a decir siempre que es un número entero.

SELECT CAST(SUM(price) AS SIGNED) FROM cakes WHERE ingredient = 'marshmallows';

https://code.i-harness.com

Tengo un pequeño problema al convertir el resultado de una consulta MySQL en una clase Java cuando utilizo SUM.

Al realizar una SUM simple en MySQL

SELECT SUM(price) FROM cakes WHERE ingredient = 'chocolate';

con el price como un número entero, parece que SUM veces devuelve una cadena y, a veces, un entero, según la versión del controlador JDBC.

Aparentemente, el servidor le dice al controlador JDBC que el resultado de SUM es una cadena, y el controlador JDBC algunas veces 'convenientemente' lo convierte en un entero. (ver la explicación de Marc Matthews ).

El código de Java usa BeanInfo e Introspection para completar automágicamente una (lista de) bean (s) con el resultado de una consulta. Pero obviamente esto no puede funcionar si los tipos de datos difieren entre los servidores donde se implementa la aplicación.

No me importa si obtengo una cadena o un número entero, pero me gustaría tener siempre el mismo tipo de datos, o al menos saber de antemano qué tipo de datos obtendré.

¿Hay alguna forma de saber qué tipo de datos será devuelto por una SUM MySQL desde dentro del código de Java? ¿O alguien sabe alguna forma mejor de lidiar con esto?


Nunca he trabajado con MySQL antes, así que no puedo decir por qué, pero si dices:

ResultSet rs = statement.executeQuery("SELECT SUM(price) FROM cakes WHERE ingredient = 'chocolate'");
int sum = 0;
if(rs.next())
size = Integer.parseInt(rs.getString(1));

Entonces no deberías tener un problema sin importar el tipo de datos devuelto como dice la documentación:

String getString (int columnIndex) arroja SQLException


Recupera el valor de la columna designada en la fila actual de este objeto ResultSet como una cadena en el lenguaje de programación Java






return-type