2009-07-20 21 views
1

J'essaie de fermer la connexion après l'exécution d'une requête. Avant, je crée juste une instance CachedRowSetImpl et il s'occupera de libérer les ressources pour moi. Cependant, j'utilise le pilote de base de données Hive du projet Hadoop. Il ne prend pas en charge CachedRowSetImpl.execute(). Je me demande s'il existe un autre moyen qui me permet de copier l'objet ResultSet et de fermer la connexion?Copier ResultSet sans utiliser CachedRowSetImpl.execute()

Répondre

5

Vous pouvez remplir un CachedRowSet d'un existant ResultSet:

public static RowSet executeQuery(String sql) throws Exception { 
    Connection con = null; 
    PreparedStatement ps = null; 
    ResultSet rs = null; 
    try{ 
     con = openConnection(); 
     ps = con.prepareStatement(sql); 
     rs = ps.executeQuery(); 
     CachedRowSet rows = new CachedRowSetImpl(); 
     rows.populate(rs); 
     return rows; 
    }finally{ 
     rs.close(); 
     ps.close(); 
     con.close();    
    }  
} 
+0

Utiliser ruche aussi bien et je reçois une « méthode non prise en charge » erreur sur l'appel .populate. – eych