2009-09-13 8 views
3

Besoin d'aide concernant les métadonnées jdbc. J'utilise ResultsetMetaData pour obtenir des métadonnées de colonnes d'une table sur Oracle10g. J'utilise ojdbc14.jar. Il y a un champ dans l'ID de table déclaré comme numéro. Ce champ est en cours de lecture avec jdbc à l'exécution pour obtenir ses attributs de métadonnées. ResultSetMetaData.getColumnClassName() renvoie java.math.BigDecimal alors que je m'attends à ce qu'il soit Integer ou int ou long ou long type. J'ai même essayé de créer table avec déclaration avec la définition explicite de type int pour la colonne ID commeResultSetMetaData renvoyant BigDecimal insted of int

CREATE TABLE COST_DETAILS (ID **INT** Primary Key... 

mais toujours ResultSetMetaData est de retour BigDecimal pour la colonne ID.

Y a-t-il un moyen de créer une table avec un type de colonne particulier afin de retrancher le type int/long?

ou ResultsetMetaData renvoie toujours BigDecimal pour Oracle.

Répondre

0

Non. Cela dépend du conducteur.

Vous pouvez avoir quelque chose comme:

if(class == "BigDecimal") { 
    return "Integer" 
} else if (.... 

Et retourner entier au lieu de BigDecimal. C'est ce que font la plupart des gens.

+0

@Oscar: hein? Où es-tu censé mettre ce code? –

+0

Dans une méthode auxiliaire utilisée pour déterminer quel type java appartient à quel type sql Il y a en fait une classe dans apache utils library pour faire quelque chose comme ça, je ne peux pas le trouver cependant. Quelque chose comme ceci: getJavaType (rsmd.getType (column)); // ou quelque chose comme ça – OscarRyz

4

Je pense que les nombres Oracle seront toujours mappés à BigDecimal car Oracle ne les stocke pas comme un binaire int donc c'est un mappage exact. Oracle datatypes et Oracle JDBC Vous pouvez faire des nombres à virgule flottante comme un binaire