جافا: غير قادر على تعيين وضع الالتزام التلقائي مع قيمة FALSE في Java 1.4 API؟
-
19-09-2019 - |
سؤال
SQL Server 200 Java 1.4 JBOSS 3
مرحبا، احصل على رسالة استثناء "لا يمكنك ضبط AutoCommit أثناء معاملة مدارة"
الرمز أدناه
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;
}
ما هو سبب هذا الاستثناء وماذا يعني ذلك؟
المحلول
الخطأ واضح، لا يمكنك ضبط AutoCommit أثناء وجودك في معاملة مدارة. لا يجب أن تحتاج حتى إلى تعيين هذا إلى خطأ كما هو الافتراضي، يمكنك استخدامه لتمكينه AutoCommit.
لست متأكدا مما إذا كنت تستخدم J2EE و EJB، إذا كنت ترغب في تمكين AutoCommit، فيمكنك تغيير الإعداد الخاص بك إلى المعاملة التي تديرها الفاصوليا (BMT) وهذا سيسمح لك بتعديل هذا الإعداد.
ومع ذلك، فإن الطريقة التي تستخدمها في التعليمات البرمجية لا تحتاج إلى تعيينها إلى FALSE، ويتم كل شيء في المعاملات وأنت تتحكم فيها مع الالتزام أو التراجع.
لا تنتمي إلى StackOverflow