Bonjour,

J'accède à ma base de données Postgresql via JDBC par des connections gérés en pool (donc non fermé pendant toute la vie du process).

Dans certaine méthodes je fait des requêtes qui se traduise par des resultSet et qui coté DB applique des locks. J'ai beau fermé le ResultSet et le Statement les locks ne sont pas otés.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
 try {
            super.openConnection(); // récupération d'un connection disponible (qui est dejà ouverte malgré le nom de la méthode)
            //super.setAutoCommit(false);
            ResultSet rSPubHash = super.executeQuery(sqlpubhash);
            while (rSPubHash.next()) {
                pubhash = rSPubHash.getString("pub_hash");
            }
            rSPubHash.close();
            if( pubhash == null) {
                return true;
            }
 
            computedpubhash = getPublicationHash(article);
            if (computedpubhash == null) {
                return true;
            }
 
            if (computedpubhash.equals(pubhash)) {
                return false;
            }
            return true;
 
 
        } catch (Exception ex) {
            ex.printStackTrace();
            return true;
        } finally {
            super.freeResources(); // libère la connection tout en fermant le statement associé si il y en a un d'ouvert
        }
Je suis sure que mon lock viens du resultSet (où en tout cas de l'execution de la requête car si je commente
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
    ResultSet rSPubHash = super.executeQuery(sqlpubhash);
            while (rSPubHash.next()) {
                pubhash = rSPubHash.getString("pub_hash");
            }
   rSPubHash.close();
je n'ai plus de lock persistant.

J'avoue ne pas trop comprendre surtout que je fait plein d'autre requêtes dans ce programme et tout le reste se passe bien. Si vous avez une idée