Доброго времени суток,
Ситуация такая: я пишу сервер, и у меня часто подключаються/отключаються клиенты. Каждый из них практически всегда работает со своей БД, а так как клиентов много то и подключений много. Скажу еще, что приложение многопоточное, и может быть такое, что клиенты работают в разных потоках.
Для обслуживания клиентов я написал специальний класс. Предполагаеться создание по одному его экземпляру на каждого клиента. Так как клиентов много, то я решил создавать все QSqlDatabase на хипе, чтобы лишний раз не перегружать стэк, (
я правильно решил?) но с удивлением обнаружил, что в созданной на хипе БД я не могу (не умею/не нашел как) поменять имя подключения и драйвер. Все конструкторы QSqlDatabase или не принимают параметров, или принимают ссылки на БД, созданные на стеке.
Покопавшись в интернете не нашел ничего лучше чем это:
C++ (Qt)
mDatabase = new QSqlDatabase(QSqlDatabase::addDatabase(GDatabase::driverType));
Но в ходе работы программы в лог сыпались такие сообщения:
QSqlDatabasePrivate::addDatabase: duplicate connection name "Имя подключения", old connection removed.Я не нашел ничего лучше чем задавать имя подключения для каждого клиента отдельно, а так как, я создаю по экземпляру класса-обработчика на каждого клиента, то соотвественно в памяти они не могут находиться по одному и тому же адресу, и я решил сделать так:
C++ (Qt)
mDatabase = new QSqlDatabase(QSqlDatabase::addDatabase(GDatabase::driverType,QString::number(long(this))));
где - this - указатель на класс-обработчик.
Чесно скажу, мне такой способ не оч. нравиться, но это лучше чем то, что было.
А теперь вопросы:
1. В ходе работы я заметил, что после уничтожения одного клиента и создания другого (и инициализации его БД) я получаю:
QSqlDatabasePrivate::addDatabase: duplicate connection name '147141264', old connection removed.Тоесть используеться адрес отключившегося клиента, не понятно лишь почему БД не отключаеться, в деструкторе вызываю:
C++ (Qt)
if (mDatabase){
mDatabase->close();
delete mDatabase;
}
2. Что скажете о моем способе именования подключений? Я не смахиваю на шизофреника?
Любая критика принимаеться, оч. желательно с поучениями и обьяснениями.
P.S. Простите за ошибки. Как граматические так и стилистические, рус. язык мне не родной