Question

SQL Server 200 Java 1.4 Jboss 3

Salut, je reçois un message d'exception "Vous ne pouvez pas définir AutoCommit lors d'une transaction gérée"

Le code est ci-dessous

    try {
                try {
                    connection = getConnection();
                } catch (Exception e) {
                    throw new ConnectionException(e.getMessage());
                }
                for(int i=0;i<recordIds.size();i++)
                {
                    String currentRecordId=(String)recordIds.get(i);
                    try
                    {
                    //exception on this line    connection.setAutoCommit(false);
                        preparedStatement = connection.prepareStatement(getSQL("PurgeRecordInDumpData"));  
                        preparedStatement.setLong(1,Long.parseLong(currentRecordId));
                        int numberOfUpdates=preparedStatement.executeUpdate();
                        if(numberOfUpdates!=1)
                        {
                            throw new Exception("Record with record id "+currentRecordId +"could not be purged.");
                        }
                        preparedStatement.close();
                        connection.commit();
                        listOfPurgedRecords.add(currentRecordId);
                    }
                    catch(Exception e)
                    {
                        connection.rollback();
                    }
                }
                return listOfPurgedRecords;

            }

Quelle est la cause de cette exception et qu'est-ce que cela signifie?

Était-ce utile?

La solution

L'erreur est claire, vous ne pouvez pas définir AutoCommit pendant que vous êtes dans une transaction gérée. Vous ne devriez même pas avoir besoin de définir ceci sur False car c'est la valeur par défaut, vous utilisez pour l'activer AutoCommit.

Je ne sais pas si vous utilisez J2EE et EJB, si vous êtes et que vous souhaitez activer AutoCommit, vous pouvez modifier votre paramètre en transaction gérée par Bean (BMT) et cela vous permettrait de modifier ce paramètre.

Cependant, la façon dont vous l'utilisez dans votre code, vous n'avez pas besoin de le définir sur False, tout est fait dans les transactions et vous les contrôlez avec commit ou rollback.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top