Dans un JDBC ResultSet, ce qui devrait se produire lorsque getLong() ou getShort() est appelée sur un int colonne de résultat?
Dire que j'ai un JDBC ResultSet, et j'appelle le getLong() ou getshort() la méthode.
Pour lequel de ces types SQL {SMALLINT, INT, BIGINT} dois-je obtenir la longue, et pour quels types devrais-je obtenir une erreur?
En d'autres mots, si j'ai un INT et je veux un SMALLINT (court), serait-je l'obtenir, ou aurais-je une erreur? De même, si j'ai un INT et que vous voulez un BIGINT (long), serait-je l'obtenir, ou aurais-je une erreur?
La Javadoc (ci-dessous) de ne rien dire.
publics à long getLong(int columnIndex)
throws SQLExceptionRetrieves the value of the designated column in the current row
de cet objet ResultSet comme un long dans
le langage de programmation Java.Parameters: columnIndex - the first column is 1, the second is 2, ... Returns: the column value; if the value is SQL NULL, the value returned is 0 Throws: SQLException - if a database access error occurs
OriginalL'auteur Uri | 2010-05-13
Vous devez vous connecter pour publier un commentaire.
De la L'extraction des Valeurs à partir d'Ensembles de résultats section des tutoriels Java:
Je suis de l'interprétation que de dire que les données seront contraints. Il devrait fonctionner très bien si c'est une sortie, mais je m'attend à une perte potentielle de précision (naturellement) si, par exemple, vous êtes en train de lire une valeur de type LONG à l'aide de
getInt()
. Je m'attends à de la levée d'une Exception si vous essayez de lire le texte à l'aide degetInt()
.Vous pouvez appeler DataBaseMetaData.supportsConvert(int fromType, int toType) pour voir si une mise en œuvre prend en charge une conversion.
OriginalL'auteur Bill the Lizard
Il va la convertir en une longue et elle doit être fine.
Vous recevrez un message d'erreur si vous essayez d'obtenir le long d'une chaîne de caractères contenant "Bob", ou un autre domaine qui ne peut pas être facilement converti en long.
Il est probable qu'il est très dépendant de l'implémentation. Cela signifie simplement que vous aurez besoin de tester plusieurs DBs. Mais, le froid, la vérité est que de nombreuses applications, même à l'aide de "portable" SQL DB sont spécifiques, il est donc généralement pas un gros problème. De toute évidence, "ça dépend".
OriginalL'auteur Will Hartung
La spec ne dit rien à propos de ce comportement. Ce sera totalement dépendent de la mise en œuvre des pilotes.
Avec le MySQL Connector, vous pouvez obtenir quelque chose ressemblant à un nombre aussi longtemps que c'est en cours de validité au format numérique et elle est dans la plage de long. Null/Faux sont également retournés à 0.
OriginalL'auteur ZZ Coder
C'est dépendant de l'implémentation. La spécification dit que le jeu de résultats mise en oeuvre à l'appui de sa conversion, et vous pouvez vérifier en appelant
DataBaseMetaData.supportsConvert(int fromType, int toType)
(Section 15.2.3.1 de l'4.0 responsable de l'implémentation de spec).Le mieux est de ne pas s'appuyer sur le comportement, mais plutôt de vérifier la ResultSetMetaData pour le type correct.
OriginalL'auteur Yishai