crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Обработка собственных исключений
legat
  опции профиля:
сообщение 17.5.2011, 12:59
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 8.8.2010
Пользователь №: 1940

Спасибо сказали: 0 раз(а)




Репутация:   0  


Суть проблемы:
Пытаюсь подключиться к SQLite БД в конструкторе класса DataWork. Пытаюсь в БД создать таблицу. Если таблица уже создана, то должно отработать исключение.
Раскрывающийся текст
int main( ) {
    DataWork db;
    try {
    } catch ( DataWork::Error e ) {
        std::cout << "catch error: " << e.errorStr << std::endl;
        return -1;
    }
    std::cout << "end of program" << std::endl;
    return 0;
}

const std::string CREATE_USERS_TABLE = "Create table users( id integer primary key autoincrement, login varchar(20), serverName varchar(20), password varchar(20) );";
DataWork::DataWork( ) {
    if ( sqlite3_open( DBNAME.c_str( ), &m_db ) != SQLITE_OK ) {
    char *errorMsg = ( char * ) sqlite3_errmsg( m_db );
        throw Error( errorMsg );
    }
    executeSQL( CREATE_USERS_TABLE );
}
DataWork::~DataWork( ) {
    sqlite3_close( m_db );
}
void DataWork::executeSQL( const std::string &sql, int ( *callback )( void *, int, char **, char ** ) ) {
    char *errorMsg;
    if ( sqlite3_exec( m_db, sql.c_str( ), callback, NULL, &errorMsg ) != SQLITE_OK ) {
        throw Error( errorMsg );
    }
}

class DataWork {
public:
    // структура ошибки
    struct Error {
        const char *errorStr;
        Error( const char *str ) : errorStr( str ) { }
    };
    DataWork( );
    ~DataWork( );
private:
    void executeSQL( const std::string &sql,
        int ( *callback )( void *, int, char **, char ** ) = NULL );
    
private:
    sqlite3 *m_db;
};


В теле функции ExecuteSQL выводится сообщение об ошибке (простая проверка, что сообщение вообще что-то содержит):
error happend!: table users already exists.
Так и должно быть.
Затем должно отработать моё исключение, но вместо этого выводится terminate called after throwing an instance of 'DataWork::Error' Аварийный останов. Программирую на клоне Debian.
Как сделать так, чтобы обработалось моё исключение и программа продолжила свою работу, т.е. вывела тестовое сообщение 'end of program'.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 8:04