Comment puis-je vérifier si un nom de colonne existe dans un CachedRowSet?
Je suis l'interrogation des données à partir de points de vue qui sont sujettes à changement. J'ai besoin de savoir si la colonne existe avant je fais un crs.get******()
.J'ai trouvé que je peux interroger les métadonnées de ce genre pour voir si une colonne exister avant que je demande les données.
ResultSetMetaData meta = crs.getMetaData();
int numCol = meta.getColumnCount();
for (int i = 1; i < numCol+1; i++)
if(meta.getColumnName(i).equals("name"))
return true;
Est-il un moyen plus simple de vérifier si il existe une colonne?
EDIT:
Il doit être de la base de données agnostique. C'est pourquoi je suis référencement de la CachedRowSet
au lieu de la base de données.
OriginalL'auteur WolfmanDragon | 2009-01-20
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas un moyen plus simple avec le général de l'API JDBC (au moins pas que je sache, ou peut trouver...j'ai eu exactement le même code dans ma maison-grandi ensemble d'outils.)
(Votre code n'est pas complet):
Cela étant dit, si vous utilisez de propriété, base de données spécifique à l'API et/ou des requêtes SQL, je suis sûr que vous pouvez trouver la plus élégante des façons de faire la même chose...mais vous auriez à écrire du code personnalisé pour chaque base de données à traiter. Je collerais avec l'Api JDBC, si j'étais vous.
Il ya quelque chose au sujet de votre solution proposée qui vous fait penser que c'est incorrect? Il semble assez simple pour moi...
Si vous avez besoin de regarder pour un grand nombre de colonnes, vous pouvez toujours avoir ce retour, un
Set<String>
peuplée par lesgetColumnName(i)
les appels de méthode. De cette façon, vous pouvez vous référer àset.contains(myCol)
au lieu de parcourir tout.OriginalL'auteur Jared
vous pouvez prendre la plus courte approche de l'utilisation du fait que findColumn() lève une exception SQLException pour InvalidColumName si la colonne n'est pas dans le CachedRowSet.
par exemple
Probablement un abus de la gestion des exceptions (par EffectiveJava 2e éd point 57), mais c'est une alternative à la boucle dans toutes les colonnes de la méta données.
OriginalL'auteur Peter Mullarkey
La Base De Données?
Je pense que dans Oracle il y a des tables où les colonnes sont répertoriés.
Je ne me souviens pas si il travail pour la vue aussi, mais je suppose qu'ils le font, c'était quelque chose comme:
ou
Je ne me souviens pas exactement de la syntaxe. Vous devriez avoir spatiale des autorisations.
Tous les SGBDR doit avoir quelque chose de similaire.
Vous pouvez également effectuer la requête
Et à partir des métadonnées obtenir les colonnes, si ce que vous voulez pour éviter de récupérer les données avant de savoir si les colonnes sont présents.
Ensuite, sélectionnez * à partir de mavue, où 1 = 0 devrait faire. Travailler avec RsMd si, mais c'est assez rapide.
OriginalL'auteur OscarRyz
Non, il n'y a vraiment pas de meilleure façon. Vous pouvez réviser le problème. Si vous pouvez redéfinir le problème, parfois, il rend la solution plus simple parce que le problème a changé.
OriginalL'auteur Joshua
AVERTISSEMENT: suite à un commentaire purement à partir de la mémoire sans papiers justificatifs 🙂
Si je me souviens bien il y a un mystérieux problème qui dresse sa toujours aussi laid-tête lorsque l'oracle mise en cache de l'ensemble de lignes de la mise en œuvre est utilisée avec le regroupement de connexion. Il semble y avoir un silence de référence pour la connexion tenue dans le cache de l'ensemble de lignes d'objet (même si c'est censé être déconnecté), qui se ferme une autre connexion par la suite ouvert à partir de la piscine sur la collecte des ordures. Pour cette raison, j'ai finalement renoncé et a écrit de ma propre objet de données (couche de ces jours, je serais à la main qu'au cours du printemps & hibernate).
OriginalL'auteur davek
Vieux thread, mais j'ai juste connu le même problème et a fini avec une fonction d'utilité:
Que ce serait bien elegent si nous n'aurions pas à attraper les exceptions à l'intérieur d'un lambda (sans les moches, les hacks)
OriginalL'auteur Lutosław