2010-10-18 5 views
2

Je travaille en Java, en insérant des données de HashMaps de certains types dans une base de données SQL. Il a produit un code comme ceci:Refactoring Code similaire sur les types de données

for (String key : strings.keySet()) { 
    result_set.updateString(key, strings.get(key)); 
} 

for (String key : booleans.keySet()) { 
    result_set.updateBoolean(key, booleans.get(key)); 
} 

for (String key : dates.keySet()) { 
    result_set.updateDate(key, dates.get(key)); 
} 

Je suis habitué à Ruby, où le code comme celui-ci prendrait une ligne et je ne peux pas croire que je dois le faire comme ça en Java. Je dois avoir tort. Y a-t-il un meilleur moyen? Je suppose en utilisant des génériques? J'ai essayé d'utiliser result_set.updateObject (key, object) mais cela m'a donné "SQLException: Impossible de convertir entre java.util.Date et VARCHAR."

+1

pas vraiment. Il y a peut-être d'autres façons d'atteindre ce que vous voulez dans votre cas, mais en Java pur (pas de pré-processeur ni d'autre langage JVM), vous êtes obligé de visiter "verbose-land" dans certains cas . Par exemple (ce n'est pas identique, mais c'est lié) si vous voulez implémenter, disons, la comparaison à virgule flottante de Goldberg (en utilisant un epsilon), vous devez écrire la méthode une fois pour double et une fois pour float. Dans certains cas, vous devez répéter ceci pour tous les types de primitives. En Ruby ou Scala c'est une évidence et ne nécessite aucune répétition. – SyntaxT3rr0r

+1

note que certains projets utilisent des générateurs de code pour esquiver la répétition de code Java. L'excellente bibliothèque Java Trove, si je ne me trompe pas, utilise un tel générateur de code. – SyntaxT3rr0r

+0

Comment décevant. Super commentaires, merci! – AndrewKS

Répondre

1

Jetez un coup d'œil à MyBatis, un mappeur SQL qui gère le mappage entre POJO (y compris Maps et Lists) et SQL. Cela nous a épargné une tonne de travail par rapport à ce qu'il faudrait pour tout faire nous-mêmes en JDBC brut.

+0

Je vais certainement jeter un coup d'oeil quand je retournerai au travail demain. Merci! – AndrewKS

Questions connexes