Le pilote JDBC lève l'exception "ResultSet Closed" sur le ResultSet vide

J'ai un problème dans le pilote JDBC pour SQLite.

Je suis de l'exécution d'une requête SELECT.

Si je reçois un vide ResultSet (0 lignes), puis je vois un "Fermé ResultSet" exception levée lors de l'appel de getString(1).

Sans trop avant JDBC expérience, ma théorie (qui je ne pouvais pas confirmer par Javadoc ResultSet), c'est que

  • getString(1) ne fonctionne PAS sur un vide (zéro-ligne) jeu de résultats (par leur conception ou à cause d'un bug)
  • ResultSets '"ouvrir" le drapeau est réglé sur false sur des lignes nulles (encore une fois, de par leur conception ou un bug)

J'ai vu ce rapport de bug mais je suis pas sûr si c'est lié.

Mon qeustions sont:

  1. Est la théorie ci-dessus correcte?
  2. Est-ce un bug? Fonctionnalité? (et si oui, quelqu'un peut-point de la documentation, s'il vous plaît?)
  3. Est-il spécifique à SQLIte est JDBC ou génériques ResultSet dans tous les pilotes JDBC?
  4. Quelle est la bonne façon de faire des trucs comme ça??

Pour le #4, ma solution a été d'utiliser isFirst() appel juste après executeQuery() pour vérifier si toutes les lignes sont là, dans le jeu de résultats. Est-ce l'approche des meilleures pratiques?

(Je pourrais aussi ont tout simplement choisi un nombre insetad puisque je n'ai pas vraiment besoin d'un ensemble de résultats, simplement zéro différente de zéro drapeau, mais je veux savoir la bonne thingh faire si je n'ai soucient de sélectionner les résultats de l')

Merci!

source d'informationauteur DVK