Question

J'ai un problème avec la conversion du résultat d'une requête MySQL en classe Java lorsque j'utilise SUM.

Lors de l'exécution d'un simple sommaire dans MySQL

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

avec price étant un entier, il apparaît que le SUM renvoie parfois une chaîne et parfois un entier, en fonction de la version du pilote JDBC.

Apparemment, le serveur indique au pilote JDBC que le résultat de SUM est une chaîne et que le pilote JDBC convertit parfois "commodément" cela en un entier. (voir l'explication de Marc Matthews ).

Le code Java utilise certains BeanInfo et Introspection à remplir automatiquement une (liste de) beans avec le résultat d'une requête. Mais cela ne peut évidemment pas fonctionner si les types de données diffèrent entre les serveurs sur lesquels l’application est déployée.

Peu importe que je reçoive une chaîne ou un entier, mais j'aimerais toujours avoir le même type de données, ou du moins savoir à l'avance quel type de données je vais recevoir.

Existe-t-il un moyen de savoir quel type de données sera renvoyé par un SUM MySQL à partir du code Java? Ou est-ce que quelqu'un connaît un meilleur moyen de gérer cela?

Était-ce utile?

La solution

Ceci est juste une hypothèse, mais peut-être que transtyper en entier forcera MySQL à toujours dire qu'il s'agit d'un entier.

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

Autres conseils

Je n'ai jamais travaillé avec MySQL auparavant, je ne peux donc pas dire pourquoi, mais si vous dites:

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

Dans ce cas, vous ne devriez pas avoir de problème, quel que soit le type de données renvoyé, car la documentation indique:

  

String getString (int columnIndex) lève SQLException


Récupère la valeur de la colonne désignée dans la ligne actuelle de cet objet ResultSet en tant que chaîne . dans le langage de programmation Java

J'ai trouvé que COALESCE (SUM (price), 0) était utile pour garantir que le champ renvoyait 0 s'il n'y avait aucun résultat.

Voir: http://lists.mysql.com/mysql/177427

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top