Domanda

SQL Server 200 Java 1.4 JBoss 3

Ciao sto ricevendo un messaggio di eccezione "non è possibile impostare l'autocommit durante una transazione gestita"

il codice è qui sotto

    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;

            }

qual è la causa di questa eccezione e cosa significa?

È stato utile?

Soluzione

L'errore è chiaro, non è possibile impostare l'autocommit mentre ci si trova in una transazione gestita.Non dovrebbe nemmeno essere necessario impostarlo su false poiché è l'impostazione predefinita, che usi per abilitare il commit automatico.

Non sono sicuro che tu stia utilizzando J2EE ed EJB, se lo sei e desideri ABILITARE l'autocommit, puoi modificare le tue impostazioni in transazione gestita dal bean (BMT) e questo ti consentirà di modificare questa impostazione.

Tuttavia, per come lo utilizzi nel tuo codice, non è necessario impostarlo su false, tutto viene eseguito nelle transazioni e tu le controlli con commit o rollback.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top