SQLite на BlackBerry дает ошибку логики SQL или отсутствует ошибка базы данных - PullRequest
0 голосов
/ 15 февраля 2011

Привет всем, у меня следующая проблема.Недавно я добавил дополнительный столбец в свою базу данных в SQLite, и теперь он дает мне SQL logic error or missing database error. Я внес изменения в базу данных и удалил виртуальную SD-карту на симуляторе BB, чтобы удалить старую базу данных и разрешить создание новой.на симуляторе код функции, вызывающей проблему, выглядит следующим образом:

public Vector obtenerVoiceNotes() 
{
    Vector voiceNotes = new Vector();

    long id, idRemoto, duracion;
    byte[] audioArray;
    String nombre, comentario;

    try
    {
        // Se prepara la sentencia SQL
        Statement statement = _BD.createStatement("SELECT * FROM VoiceNote WHERE idUsuario = ?");
        statement.prepare();

        statement.bind(1, MainApp._user.getIdUser());

        // Se define un cursor para navegar por el resultado
        Cursor cursor = statement.getCursor();

        // Se itera sobre el cursor y se agrega al arreglo de notas 
        while(cursor.next())
        {
            Row row = cursor.getRow();

            id = row.getInteger(0);
            audioArray = row.getBlobBytes(1);
            nombre = row.getString(2);
            comentario = row.getString(3);
            idRemoto = row.getInteger(4);
            duracion = row.getInteger(5);

            long userId = MainApp._user.getIdUser();

            VoiceNote voiceNote = new VoiceNote(nombre, comentario, audioArray, userId);
            voiceNote.set_id(id);
            voiceNote.set_idRemoto(idRemoto);
            voiceNote.set_duration(duracion);

            voiceNotes.addElement(voiceNote);
        }

    }
    catch (DatabaseException e)
    {
        System.out.println();
        MainApp.messageDialog(e.toString());
    } catch (DataTypeException e) {
        // TODO Auto-generated catch block
        MainApp.messageDialog(e.toString());
    }

    // Se retorna el arreglo de notas obtenido
    return voiceNotes;
}

Исключение происходит на statement.prepare() это оператор создания для моей таблицы:

CREATE TABLE "VoiceNote" (
    "ID"         INTEGER PRIMARY KEY NOT NULL ,
    "Track"      BLOB,
    "Nombre"     VARCHAR(30) NOT NULL UNIQUE,
    "Comentario" VARCHAR(80),
    "idRemoto"   INTEGER     NOT NULL  DEFAULT -1,
    "Duracion"   INTEGER     NOT NULL  DEFAULT 0,
    "idUsuario"  INTEGER      NOT NULL  DEFAULT -1)

Новый столбец: idUsuario Если я отменил изменение, проблем больше нет, есть идеи?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2011

Похоже, что база данных была изменена, но не зафиксирована - это означает, что следующий запрос к базе данных вернет состояние «повреждено».

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

1 голос
/ 16 февраля 2011

Мне удалось это решить.Я удалил приложение из симулятора вместе с SD-картой.Я сбросил и заново создал базу данных, чтобы убедиться, что у меня есть правильная логика на телефоне, и она работала нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...