جافا: غير قادر على تعيين وضع الالتزام التلقائي مع قيمة FALSE في Java 1.4 API؟

StackOverflow https://stackoverflow.com/questions/1912779

سؤال

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، ويتم كل شيء في المعاملات وأنت تتحكم فيها مع الالتزام أو التراجع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top