Java: impossibile impostare la modalità di commit automatico con valore false nell'API Java 1.4?
-
19-09-2019 - |
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?
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.