Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Разработка баз данных _ Утечка памяти QSqlQuery.next()

Автор: guest456 2.8.2017, 12:45

Добрый день уважаемые форумчане. Есть простейший код выборки из базы данных 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 2.8.2017, 12:52

SELECT * FROM ... LIMIT x OFFSET y ORDER BY ...

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

Автор: guest456 2.8.2017, 13:11

Цитата(lanz @ 2.8.2017, 1:52) *
SELECT * FROM ... LIMIT x OFFSET y ORDER BY ...

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


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

        }


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



Уже и пробовал ставить qt creator версии 4.8 - тоже самое. Не могу понять как же сделать выборку по всей базе (

Автор: lanz 2.8.2017, 13:18

Я посмотрел исходники, там драйвер кеширует результаты, поэтому да, вы правы, он все съел :)
Попробуйте LIMIT/OFFSET как я писал выше.

Автор: guest456 2.8.2017, 13:38

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

Благодарю. А то я уже не знал что думать. Попробую как вы сказали. :)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)