2010-01-15 7 views
17

Je suis en train de formater un fichier ResultSet pour le sortir dans un fichier CSV. En tant que tel, je ne me soucie pas vraiment des types Java du jeu de résultats, au-delà peut-être de savoir s'il s'agit de texte ou de nombres. Est-ce que JDBC garantit getString donnera toujours une représentation sous forme de chaîne des valeurs, au moins pour les valeurs uniques (je ne dois pas me préoccuper de java.sql.Types.ARRAY, java.sql.Types.JAVA_OBJECT et quelques autres).JDBC ResultSet getString renvoie-t-il toujours une représentation String?

par exemple. donné resultSetMetaData.getColumnType(i) est un Types.FLOAT ou un Types.BIGDECIMAL. rs.GetString(i) donnera-t-il toujours de la chaîne?

i.e. Existe-t-il des cas getString lève une exception SQLException ou renvoie null lorsque getXXX me donne la valeur?

Répondre

11

Eh oui, vérifier: http://java.sun.com/docs/books/tutorial/jdbc/basics/retrieving.html

JDBC permet beaucoup de latitude dans la mesure où les méthodes getXXX vous pouvez utiliser pour récupérer les différents types de données SQL. Par exemple, la méthode getInt peut être utilisée pour récupérer n'importe quel type numérique ou caractère. Les données qu'il récupère seront converties en un int; Autrement dit, si le type SQL est VARCHAR, JDBC tentera d'analyser un entier hors de VARCHAR. La méthode getInt est recommandée pour récupérer uniquement les types SQL INTEGER, mais elle ne peut pas être utilisée pour les types SQL BINARY, VARBINARY, LONGVARBINARY, DATE, TIME ou TIMESTAMP.

Mais attention, un pilote JDBC différent peut donner des résultats différents.

+0

** Mise à jour sur le guide lié: ** 'Notez que bien que la méthode getString soit recommandée pour récupérer les types SQL CHAR et VARCHAR, il est possible d'y récupérer n'importe quel type SQL de base. Obtenir toutes les valeurs avec getString peut être très utile, mais il a aussi ses limites. Par exemple, s'il est utilisé pour récupérer un type numérique, getString convertit la valeur numérique en objet Java String et la valeur doit être reconvertie en un type numérique avant de pouvoir être exploité en tant que nombre. Dans les cas où la valeur est traitée comme une chaîne de toute façon, il n'y a pas d'inconvénient. » – Nefreo

5

java.lang.String est une classe finale - elle ne peut jamais avoir une sous-classe. Ainsi, toute méthode renvoyant String renvoie une instance de la classe java.lang.String ou null ou déclenche une exception. Comme pour la conversion, il appartient au pilote JDBC s'il vous permettra de convertir à partir de types non-String. Je soupçonne que beaucoup auront un problème avec cela.

Je vous suggère de faire ceci:

Object item = resultSet.getObject(i); 
String strValue = (item == null ? null : item.toString()); 

Cela devrait être plus robuste, car getObject() fera toujours la chose sensible.

+0

Ou lancer 'SQLException' – kdgregory

+3

Et c'est la question, y a-t-il des cas getString va lancer une SQLException ou retourner une valeur nulle quand un getXXX me donnerait la valeur? – Anonym

Questions connexes