Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Утечка памяти QSqlQuery.next()
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
guest456
Добрый день уважаемые форумчане. Есть простейший код выборки из базы данных sqlite. Проблема в том, что в базе есть очень большое число различных строк. При работе с небольшими базами, проблем нет. А при большой базе, программа вылетает с ошибкой out of memory.

        if(!CreateConnection())
        {
            return;
        }
        QSqlQuery query;
        if(!query.exec("SELECT * FROM adress"))
        {
            qDebug() << query.lastError();
            return;
        }
        QString str;
        while(query.next())
        {
            //str= query.value(0).toString();
            //qDebug() << domen;
        }


При работе программы, количество потребляемой памяти доходит до 800MB и программа вылетает. Как правильно делать выборку с больших по размеру баз. Спасибо.
lanz
SELECT * FROM ... LIMIT x OFFSET y ORDER BY ...

Например, но вообще странно, вы уверены что имено query жреть память, а не код внутри цикла?
guest456
Цитата(lanz @ 2.8.2017, 1:52) *
SELECT * FROM ... LIMIT x OFFSET y ORDER BY ...

Например, но вообще странно, вы уверены что имено query жреть память, а не код внутри цикла?


К сожалению, это так. Т.е вот этот пустой цикл:
        while(query.next())
        {

        }


Вызывает эту ошибку



Уже и пробовал ставить qt creator версии 4.8 - тоже самое. Не могу понять как же сделать выборку по всей базе (
lanz
Я посмотрел исходники, там драйвер кеширует результаты, поэтому да, вы правы, он все съел :)
Попробуйте LIMIT/OFFSET как я писал выше.
guest456
Цитата(lanz @ 2.8.2017, 2:18) *
Я посмотрел исходники, там драйвер кеширует результаты, поэтому да, вы правы, он все съел :)
Попробуйте LIMIT/OFFSET как я писал выше.

Благодарю. А то я уже не знал что думать. Попробую как вы сказали. :)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2020 IPS, Inc.