java - BlackBerry 上的 SQLite 出现 SQL 逻辑错误或丢失数据库错误

标签 java sql sqlite blackberry

大家好,我遇到以下问题。我最近在 SQLite 中的数据库中添加了一个额外的列,现在它给我一个 SQL 逻辑错误或丢失数据库错误 我对数据库进行了更改,并删除了 BB 模拟器上的虚拟 SD 卡以删除旧数据库并允许在模拟器上创建新数据库,出现问题的函数代码如下:

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,如果我恢复更改就不再有任何问题,有什么想法吗?

最佳答案

听起来数据库已更改但未提交 - 这意味着对数据库的下一个查询将返回“损坏”状态。

一定要提交任何更改 - 并确保像这样的极端更改(如果即时完成)是在锁定的数据库上执行的(不希望任何其他讨厌的线程尝试访问它!)

关于java - BlackBerry 上的 SQLite 出现 SQL 逻辑错误或丢失数据库错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5009320/

相关文章:

python - 存储到 MySQL 数据库时,非 Unicode 字符会更改为 "????"

php - SQL 的扩展占位符,例如ID 在哪里(??)

c++ - 将Sqlite3添加到项目错误C1853预编译头文件来自以前的版本

mysql - 获取每个 ID Mysql 的 2 个时间戳之间的前 N ​​行

java - 类图中的组合关系可以有循环吗?

java - 从设计的角度来看 "Leaking this"

java - 无法让 Servlet 以 UTF-8 格式处理请求内容

sqlite - WITH UPDATE语句上的“无此列”

python - python sqlite3中的递归(级联)选择

java - 在 Java 代码中使用自己的 keystore