Sqlite Out of Memory при подготовке оператора обновления - PullRequest
0 голосов
/ 11 апреля 2011

У меня одна проблема с моим приложением.

Я создаю одну AsyncTask для загрузки списка файлов с сервера.После загрузки всех файлов я обновляю базу данных.Но когда я позвонил в запрос об обновлении, выдается следующая ошибка.

Ошибка 21 (недостаточно памяти) при 0x0 при подготовке обновления

Может кто-нибудь сказать мне, почему возникает эта ошибка?

Пример кода

public void setStatus(int index)
{
    try
    {
        db.OpenDatabase();
        db.updateStatus(id.get(index), 1);
        db.closeDatabase();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

Выше функции, вызываемой из AsyncTask ....

public void updateStatus(int id,int status)
{
    try
    {
        db.execSQL("update sample set status =" + status + " where id = " + id);
    }
    catch(Exception e){e.printStackTrace();}
}

Ответы [ 4 ]

1 голос
/ 11 апреля 2011

Это может быть связано не с самой базой данных, а с тем фактом, что память (куча) почти заполнена и открытие базы данных полностью заполняет ее.

Помните, что большинство телефонов имеют 48 МБ кучи или даже меньше.

1 голос
/ 02 апреля 2012

Иногда во время работы я также получал ту же ошибку.

Я использовал эту ссылку

"Ошибка 21 (недостаточно памяти)" при выполнении некоторых операций SQLite

Там сказано, что эта ошибка возникает при попытке работать на закрытой БД.Я оглянулся на свой код и обнаружил, что я делаю то же самое.После этого все заработало

Я думаю, вы также пытаетесь работать с закрытой БД.

0 голосов
/ 28 декабря 2015

У меня ошибка «недостаточно памяти» (21), когда я пытаюсь вызвать sqlite3_prepare () с нулевым указателем на дескриптор базы данных.Убедитесь, что ваш дескриптор действителен и база данных открыта.

0 голосов
/ 11 апреля 2011

Вы пытались использовать метод update () вместо execSQL ()?

public void updateStatus(int id,int status)
{
    try
    {
         ContentValues values = new ContentValues();
         values.put("status", status);
         db.update ("sample", values, "id = ?", new String[]{Integer.toString(id)});
    }
    catch(Exception e){e.printStackTrace();}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...