Russian Qt Forum
Апрель 20, 2024, 12:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlDatabase wrapper and exeptions  (Прочитано 2069 раз)
unkeep
Гость
« : Ноябрь 24, 2015, 13:15 »

Написал хелпер для репозиториев. Автоматизирует генерацию sql запросов и парсинг результата.
Работает нормально, код упрощается.

Появилась идея добавить возможность генерации исключений, дабы в большой транзакции не писать самому множество прерываний:

код без исключений:

Код
C++ (Qt)
   DatabaseWrapper dbWrapper(db);
   dbWrapper.Transaction();
   if (dbWrapper.hasError())
   {
       return MakeResponse(dbWrapper.lastError()); //error response
   }
   for(int i=0; i<100; ++i)
   {
       dbWrapper.Insert(/*params*/);
       if (dbWrapper.hasError())
       {
           dbWrapper.Rollback();
           return MakeResponse(dbWrapper.lastError()); //error response
       }
       dbWrapper.Delete(/*params*/);
       if (dbWrapper.hasError())
       {
           dbWrapper.Rollback();
           return MakeResponse(dbWrapper.lastError()); //error response
       }
       dbWrapper.Update(/*params*/);
       if (dbWrapper.hasError())
       {
           dbWrapper.Rollback();
           return MakeResponse(dbWrapper.lastError()); //error response
       }
       dbWrapper.Select(/*params*/);
       if (dbWrapper.hasError())
       {
           dbWrapper.Rollback();
           return MakeResponse(dbWrapper.lastError()); //error response
       }
   }
 
   dbWrapper.Commit();
   if (dbWrapper.hasError())
   {
       dbWrapper.Rollback();
       return MakeResponse(dbWrapper.lastError()); //error response
   }
 
   return MakeResponse(); // success response
 


код с исключениями:

Код
C++ (Qt)
   DatabaseWrapper dbWrapper(db);
   dbWrapper.setSqlErrorExeptionsEnabled(true); // now dbWrapper can throw exeptions
   try
   {
       dbWrapper.Transaction(); //can throw exeption with sqlError
       for(int i=0; i<100; ++i)
       {
           dbWrapper.Insert(/*params*/); //can throw exeption with sqlError
           dbWrapper.Delete(/*params*/); //can throw exeption with sqlError
           dbWrapper.Update(/*params*/); //can throw exeption with sqlError
           dbWrapper.Select(/*params*/); //can throw exeption with sqlError
       }
 
       dbWrapper.Commit(); //can throw exeption with sqlError
   }
   catch(QSqlError error)
   {
       dbWrapper.setSqlErrorExeptionsEnabled(false); // now dbWrapper can not throw exeptions
       dbWrapper.Rollback(); // safely
       return MakeResponse(error); //error response
   }
   return MakeResponse(); // success response
 

вопрос: какие проблемы могут возникнуть при использовании исключений?
производительность замерял, с исключениями конечно немного медленнее работает, но не соизмеримо со временем отработки самих запросов.
« Последнее редактирование: Ноябрь 24, 2015, 14:49 от unkeep » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.108 секунд. Запросов: 20.